君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

样例应用程序

J2EE Web 应用程序

对于 JCA 组件如何在一个企业系统中协同工作来创建和管理复杂交互,您现在应当有了一个相当全面的了解。余下要做的就是使用代码本身。您将在 helloworldra.ear 文件中找到一个使用样例资源适配器的样例程序。它是一个 J2EE Web 应用程序,它具有一个 HTML 输入表单(仅有一个 Submit 按钮)、一个 servlet 控制器、一个调用资源适配器的 JavaBean 组件以及用于显示调用结果的 JavaServer Pages (JSP) 组件。

作为本教程的结束,我们来深入看一下调用资源适配器的 bean 以及用来将 InteractionSpec 实例部署到 JNDI 中的另外一个类(在 .ear 文件中单独提供)。

HelloWorldBean 类

HelloWorldBean 类通过其 execute() 方法调用资源适配器和使用 CCI 接口。首先,从 JNDI 获得ConnectionFactory ,并用于创建一个 RecordFactoryRecordFactory 用于创建一个输入记录和一个输出记录。

其次,从 JNDI 获得一个 InteractionSpec。然后从 ConnectionFactory 创建一个 Connection 并从Connection 创建一个 InteractionInteraction 用于执行该函数,结果存储于 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

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。

 


DeployISpec 类

在 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,您应当已经具备了一个相当好的基础了。

参考资料

学习

获得产品和技术

posted on 2013-07-18 23:01  刺猬的温驯  阅读(271)  评论(0编辑  收藏  举报