IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere | Information Management  >

在 WebSphere Application Server V7 上使用 IBM solidDB V6.3 和 OpenJPA

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码

英文原文

英文原文


级别: 中级

Kevin Sutter, 高级软件工程师, IBM
Donald Vines, 执行 IT 架构师, IBM

2009 年 8 月 24 日

Journal icon Java™ Persistence API (JPA) 是 Enterprise JavaBean™ (EJB) 3.0 规范的一部分。JPA 可用于 Java Standard Edition (Java SE) 和 Java Enterprise Edition (Java EE) 应用程序。IBM® solidDB® 是一个内存关系数据库,它的速度最高可达常规数据库的 10 倍。solidDB 支持 Java Database Connectivity (JDBC) 2.0 规范。许多 Java SE 和 Java EE 应用程序可以利用使用 JDBC 的内存数据库的性能优势。本文介绍如何在 IBM WebSphere® Application Server V7.0 上通过 solidDB V6.3 和 OpenJPA 利用这些优势。

来自 IBM WebSphere Developer Technical Journal

简介

您可以点击如下链接,马上下载 WebSphere Application Server 软件 V7 版本,体验其为您带来的新特性及新功能。

更多关于 WebSphere Application Server 的技术资源,请参考:

Java Persistence API (JPA) 作为 EJB 3.0 规范 (JSR220) 的一部分引入,其目的是使整个 Java 社区基于一个单一的、标准的、持久的 API。JPA 吸收了 Hibernate、TopLink、Java Data Objects (JDO) 和 Container Managed Persistence (EJB-CMP) 2.1 规范的精华。

JPA 可用于 Java Standard Edition (Java SE) 和 Java Enterprise Edition (Java EE) 环境,因为它将实体表示为可以被一个 JPA 持久性提供者(如 Apache OpenJPA)管理的 Plain Old Java Objects (POJOs)。关于这个实体的对象关系映射的元数据使用 Java 5 注释或 XML 描述符指定。实体用于将 Java 对象持久化保存在数据库中。

有几种 JPA 持久性提供者。IBM 的 JPA 解决方案基于 Apache OpenJPA 项目。随着这些 JPA 持久性提供者的发布,您现在可以对一个标准的 API 编码,而不必在不兼容的非标准持久性框架(如 Hibernate 或 JDO)之间抉择。

IBM solidDB 是一个内存数据库,它的速度最高可达常规数据库的 10 倍。solidDB 不仅具有高速度,还具有高可用性和故障转移特性,这使它成为许多性能关键型应用程序的数据管理组件的自然选择。

solidDB 可以部署为一个独立的内存数据库,供应用程序直接使用。它也可以部署为一个缓存,用于加速 IBM DB2®、Oracle 和 SQL Server 等传统数据库。solidDB 支持标准 Java Database Connectivity (JDBC) 2.0 规范。solidDB JDBC Driver 是一个类型 4 驱动程序(即它是 JDBC 2.0 标准的一个 100% 的 Java™ 实现),可用于支持 JDK 1.4.2 或更高版本的所有 Java 环境。由于 solidDB 支持 JDBC,您也可以通过 solidDB 使用 JPA。这就意味着编写需要良好性能的应用程序的 Java 程序员可以通过 solidDB 使用 JDBC、JPA 或者同时使用两者。

其他文章 已经介绍了如何通过 solidDB 使用 JDBC,如何将 solidDB 用作传统数据库的一个缓存(参见 “参考资料”)。本文将介绍如何通过 solidDB 将 OpenJPA 用作一个独立的内存数据库。首先,您将定义一个示例应用程序(包含在本文中),用于展示如何通过 solidDB 使用 OpenJPA。这个示例应用程序作为一个 Java EE 应用程序实现,在 IBM WebSphere Application Server 7.0 上运行。(这个应用程序也可以作为一个 Java SE 应用程序实现(没有无状态会话 bean),在独立的 OpenJPA 持久性提供者之上运行。)定义这个应用程序之后,本文将指导您逐步安装和配置一些基本组件,这些组件是您使用 OpenJPA 和 solidDB 在 WebSphere Application Server 上构建一个性能关键型应用程序所需的组件。最后,您将看到针对 JPA 规范编写的 Java 应用程序如何通过 OpenJPA 连接到 solidDB。





回页首


示例应用程序

