XPage访问关系型数据库的最佳实践

我们在进行 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

第一种方式可以让我们非常方便的在界面控件中展示关系型数据库中的数据,第二种方式更加灵活和强大,我们可以根据实际情况选用不同的使用方式。

时间: 2024-09-12 04:23:56

XPage访问关系型数据库的最佳实践的相关文章

Spring Data 数据库建模最佳实践

本文节选自电子书<Netkiller Architect 手札> 出处:http://www.netkiller.cn 作者:netkiller , QQ:13721218, 订阅号:netkiller-ebook 第 12 章 Spring Data 数据库建模最佳实践 目录 12.1. 分类表 12.2. 为字段增加索引 12.3. 复合索引 12.4. 一对多实例 12.5. ManyToMany 多对多 12.6. 外键级联删除 ORM的出现解决了程序猿学习数据库学历成本,也加快了开发

20个数据库设计最佳实践

数据库设计是整个程序的重点之一,为了支持相关程序运行,最佳的数据库设计往往不可能一蹴而就,只能反复探寻并逐步求精,这是一个复杂的过程,也是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程.下面给出了20个数据库设计最佳实践,当然,所谓最佳,还是要看它是否适合你的程序.一起来了解了解吧. 使用明确.统一的标明和列名,例如 School, SchoolCourse, CourceID. 数据表名使用单数而不是复数,例如 StudentCourse,而不是StudentCourses. 数

SQL Server系统数据库备份最佳实践

原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信息等等. model 所有新数据库的模型,如果希望新数据库都有某些对象,可以在这里创建. tempdb sql server重启时重建,所以不需要备份 除了以上四种,其实还有一个数据库:Resource 从2005就引入的,一个只读.隐藏的数据库,包含所有在sql server中的系统对象.由于SQL SERV

解开发者之痛:中国移动MySQL数据库优化最佳实践

 章颖数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长MySQL故障诊断,性能调优,MySQL高可用技术,曾任中国电信综合平台开发运营中心DBA   开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则需要从数据类型优化,索引优化,SQL优化三个角度考虑MySQL数据库优化问题,本次分享将从开发角度,看如何实现MySQL数据库优化. 本次

升级到12c云数据库的最佳实践

目录: 升级方案的选型 各个阶段主要任务 项目成功的关键因素 升级的过程中我们会经历这样一个过程:一开始,怀着美好的愿望,我们开始升级项目:但在实施过程中会碰到或多或少的问题,饱受挫折:在努力解决问题后,系统最终能够成功上线. 第一部 分升级方案的选型 随着oracle 数据库版本的更迭,提供了越来越多的升级.迁移方法. 10.2.0.5 ,11.1.0.7,11.2.0.2 或以上 能够直接升级到12.1.0.1/12.1.0.2 版本: 其它版本需要2次升级; 如: 10.2.0.3 ->

HybridDB · 最佳实践 · 阿里云数据库PetaData

前言 随着互联网DT时代的高速发展,业界需要简单高效的数据处理方式在海量数据中挖掘价值,企业厂商和开源界目前较流行的的做法,是提供支持类SQL接口的数据库服务,或者是提供SDK接口的数据处理平台服务. 在SQL接口的数据库服务中,传统的关系数据库,如MySQL.PG等,处理海量数据显得越来越力不从心,既无法突破单机硬件资源限制,又无法并行利用多机硬件资源:大数据NewSQL数据库,必须依赖外部数据库保证数据的事务特性,并通过数据导入工具将完整提交的数据导入进来计算,系统复杂度和成本较高. 在SD

分享20个数据库设计的最佳实践_Mysql

数据库设计是整个程序的重点之一,为了支持相关程序运行,最佳的数据库设计往往不可能一蹴而就,只能反复探寻并逐步求精,这是一个复杂的过程,也是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程.下面给出了20个数据库设计最佳实践,当然,所谓最佳,还是要看它是否适合你的程序.一起来了解了解吧. 1.使用明确.统一的标明和列名,例如 School, SchoolCourse, CourceID. 2.数据表名使用单数而不是复数,例如 StudentCourse,而不是StudentCourse

20个数据库设计的最佳实践

原文:20个数据库设计的最佳实践 数据库设计是整个程序的重点之一,为了支持相关程序运行,最佳的数据库设计往往不可能一蹴而就,只能反复探寻并逐步求精,这是一个复杂的过程,也是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程.下面给出了20个数据库设计最佳实践,当然,所谓最佳,还是要看它是否适合你的程序.一起来了解了解吧.   使用明确.统一的标明和列名,例如 School, SchoolCourse, CourceID. 数据表名使用单数而不是复数,例如 StudentCourse,而

表格存储最佳实践:一种用于存储时间序列数据的表结构设计

在表格存储的数据模型这篇文章中提到: 在表格存储内部,一个表在创建的时候需要定义主键,主键会由多列组成,我们会选择主键的第一列作为分片键.当表的大小逐渐增大后,表会分裂,由原来的一个分区自动分裂成多个分区.触发分裂的因素会有很多,其中一个很关键的因素就是数据量.分裂后,每个分区会负责某个独立的分片键范围,每个分区管理的分片键范围都是无重合的,且范围是连续的.在后端会根据写入数据行的分片键的范围,来定位到是哪个分片. 表会以分区为单位,被均匀的分配到各个后端服务器上,提供分布式的服务.