8.2. 使用 JCA 概述
JCA 通过添加 驱动程序与应用服务器之间的双向通信来规范数据库 驱动程序 的概念。该驱动程序成为由 javax. resource.spi.ResourceAdapter 代表的资源适配器。
有两个重要的接口:
-
javax.resource.spi.ManagedConnectionFactory由资源适配器实施。 -
javax.resource.spi.ConnectionManager由应用服务器实施。
ManagedConnectionFactory 接口提供两个目的:
Object createConnectionFactory(ConnectionManager cxManager)方法可用于为应用程序代码使用的给定 EIS(或数据库或数据库或消息代理)生成 连接工厂。返回的对象可以是:-
通用
javax.resource.cci.ConnectionFactory(此处未进一步介绍,请参阅 JCA 1.6,第 17 章: 通用客户端接口) -
EIS 特定连接工厂,如已知的
javax.sql.DataSource或javax.jms.ConnectionFactory。它是 pax-transx-jdbc 和捆绑包使用的 连接工厂 类型。pax-transx-jms
-
通用
-
javax.resource.spi.ManagedConnection ManagedConnectionFactory.createManagedConnection()方法供 应用服务器 使用,创建到 EIS/database/broker 的实际物理连接。
ConnectionManager 由 应用服务器 实施,供 资源适配器 使用。它是首次执行 QoS 操作(池、安全、事务管理)的应用服务器,最终将 资源适配器的 managedConnectionFactory 委派给创建 ManagedConnection 实例。流如下:
-
应用代码使用从
ManagedConnectionFactory.createConnectionFactory()返回的对象,由 应用服务器 创建并公开 连接工厂。它可能是通用 CCI 接口,如javax.sql.DataSource。 -
这个 连接工厂 不会自行创建 连接,而是委派至
ConnectionManager.allocateConnection()传递 资源适配器- 特定的ManagedConnectionFactory -
应用程序服务器 实施的
ConnectionManager创建支持 对象、管理事务、池等,并且最终从传递ManagedConnectionFactory获取 物理(托管)连接。 - 应用程序代码获取 连接,通常是由 应用服务器 创建的 wrapper/proxy,后者最终委派给 资源适配器 的特定 物理连接。
下面是一个图,其中 应用服务器 创建了非CCI 连接工厂 (特定于 EIS)。只需 - 对 EIS 的访问(这里:数据库)是使用 javax.sql.DataSource 接口完成的,驱动程序的任务是提供 物理连接,而 应用服务器 会将其嵌套在(通常)执行池/enlist/安全性的代理中。