尽管这个示例应用程序利用来自 Computer Telephony Integration (CTI) 和 Automated Call Distribution (ACD) 技术的概念,但是您不需要完全了解这些技术就能领会这个示例展示的 OpenJPA 和 solidDB 的集成。这个示例介绍的基本原理广泛应用于任何 Web 应用程序。关于 CTI 和 ACD 的其他信息可以在 参考资料 中找到。

许多 Java 应用程序都可以受益于内存数据库的使用,比如 solidDB。例如,一些电子商务网站整合来自几个后端应用程序的信息,一些财务服务公司对贸易商提供实时警告,一些通信运营商监视移动电话使用和呼叫方案以进行计费。

对于本文的目的来说,您在这里使用的示例应用程序是一个计算机电话集成(CTI)应用程序。假设这个 CTI 应用程序通过将呼叫者路由到最有资格处理每种呼叫类型的代理处来处理所有接入呼叫。这个应用程序建立一个与代理的电话的连接并在代理的工作站上填充呼叫者的帐户数据(如帐户编号、姓名等)。这些交互包含在图 1 展示的示例应用程序的主要设计元素之中。


图 1. CTI 设计模型
图 1. CTI 设计模型

在这个应用程序中:

  1. Message Façade 从 PBX/ACD(专用交换机/自动呼叫分配器)接收异步消息。它从消息有效载荷中创建 Value Object 并异步将消息分发到 Session Façade 来满足请求。消息驱动 bean(MDB)实现 Message Facade。
  2. Session Façade 提供从数据库创建、检索、更新和删除 Value Object 的操作。例如,它拥有 createCaller、updateAgent 和 deleteCaller 等操作。它使用 Data Access Object 存储来自 solidDB 的 Value Objects。Stateless Session Beans(无状态会话 Bean,SLSB)实现 Session Façade。
  3. Value Object 持有代理和呼叫者的属性值。它作为一个 POJO 实现,带有获取和设置属性值的方法。它还提供一个从 XML 字符串创建 Value Object 的方法(valueOf)和一个将 Value Object 转换为 XML 字符串的方法(toString)。这些 POJO 通过 Message Façade 创建,作为参数传递给 Session Façade 和 Data Access Object。
  4. Data Access Object 封装了对用于在数据库中存储 Value Objects (POJOs) 的持久性技术(JDBC、JPA 等)的所有访问。在这个应用程序中,JPA APIs 用于将 Value Objects 持久化到 solidDB 中。

要将接入的呼叫者智能地路由到最好的可用代理,关键是能够使 CTI 应用程序中呼叫者状态和代理状态的副本与 PBX 一致。为此,CTI 应用程序通过 JMS 消息收到来自 PBX/ACD 的状态更改,并且 CTI 应用程序使用 solidDB 将代理状态和呼叫者状态缓存到内存中。





回页首


建立开发环境

本文附带的压缩文档 包含一个 Project Interchange 文件,它包含这个示例的所有的源。下面的说明简要介绍如何导入和利用这个 Project Interchange 文件。

  1. 启动 IBM Rational® Application Developer V7.5。您可以使用 Rational Application Developer 的一个许可版本,获取和安装一个 试用版,您也可以使用 WebSphere Application Server V7.0 中捆绑的 Rational Application Developer 版本。
  2. 导航到 Project => Build Automatically,取消自动构建选项。
  3. 从菜单栏导航到 File => Import => Other => Project Interchange,然后单击 Next 按钮。将显示 Import Projects(如图 2 所示)。
  4. 浏览到项目交换文件,选择所有列出的项目,然后单击 Finish 按钮。

    图 2. 导入项目
    图 2. 导入项目

  5. 通过选择 Window => Preferences => Java 设置 Rational Application Developer 中的 WAS_HOME 类路径变量。添加一个名为 WAS_HOME 的新类路径变量,该变量包含您的 WAS_Home 目录名值(如图 3 所示),比如 d:\IBM\SDP75\runtimes\base_v7

    图 3. 类路径变量
    图 3. 类路径变量

  6. 通过选择 Window => Preferences => Run/Debug => String Substitution 设置 Rational Application Developer 中的 WAS_HOME 字符串替代。添加一个名为 WAS_HOME 新的字符串替代变量,它的值仍然指向您的 WAS_HOME 目录(如图 4 所示)。

    图 4. 字符串替代
    图 4. 字符串替代

  7. 在 build.properties 文件中设置 was.home 值。展开 CTIServices 项目,双击 build.properties 文件,并将 was.home 属性设置为您的 AS_HOME 目录(如图 5 所示)。

    图 5. 构建属性
    图 5. 构建属性

  8. 现在您已经准备好在您的 Rational Application Developer 工作空间中构建所有项目了。选择 Project => Clean...,确保选中 Clean all projectsStart a build immediately。构建完成后,您应该只看见警告(如图 6 所示)。如果您看见任何错误,修正错误之后再继续。

    图 6. 构建项目
    图 6. 构建项目





