对于那些有多个企业信息系统的公司,把这些企业信息系统整合起来是实现最高效率是至关重要的。JCA(Java Connector Architecture) 提供了一个应用服务器和企业信息系统连接的标准Java解决方案,以及把这些系统整合起来实现最好的工作效率的方法。因为J2EE对企业级应用程序集成的支持已经非常小了(本质上,JMS和XML可以使用JAX应用程序编程接口支持它),Sun和它的Java Community Process伙计建议把J2EE Connector Architecture ( J2EE连接器体系结构,JCA)作为J2EE规范的1.3版的一部分。因为JCA提供了整合不同种类的企业信息系统的一套标准的体系结构,使用它的企业信息系统供应商就不再需要为每个应用服务器定制它们的产品。遵守这个规范的应用程序服务器供应商在它们想增加新的企业信息系统连接的时候将不需要添加自定义代码了。最好的事情就是,需要从J2EE应用程序中访问企业信息系统产品的用户不需要学习或者再学习不同的应用程序编程接口,因为JCA定义了一套公共的客户接口。
JCA内幕
JCA定义了一套标准的接口,用于让连接器把兼容的应用程序服务器无缝的整合起来。同时,另一套标准接口允许客户(或者应用程序服务器的应用程序主机)用一种统一的方法使用连接器。这样通过JCA连接器对于跨应用程序服务器来说就是可移植的,而客户程序也是很轻便的连接器。
遵守JCA规范的连接器被称作资源适配器(resource adapter)。每个资源适配器都被要求支持两套标准接口∶一组接口被应用程序服务器使用来与适配器交互作用,而另一套由客户/消费者使用与企业信息系统(当然也是通过适配器)相互作用。
JCA考虑到资源适配器可以把客户端程序作为专有接口的替代,但是这可能会在后续的版本改变。我强烈地建议你始终支持标准客户端。其实也并没有多少额外的工作要做,就像我在这个例子资源适配器中要演示的一样。但是,在我们深入研究这个例子之前,让我们先来看看系统-客户端接口。每个遵守JCA规范的资源适配器必须支持一套应用程序服务器用来管理适配器的标准接口。这套接口是在适配器和应用程序服务器之间的系统级协约,是由JCA委托的。
一台应用服务器可以有多个资源适配器,但是每个企业级信息系统类型只有一个适配器。举例来说,一台应用服务器可以为SAP,Oracle各自分配一个资源适配器。应用服务器和资源适配器关系紧密共同管理企业信息系统访问中的三个关键性方面∶连接,事务和安全。为此目的,JCA定义了一套标准接口,在javax.resource.spi和javax.resource.spi.security包中定义,是所有的资源适配器必须实现的。这些接口允许应用服务器与资源适配器相互作用并且控制连接,事务和安全管理的处理。
创建资源适配器首先要正确地实现系统协定,而且它也带来了许多好处,我们举例子来说明其中一个好处,使用一个有连接管理协定的资源适配器能使应用程序服务器连接到一个基本企业级信息系统。这使一个可缩放的应用程序环境可以支持很多的需要访问企业级信息系统的客户。
另一个好处可以通过实现事务管理协定来实现,这就是支持对企业级信息系统资源管理者的事务性访问。这个协定使一个应用程序服务器能够使用事项管理程序在多个资源管理程序之间管理事务。比如说,这将允许一个事务会话bean通过Java数据库连接(JDBC)和一个应用程序服务器控制的相同事务中的SAP系统访问一个关系数据库。事务协约也支持那些被一个企业级信息系统资源管理程序内部管理的事务,也就是本地事务,而不必涉及企业外部事务管理。
还有一个好处就是充分考虑访问企业级信息系统的安全性协定。这个协定提供了对安全的应用环境的支持,减少了威胁信息系统安全的可能,并且还能够保护信息系统管理的有商业价值的信息资源。
这些优点均可用于应用程序服务器的资源适配器,而不必再写任何自定义代码。这就大大刺激了企业信息系统的提供商为系统创建高级的资源适配器。
此外,JCA还定义了客户/消费者使用的另一套与企业信息系统交互的接口。JCA调用了公共客户接口( Common Client Interface,CCI)。CCI是一个应用程序开发者和客户程序可以共同连接和访问后端系统的程序接口。它是一个类似于JDBC的低端的API。CCI管理应用程序和系统之间的数据流动,而不会让我们看到任何的容器和应用程序服务器所做的事情。CCI是为了某些特别的目的设计的。首先,它能够跨越许多种类型的企业信息系统;其次,这个应用程序接口被设计的非常易用,而且是可扩展的。CCI可以更进一步的构建更具体的企业信息系统功能。
CCI被分成四部分(见表1)。所有的具体CCI类和接口都可以方便的在javax.resource.cci程序包中被找到。
接口类型 | 名称 |
与连接有关的接口,描述一个工厂类连接和一个应用程序类连接。 | javax.resource.cci.ConnectionFactory javax.resource.cci.Connection javax.resource.cci.ConnectionSpec javax.resource.cci.LocalTransaction |
与交互有关的接口,能使组件驱动一个与EIS实例的交互。 | javax.resource.cci.Interaction javax.resource.cci.InteractionSpec |
与数据表现有关的接口,用来描述与EIS实例交互中涉及到的数据结构。 | javax.resource.cci.RecordFactory javax.resource.cci.Record, javax.resource.cci.MappedRecord, javax.resource.cci.IndexedRecord javax.resource.cci.IndexedRecord javax.resource.cci.ResultSet java.sql.ResultSetMetaData |
与元数据有关的接口,提供了一个资源适配器与EIS连接的基本的元信息。 | javax.resource.cci.ConnectionMetaData javax.resource.cci.ResourceAdapterMetaData |