JCA Overview

   Java Connector Architecture (JCA) 作为 J2EE 规范里的一个(JSR 322), 不像其他规范如 Servlet, EJB3, Web Service 那么醒目, 但确是非常重要的一个。 它定义了一个标准规范, 使得 Application Server 轻松的与各种各样的 Enterprise Information System (EIS) 进行交互。

  我们首先看下 JCA 的一些概念:

  • Enterprise Information System (EIS)
    • 企业信息系统。 指 JCA 用来连接的另一端。 EIS 一般可为 ERP 系统, Database, Transaction Process(TP)系统。 基本就是指能让 client 通过 local 或者 remote 的接口调用暴露的服务的系统。
  • Application Component
    •  一般为 Web 程序, 如 Servlet, JSP, EJB 等。 它通过 JNDI 的方式获取 JCA 暴露出来的引用, 然后调用其业务方法。
  • Application Server
    • 指 J2EE application server。 它是 JCA 组件的运行时环境。 另外也包含 Application Componnet 运行时的容器, 如 Servlet 容器, EJB 容器。
  • Resource Adapter
    • JCA 的核心组件。 表现为一个 .rar 文件, 一般为 EIS 的提供商提供。 如果你的系统需要与别的系统做集成, 你有很可能就需要编写 Resource Adapater。 
    • 它部署在 Java EE  server 中, 与 Java EE server 运行在同一个 JVM 下。它按照一定的规范负责 EIS 和 Java EE server 的交互。

  那么什么是 Java Connector Architecture 呢? 它是集成 Java EE server 和 EIS 的一种标准架构,用来负责 Java EE server 和 EIS 的交互。 它的实现分两部分, 一部分是 EIS vendor 提供的 Resource Adapter 实现(表现为一个 .rar 文件),另一部分是 Java EE server 里的实现,使得其允许 Resource Adapter 的载入。 



 
  上面这副图描述了 JCA 的架构。 Application Component 通过 Container-Component Contract 部署并运行在 Application Server 里, 如 Servlet 运行在 Servlet 容器, EJB 运行在 EJB 容器等。 Application Component 通过 Client API 调用 Resource Adapter, Client API 可以是 JCA 的 common client api (CCI), 或者是自定义的接口。 Resource Adapter 负责和 EIS 的物理连接, 并且通过 System Contracts 部署和运行在 Application Server 里。 System Contracts 包含如 Connection Management Contract, Transaction Managedment Contract, Security Contract, Work Management 等, 部分在 Application Server 实现, 部分在 Resource Adapter 里实现。


   Java EE server 和 EIS 的交互有两种,一种叫 Outbound, 指由 application 通过 Java EE Server 发起的请求,通过 Resource Adapter 调用 EIS 服务; 另一种叫 Inbound, 指由 EIS 发出的请求, 通过 Resource Adapter 触发 Application 方法,通常为 Message Driven Bean。

  我们先看下 Outbound 的大体结构:

  


 

  Application 通过 JNDI 获取 ConnectionFactory 的引用, 然后创建 Connection, Connection 是 EIS 的 Connection Handler, 定义了 EIS specfic 方法。 ConnectionFactory 和 Connection 可以是 CCI 的接口,也可以是自定义的接口。如果是自定义的接口, ConnectionFactory 需要继承 java.io.Serializable 和 javax.resource.Referenceable 接口,以便注册进 JNDI。 ManagedConnectionFactory 用来创建 ManagedConnection, ManagedConnection 代表和 EIS 的物理连接,同时在连接关闭或者出现错误的时候通过 Connection Event Listener 通知 ConnectionManager 。 ConnectionManager 在 Application Server 里实现, 用来 allocate connection, 同时处理所有 ManagedConnection 的连接池,事务和安全。 ConnectionEventListener 使得 Connection Manager 知道每个 ManagedConnection 的状态。

再看下 Inbound 的大体结构:




  ActivationSpec 是一个 JavaBean, 包含相应 EIS 的配置信息。ResourceAdapter 提供 inbound 交互的激活点, ResourceAdapter.endpointActivation 方法在一个 MessageEndpoint 被激活时调用, MessageEndPoint 在 application server 端实现。典型实现是 Message driven bean(MDB), 一个 MDB 被部署的时候, 会调用到 ResourceAdapter.endpointActivation 方法。 MessageEndpointFactory 用来创建 MessageEndpoint。 Resource Adapter Specific 的代码用来处理和 EIS 的交互, 并且通过 MessageEndpointFactory 发送消息。

猜你喜欢

转载自aoingl.iteye.com/blog/1706379
JCA