回页首


建立 solidDB 独立数据库

  1. 根据下载说明获取并安装 solidDB 的二进制发行版。在本文写作时,当前版本是 6.3 版。安装后,服务器文件将解压到一个文件夹(比如 d:\IBM\SolidDB)。
  2. 创建 solidDB 数据库。打开一个命令窗口并从 solidDB 安装目录运行以下命令:

    .\bin\solid -c eval_kit\standalone

    根据提示输入系统目录名称、用户名和密码;对于这个示例,所有值都可以使用 “dba”。
  3. 使用本文包含的下载文件中提供的脚本创建一些表格。打开一个 shell 并运行以下命令:

    .\bin\solsql "tcp localhost 1315" dba dba <WS>\CTIEntities\dml\createTablesSolid.ddl

    <WS> 是 Rational Application Developer 工作空间地址,例如 d:\workspaces\usingjpawithsoliddb。
  4. 通过从 solidDB 安装目录运行以下命令使用示例数据填充这些表格:

    .\bin\solsql "tcp localhost 1315" dba dba <WS>\CTIEntities/dml/createDataSolid.sql

    <WS> 仍然是 Rational Application Developer 工作空间地址。




回页首


建立 WebSphere Application Server 测试环境

  1. 启动 Rational Application Developer,如果它没有启动的话。
  2. 通过选择 Window => Show View => Servers 打开服务器视图。打开 Server 选项卡,在服务器面板中右键单击,选择 New => Server。选择 WebSphere Application Server V7.0 并单击 Finish 按钮。服务器已经被添加到 Rational Application Developer。
  3. 确保服务器启动没有错误。为此,右键单击该服务器,选择 Start。如果有错误,修复错误之后再继续。
  4. 本文包含的测试程序是一个独立的 Java 应用程序,它访问运行在 WebSphere Application Server 上的 CTI 服务(SLSBs)。要访问那些 SLSBs,测试程序必须指定 JNDI 命名服务的特定于实现的位置(端口号)。要发现那个地址,通过选择 Administration => Run administrative console => Application servers => server1 => Ports 打开管理控制台,记录下 Bootstrap Address 的端口号。
  5. 这个示例应用程序的源代码包含一个 jndi.properties 文件。在这个属性文件中指定您在步骤 4 中发现的端口号,以便测试程序能够发现这个 JNDI 命名服务(如图 7 所示)。为此,展开 CTIServices => ejbModule,打开这个 jndi.properties 文件,将 “2815” 更改为您的 Bootstrap Address(如果实际值与这个值不同的话)。

    图 7. JNDI 命名服务
    图 7. JNDI 命名服务





回页首


运行示例应用程序

  1. 在服务器视图中,右键单击 WebSphere Application Server V7.0 并选择 Add and Remove Projects。这将打开 Add and Remove Projects 面板。
  2. 从 Available 项目面板选择 CTIApplication,选择 Add 以将它移动到 Configured 项目面板,单击 Finish 按钮。
  3. 监视控制台,您将看到如下内容:
    WSVR0037I: Starting EJB jar: CTIServices.jar
    CNTR0167I: The server is binding ... 
    WSVR0057I: EJB jar started: CTIServices.jar
    WSVR0221I: Application started: CTIApplication

  4. 当您看到 “Application started” 提示后,就可以运行示例应用程序了。从 Package Explorer 面板选择 StateManagerTest.java 文件,该文件包含您要测试的主要例程。为此,展开 CTIServices => ejbModule => com.ibm.issw.service.statemanager,右键单击 StateManagerTest.java 文件,选择 Run As => Run Configurations。这将打开 Run Configurations 面板。
  5. 在 Run Configurations 面板内,右键单击 JUnit 并选择 New。在 Test 选项卡中,输入 Name、Project 和 Test 类(如图 8 所示)。(这些值可能已经自动填充好了。)

    图 8. 创建 JUnit 测试
    图 8. 创建 JUnit 测试

  6. 选择 Classpath 选项卡并确保类路径已经像图 9 显示的那样被设置好。您需要添加客户机存根 JAR 文件,这样这个独立的客户机才能调用远程 EJB。为此,单击 User Entries,单击 Add JARs... 按钮,然后选择 CTIServices_withStubs.jar 文件。

    图 9. 设置类路径
    图 9. 设置类路径

  7. 完成这个配置之后,单击 Run。如果成功,您将看到三个测试用例在 JUnit 视图中成功运行(如图 10 所示)。

    图 10. 测试结果
    图 10. 测试结果





