样例应用程序
对于 JCA 组件如何在一个企业系统中协同工作来创建和管理复杂交互,您现在应当有了一个相当全面的了解。余下要做的就是使用代码本身。您将在 helloworldra.ear
文件中找到一个使用样例资源适配器的样例程序。它是一个 J2EE Web 应用程序,它具有一个 HTML 输入表单(仅有一个 Submit 按钮)、一个 servlet 控制器、一个调用资源适配器的 JavaBean 组件以及用于显示调用结果的 JavaServer Pages (JSP) 组件。
作为本教程的结束,我们来深入看一下调用资源适配器的 bean 以及用来将 InteractionSpec
实例部署到 JNDI 中的另外一个类(在 .ear 文件中单独提供)。
HelloWorldBean
类通过其 execute()
方法调用资源适配器和使用 CCI 接口。首先,从 JNDI 获得ConnectionFactory
,并用于创建一个 RecordFactory
。RecordFactory
用于创建一个输入记录和一个输出记录。
其次,从 JNDI 获得一个 InteractionSpec
。然后从 ConnectionFactory
创建一个 Connection
并从Connection
创建一个 Interaction
。Interaction
用于执行该函数,结果存储于 bean 的 Message
属性之中。
您将发现两种 JNDI 查找是不同。使用 java:comp/env
上下文来完成 ConnectionFactory
的查找,而InteractionSpec
则不然。这是因为用于开发和测试资配适配器以及样例应用程序的环境中并没有一个配置工具将一个 InteractionSpec
绑定到 JNDI 中。它仅仅提供了 ConnectionFactory
的绑定,这样,随后就能在 Web 应用程序中使用资源引用来访问。
... public void execute() throws NamingException, ResourceException { InitialContext context = new InitialContext(); ConnectionFactory cxFactory = (ConnectionFactory) context.lookup("java:comp/env/HelloWorld"); RecordFactory recordFactory = cxFactory.getRecordFactory(); IndexedRecord input = recordFactory.createIndexedRecord(HelloWorldIndexedRecord.INPUT); IndexedRecord output = recordFactory.createIndexedRecord(HelloWorldIndexedRecord.OUTPUT); InteractionSpec ispec = (InteractionSpec) context.lookup("jca/HelloWorldISpec"); Connection connection = cxFactory.getConnection(); Interaction interaction = connection.createInteraction(); interaction.execute(ispec, input, output); message = (String) output.get(HelloWorldIndexedRecord.MESSAGE_FIELD); interaction.close(); connection.close(); } ... Willy Farrell 是 IBM Developer Relations Technical Consulting(又名 DragonSlayers)的一名电子商务架构师,该公司为 IBM 商业伙伴提供教育、实现和咨询。他从 1981 起就以从事计算机编程为生,从 1996 开始使用 Java,并于 1998 年加入 IBM。Willy 持有下列技术证书,其中包括:Java 2 Programmer、WebSphere Application Server Enterprise Developer、WebSphere Studio Application Developer Solution Developer、MQSeries Solutions Expert 和 IBM e-business Solution Technologist。 |
在 helloworldradeploy.jar
文件中提供的 DeployISpec
类用于将 InteractionSpec
对象部署到 JNDI,如果部署环境并未提供一个工具来完成的话。它具有一个简单的 main()
方法,用于创建 InteractionSpec
并将其绑定到 JNDI。此类应在部署好资源适配器且将连接工厂绑定到 JNDI 后运行。
... public static void main(String[] args) throws NamingException { Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); InitialContext context = new InitialContext(properties); HelloWorldInteractionSpecImpl ispec = new HelloWorldInteractionSpecImpl(); ispec.setFunctionName(HelloWorldInteractionSpec.SAY_HELLO_FUNCTION); context.bind("jca/HelloWorldISpec", ispec); } ... |
将资源适配器部署到应用服务器环境后,使用 JNDI 名称 jca/HelloWorld
创建一个连接工厂。然后运行DeployISpec
类将 InteractionSpec
绑定到 JNDI,名为 jca/HelloWorldISpec
。
在部署了 Web 应用程序后,您应当启动一个浏览器并加载 URL http://SERVER_NAME/hello
。一旦页面加载,点击提交按钮,应当显示出具有 “Hello World!” 消息的结果页面。
样例资源适配器和样例应用程序可在 IBM WebSphere 应用服务器高级版上成功部署和测试。
总结
本教程向您介绍了 J2EE 连接器架构。我们从一个较高的层面对 JCA 及其主要元素进行了介绍,这些主要元素包括:系统契约、客户机 API 以及资源适配器模块。随后,我们围绕工作于 JCA 之下的用于创建和管理到一个 EIS 连接的接口、类和方法进行了更为详细的探讨。作为本讨论的一部分,我们还考察了一个现实 JCA 实现的源代码。该实现的每个极为相关的组件都被提了出来,并对其各个函数进行了详细解释。本教程最后以一个实际的资源适配器实现作为结束,当然,您也可以在此基础上继续自由探索。
本教程循序渐进地介绍了 J2EE 连接器架构、该架构下最为相关的组件以及每个组件的功能。至此,对于构建自己的 JCA 资源适配器并连接到一个 EIS,您应当已经具备了一个相当好的基础了。
学习
- J2EE Connector Architecture specification 是关于 JCA 的权威性的信息源。
- Java Transaction API specification 和 Java Transaction Service specification 有助于理解如何实现 JCA 事务管理契约。
- Java 理论与实践 专栏作家 Brian Goetz 提供了一份关于 Java 事务服务(Java Transaction Service, JTS)的三部分介绍,开头的一部分是 “Java 理论与实践: 理解 JTS —— 事务简介”(developerWorks,2002 年 3 月)。
- 由于异常处理对于您所构建的任何组件来说都是一个重要部分,所以您也许需要查阅一下 Srikanth Shenoy 的 “EJB 异常处理的最佳做法”(developerWorks,2002 年 5 月)。
- Java Authentication and Authorization Specification 将有助于理解如何实现 JCA 安全性契约。
- developerWorks 关于 Java 安全性的两部分教程是对 JAAS 更具实践性的介绍。开头的部分是 “第 1 部分:密码学基础”(2002 年 7 月),接下来的部分是 “第 2 部分:认证与授权”(2002 年 7 月)。
- 如果您还没有读过 Go-ForIT Chronicles (developerWorks,2001 年 6 月),您应该读一下。每一期都是由 DragonSlayer 团队不同的成员所写(包括 Willy Farrell),并实时地涵盖了一些相当重要的主题,如极限编程、Enterprise JavaBeans、JavaServer Pages 技术等等。
- 您可以在 developerWorks Java 技术专区 找到上百篇关于 Java 编程各方面的文章。
- 也请参见 developerWorks Java 技术教程页面,获取一份免费教程的完整列表。
获得产品和技术
- 下载 helloworldra.zip,这是本教程的样例代码。
- 可以从 Sun Microsystems 下载最新版的 J2EE (包括 JCA)。