我们在进行 XPages 应用开发的时候,有时一些事务性数据存在关系型数据库中,或者要集成其他系统中的数据,需要访问关系型数据库中的数据。XPages 本身是一个基于 Java 的服务器,所以它在访问关系型数据库时非常方便。
做 为一个 Java 的">开发人员,我们完全可以直接在 XPages 中通过 JDBC 访问关系型数据库。为了我们更方便的访问关系型数据库,并且紧密的与 Xpages 的控件集成,XPages 扩展库(XPages Extension Library)提供了访问关系型数据库的插件。通过使用 Xpages 扩展库中关系数据库的功能,我们能够非常容易并且高效的访问关系型数据库,而且能够直接将关系型数据库中的数据直接在界面控件中进行展示。本文将主要介绍 如何使用 Xpages 扩展库来访问关系型数据库及最佳实践。
简介
XPages Extension Library(XPages 扩展库)是 XPages 开发团队开发和维护的一个扩展 XPages 功能的控件库。它不仅提供了一系列功能强大的界面控件,同时也提供一些 XPages 基础功能的增强,例如对关系型数据库访问,Rest 服务的访问,OAuth 认证等。XPages 扩展库开始作为一个开源项目发布在 OpenNTF.org 上,很快由于开发者对它的好评,Domino 9.0 已经将扩展库中的核心功能集成进来。
在 XPages 扩展库中,与关系型数据库访问相关的主要有两个插件:
com.ibm.xsp.extlibx.relational
com.ibm.xsp.extlibx.relational.derby
插 件 com.ibm.xsp.extlibx.relational 包含了所有关系型数据库访问的实现,com.ibm.xsp.extlibx.relational.derby 作为一个封装 JDBC 驱动程序的例子,其中打包了关系型数据库 Derby 的 JDBC 驱动程序。
在插件 com.ibm.xsp.extlibx.relational 中,它是直接使用 JDBC API 访问关系型数据库的,不需要与 NSF 数据库同步,所以它的效率极高。同时,它也实现了一个 JDBC 的连接池,所有与数据库的连接都可以使用连接池中的 JDBC 连接,这样可以大大提供数据库访问的效率。为方便界面控件展示关系型数据库中的内容,它也将 SQL 查询或者关系型数据库表封装成了 XPages 的数据源,这样我们展示关系型数据库中的内容和展现 Domino 数据库中的内容一样简单。它也提供了一组 Java 和 Javascript 的 API,我们可以直接在程序中使用这些 API 来访问 JDBC。下面我将一步步介绍其安装配置方法以及如何使用。
安装配置方法
我 们要使用扩展库中的关系型数据库访问功能,首先需要将 XPages 扩展库安装到 Designer 和 Domino 服务器上。安装方法非常简单,参见 XPages 扩展库文档。安装完扩展库后,我们需要安装 JDBC 的驱动程序,然后配置数据库连接。下面我们一一介绍。
JDBC 驱动程序安装方法
JDBC 驱动程序实际上是一个 Java 库,一般就是一个 Jar 文件,我们可以通过以下三种方式来安装到 Domino 服务器中:
标准 JDBC 安装方法(不推荐使用):将 JDBC 驱动程序 jar 文件放到 Domino 自带的 JAVA 虚拟机的 jvm/lib/ext 目录中; 将 JDBC 驱动程序 Jar 文件放到 NSF 数据库中(不推荐使用):这样每一个 NSF 数据库都将加载自己的 JDBC 驱动程序,如果多个 NSF 数据库都加载
同样的 JDBC 驱动程序,可能会有冲突,另外这需要应用程序自己注册 JDBC 驱动程序; 将 JDBC 驱动程序封装为 OSGI 插件(推荐使用):这样可以自动注册 JDBC 驱动程序,不同数据库应用间可以共享 JDBC 驱动程序从而提高性能
下面我们介绍如何将一个 JDBC 驱动程序封装成为一个 OSGI 的插件以方便我们在 XPages 中使用:
首先使用 Designer 或者 Eclipse 创建一个 OSGI 的插件; 在插件的根目录中创建一个 plugin.xml 文件,并加入如下扩展点,将 JDBC 驱动程序的类名写入: <?xml version="1.0" encoding="UTF-8"?> <plugin> <extension point="com.ibm.commons.Extension"> <service type="com.ibm.common.jdbcprovider" class="JDBC驱动程序类名" /> </extension> </plugin> 在插件中创建一个 lib 目录,将 JDBC 驱动程序的 Jar 文件拷贝到插件的 lib 目录; 修改 OSGI 插件的 META-INF/MENIFEST.MF 文件 修改文件中对应 Bundle-ClassPath 属性行,将 JDBC 驱动 Jar 文件加入插件 classpath: Bundle-ClassPath: ., lib/jdbc 驱动程序文件名.jar 修改文件中 Export-Package 属性,将 JDBC 驱动程序所用到的所有类名导出,以下以 derby 数据库为例: Export-Package: com.ibm.xsp.extlib.relational.derby, org.apache.derby.authentication, org.apache.derby.catalog, org.apache.derby.catalog.types, … 修改文件中的 Require-bundle 属性,加入 JDBC 驱动程序运行所需要依赖的其他插件:Require-Bundle: com.ibm.commons.jdbc
这 样我们就可以将一个 JDBC 的驱动程序封装成为一个 OSGI 的插件。我们可以在 Designer 或 Eclipse 中将插件导出成一个 Jar 文件。需要使用时,我们只要将插件对应的 jar 文件拷贝到 Domino 的 data\domino\workspace\applications\eclipse\plugins 目录就可以了。
数据库连接设置
我 们连接关系型数据库时,我们需要指定连接的关系型数据库服务器,所用的驱动程序,用户名和密码等。在 XPages 扩展库的数据库访问插件中 , 可以通过 JDBC 连接文件来指定这些信息。XPages 扩展库中的数据库访问插件会读取 *.jdbc 的连接文件,然后创建相应的数据库连接以供应用程序使用。
我们可以将数据库连接文件 *.jdbc 放于不同位置,分别对应不同的作用域:
全局 JDBC 连接:在 Domino/data/properties 文件夹中添加 *.jdbc 文件 NSF 数据库中 JDBC 连接:在数据库的目录 WebContent/WEB-INF/ 文件夹中添加文件夹 jdbc,然后在 jdbc 中添加 *.jdbc 文件
全局 JDBC 连接可以为 Domino 服务器上的所有应用所使用,而 NSF 数据库中的 JDBC 连接只能为单个 NSF 应用所使用。
JDBC 连接文件使用一种类似 XML 的格式,用于定于 JDBC 连接参数,如 JDBC URL, 数据库用户名、密码。数据库访问插件会读取这些 *.jdbc 的连接文件,解析其内容,创建连接池,并且将连接通过 JNDI 暴露出来,对应的 JNDI 的名字为:jdbc/{ 文件名 }。开发人员也可以直接通过 JNDI 的 API 来获取相应连接。连接文件中有四个属性可以设置:
Driver:JDBC 驱动程序的类全名 Url:JDBC URL,用于指定 JDBC 驱动类型和服务器地址等 User:用于访问关系型数据库的用户名 Password:用于访问关系型数据库的用户名对应密码
下面是一个样例 jdbc 连接文件,我们可以参照它来写自己的 JDBC 连接文件:
<jdbc> <driver>org.apache.derby.jdbc.
EmbeddedDriver</driver> <url>jdbc:derby:${rcp.data}\derby\XPagesJDBC;create=true</url> <user>phil</user> <password>phil</password> </jdbc>
使用方法
一旦我们安装了 JDBC 驱动程序,并且配置好了数据库连接文件,我们就可以在应用中访问关系型数据库了。我们可以通过两种方式来访问:
在界面控件中使用 RDBMS 数据源 在 Java 或 Javascript 代码中使用 API
第一种方式可以让我们非常方便的在界面控件中展示关系型数据库中的数据,第二种方式更加灵活和强大,我们可以根据实际情况选用不同的使用方式。