回页首


持久性参数

最后,让我们看看 persistence.xml 文件中的配置参数的一些细节,该文件是结合使用 solidDB 和 OpenJPA 所必需的。persistence.xml 文件必须放置在类路径上的 META-INF 文件夹中(您可以在 下载文件 中发现该文件的一个副本)。这个文件定义数据库连接、映射位置、登录级别等。通过 solidDB 使用 OpenJPA 需要以下配置参数:

  • openjpa.ConnectionDriverName
  • openjpa.ConnectionURL
  • openjpa.ConnectionUserName
  • openjpa.ConnectionPassword

另外,openjpa.jdbc.DBDictionary 是建立一个数据库连接的另一个重要参数。这个属性使持久性提供者不必处理特定于供应商的 SQL 差异。这个参数是可选的,因为 OpenJPA 通常可以通过 URL 和 DriverName 参数确定要使用的特定于供应商的词典(参见下面的清单)。

<persistence ...>
   <persistence-unit name="CTIPU">
      <properties>
         <property 
            name="openjpa.ConnectionDriverName"
            value="solid.jdbc.SolidDriver">
         </property>
         <property 
            name="openjpa.ConnectionURL"   
            value="jdbc:solid://localhost:2315/dba/dba">
         </property>
         <property 
            name="openjpa.ConnectionUserName" 
            value="dba">
         </property>
	   <property 
            name="openjpa.ConnectionPassword" 
            value="dba">
         </property> 
      </properties>
   </persistence-unit>
</persistence>

但是,因为 solidDB 不是通过一个特定于供应商的词典支持的,且 OpenJPA 不能确定供应商,所以恢复为对 solidDB 使用一个通用的 JDBC 词典。尽管这将导致有限的功能,但是我们在测试这个 CTI 示例应用程序时没有遇到任何问题。





回页首


结束语

本文向您展示了如何安装和配置在 WebSphere Application Server V7.0 上通过 solidDB 6.3 使用 OpenJPA 所需要的组件。本文还通过在 WebSphere Application Server 上设计、部署和运行一个示例 Java 应用程序,向您展示了如何利用 solidDB 内存数据库的性能优势。

总之,对 IBM solidDB 的正式支持已经被作为 OpenJPA 的一个需求。我们强烈鼓励向 OpenJPA 项目贡献一个真正的、独立的 solidDB 词典。同时,本文将帮助您立即在 WebSphere Application 上通过 solidDB 使用 JPA。






回页首


下载

描述名字大小下载方法
代码示例usingjpawithsoliddb.zip3.5 MBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术


作者简介

Kevin Sutter 是 WebSphere Application Server 开发团队的高级软件工程师。他目前是 WebSphere Application Server 的 Java Persistence API 解决方案的首席架构师。Kevin 还是 Apache OpenJPA 项目的 PMC 的提交人和成员。Kevin 曾领导并参与了面向 J2EE Connector Architecture (JCA) 和 WebSphere eXtremeScale(缓存框架)的 WebSphere 解决方案的设计工作。


Donald Vines 是 IBM 的一名执行 IT 架构师,他负责北美范围的 WebSphere 迁移实践。他目前从事的工作是为 IBM 主要客户创建解决方案体系结构,并在开发 SOA 和企业现代化项目过程中指导设计师和软件开发人员。他曾是对象管理组织 (Object Management Group, OMG) 的一位技术代表,在该组织中和其他人一同创立在 Internet 中广泛使用的 Internet Inter-ORB Protocol (IIOP)。Don 还是 Sun 认证的企业架构师、Sun 认证的 Java 程序员和 OMG 认证的 UML2 专业人员。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款