JCA:J2EE Connector Architecture :J2EE连接器架构
EIS:Enterprise Information System:企业级信息系统
ERP:Enterprise Resource Planning:企业资源规划
SCM:Supply Chain Management:供应链关系系统
TPM:Transaction Process Monitor:交易处理监控器
CCI:Common Client Interface:标准的通用客户机接口
SPI:Service provider interfaces:连接器提供者接口
简介
开发基于 Web 的应用程序时,您很可能会需要将这些应用程序与至少在一个企业信息系统(EIS)中可用的资源和数据集成起来,如企业资源规划(ERP)系统、供应链管理(SCM)系统或一个交易处理监控器(TPM)。这种集成是电子商务策略的本质:我们利用并转换现有的基础设施,将其与 Web 和其他开放技术联合起来以支持新的业务过程,如企业间(B2B)交易。
在 J2EE 连接器架构到来之前,将 J2EE 应用程序和 EIS 集成起来很复杂,并且问题重重,因为尚不存在关于此类集成的标准。每个 EIS 供应商都为该问题提供了自己的解决方案。单个的 EIS 供应商通常不支持所有 J2EE 应用服务器。这些情况致使编写与企业信息系统集成到一起的真正可移植的应用程序十分困难;因为要集成每个应用服务器和 EIS 就需要进行定制。
下图展示了 J2EE 应用程序和 EIS 集成的复杂度。
J2EE 连接器架构(JCA)解决了将 J2EE 应用服务器连接到 EIS 的这个问题。通过遵循 JCA 标准,EIS 供应商确保其 EIS 能与任何基于 Java 的应用服务器轻易地集成起来。这样,应用服务器供应商也只需要确保其产品允许 JCA 连接性,而不用针对市场上的每个 EIS 定制其产品。每个允许 JCA 的应用服务器都能与任何兼容 JCA 的 EIS 相集成。
下图显示了 JCA 是如何简化将多个应用服务器连接到单个 EIS 上或将单个应用服务器连接到多个 EIS 上的。
JCA 由三个主要元素组成:
- 系统契约
- 客户机 API
- 资源适配器模块
这些元素中的每一个元素都在 JCA 中发挥着特定的作用。我们将从一个高层次的视角分别介绍每个元素,然后再在后续章节中继续进行更为复杂的探讨。
系统契约 定义应用服务器和 EIS 间的连接。系统契约中的 EIS 端是由一个资源适配器 实现的,它是一个特定于 EIS 的系统级软件驱动程序。应用服务器和资源适配器依赖系统契约进行协作,以提供对 EIS 的安全的、健壮的、可伸缩的访问。
三种系统契约的定义如下所示:
-
连接管理 契约实现到 EIS 的物理连接并为应用服务器提供一种机制来集中控制这些连接。
-
事务管理 契约支持在事务上下文中对 EIS 进行访问。事务可以由应用服务器进行管理,并提供与除 EIS 外的其他资源进行协作的事务;它们也可以是 EIS 资源管理器的内部事务,在这种情况下不需要事务管理器。
- 安全性 契约支持对 EIS 的安全访问。
系统契约在每一端(应用服务器和资源适配器)如何 实现并不由 JCA 指定;它们可以根据供应商的意愿实现。
JCA 的第二个元素是客户机 API。该 API 可以特定于资源适配器,也可以是由 JCA 定义的标准通用客户机接口(CCI)。CCI 是供应商用来提供集成工具和框架的,这就使得开发人员能够更加容易地访问企业系统。推荐采取(不是强制)资源适配器利用 CCI 的方式。
资源适配器模块包含向应用程序提供 EIS 连接的所有必要元素。资源适配器模块包含下列组件:
- 实现资源适配器的 Java 类和接口
- 资源适配器所需的任何实用 Java 类
- 任何特定于 EIS 且依赖于平台的本地库
- 部署描述符
应用服务器利用和资源适配器一起提供的部署描述符 来将其配置到特定的操作环境中。
资源适配器模块的所有文件都被打包到一个资源适配器档案(RAR)文件中(使用 Java 档案 JAR 文件格式)。所有的 Java 类和接口都被打包到一个 JAR 文件中,该文件随后由 RAR 文件所包含。本地文件也打包到该 RAR 文件中。部署描述符名为 ra.xml,位于该 RAR 文件的 META-INF 文件夹中。
参考资料:
http://www.ibm.com/developerworks/cn/education/java/j-jca/section1.html
http://livejuns.iteye.com/blog/796049
Spring JCA CCI
Chapter 21. JCA CCI
21.1. 简介
J2EE提供JCA(Java Connector Architecture)规范来标准化对EIS(Enterprise Information System)的访问。这个规范被分为几个不同的部分:
SPI(Service provider interfaces)是连接器提供者(connector provider)必须实现的接口。 这些接口组成了一个能被部署在J2EE应用服务器上的资源适配器(resource adapter)。 在这种情况下,由服务器来管理连接池(connection pooling)、事务和安全(托管模式(managed mode))。 应用服务器还负责管理客户端应用程序之外所拥有的配置。连接器(connector)同样能在脱离应用服务器的情况下使用;在这种情况下,应用程序必须直接对它进行配置(非托管模式(non-managed mode))。
CCI (Common Client Interface)是应用程序用来与连接器交互并与EIS通信的接口。同样还为本地事务划界提供了API。
Spring对CCI的支持,目的是为了提供以典型的Spring方式来访问CCI连接器的类,并有效地使用Spring的通用资源和事务管理工具。
Note
连接器的客户端不必总是使用CCI。 某些连接器暴露它们自己的API,只提供JCA资源适配器(resource adapter) 以使用J2EE容器的某些系统契约(system contracts)(连接池(connection pooling),全局事务(global transactions),安全(security))。 Spring并没有为这类连接器特有(connector-specific)的API提供特殊的支持。
21.2. 配置CCI
21.2.1. 连接器配置
使用JCA CCI的基础资源是 ConnectionFactory 接口。 所用的连接器必须提供这个接口的一个实现。
为了使用连接器,可以把它部署到你的应用服务器上,并从服务器的JNDI环境(托管模式)取回 ConnectionFactory。 连接器必须打包为一个RAR文件(resource adapte archive)并包含一个部署描述符文件 ra.xml 。 部署时需要指定资源的实际名字。如果想通过Spring访问它,只要简单地使用Spring的 JndiObjectFactoryBean 来通过JNDI名字获取工厂。
使用连接器的另一种方法是把它嵌入到应用程序中(非托管模式(non-managed mode)),而不用在应用服务器中部署并配置它。 Spring提供了通过已提供的 FactoryBean(LocalConnectionFactoryBean))来将连接器配置成一个bean的可能。 在这种方式中,只需要把连接器类库放到classpath目录下(不需要RAR文件和 ra.xml 描述符)。 如果有必要的话,必须从连接器的RAR文件解压得到那个类库。
一旦访问 ConnectionFactory 实例, 就可以将它注入到组件。这些组件既可以用简单的CCI API编码,也可以利用Spring支持CCI访问的类(比如,CciTemplate)。
Note
当在非托管模式(non-managed mode)下使用连接器时,将无法使用全局事务, 因为该资源从不会被加入或删除到当前线程的当前全局事务中。该资源根本不知道任何可能正在运行的全局的J2EE事务。
21.2.2. 在Spring中配置ConnectionFactory
为了创建到 EIS 的连接,如果处于托管模式(managed mode),你需要从应用服务器获取一个 ConnectionFactory , 或者当你在非托管模式(non-managed mode)时直接从Spring去获取。
在托管模式(managed mode)下,你可以从JNDI访问 ConnectionFactory, 它的属性将被配置在应用服务器中。
<bean />
</bean>
声明式或编程式的事务策略都能被用于任意的Spring事务划分功能。 这是Spring通用的 PlatformTransactionManager 抽象的结果,它解耦了实际运行策略中的事务划分。 你可以保持现在的事务划分,只需要在 JtaTransactionManager 和 CciLocalTransactionManager 之间转换即可。