Welcome 微信登录

首页 / 软件开发 / JAVA / JCA简介:一个名不见经传却重要的JavaEE规范

JCA简介:一个名不见经传却重要的JavaEE规范2014-08-30 infoq 张建锋JCA(Java EE Connector Architecture)规范可以说是JavaEE规范集合里最“默默无闻”的,在JavaEE1.3规范发布时就加入了,比现在重要成员JPA, CDI等都早了很多。从应用开发角度来看,开发一个很普通的Web应用程序,只有几个页面,使用Servlet就可以完成,用JDBC API保存信息到数据库中,部署这个应用到JavaEE应用服务器中时,就会用到JCA技术。这个很简单的应用程序只用了庞大的JavaEE规范集30多项中的Servlet和JCA两项规范而已。那么,如此重要的规范,为何很少人知晓呢,本文就解释一些其中的原委。

JCA原意是Java企业版本连接器体系结构,这样一个生涩的词语不能很好的描述它的功能。简单来说,这个规范的作用就是定义如何连接JavaEE应用服务器和外部的信息系统,这类系统包括但不局限于数据库,消息中间件,分布式缓存系统,ERP/CRM为代表的企业软件系统,Tuxedo等事务/消息中间件等。我们知道JavaEE中的Enterprise是企业的含义,这套规范集的设计目标一开始就定义了是为企业应用软件而设计的。在一个企业领域的范畴内,可以运行着很多应用软件,如果一套软件是用JavaEE规范技术开发并部署运行在应用服务器中,并且它需要和其他应用系统进行信息交互, JCA就可以发挥强大的功能。

JCA产生于J2EE最为繁荣辉煌的1.3版本时代,JCA 1.0版本由JSR16提出,当时J2EE整个技术栈已经比较完备,一个需求产生了:如何把JDBC/JMS等连接管理统一起来?与此同时,BEA公司的Tuxedo产品也面临和J2EE进行集成的问题。JCA1.0版本定义了连接管理,以及在连接之上如何管理事务和安全,但只考虑了Outbound(出站)单向请求的需求。

接下来J2EE出现了群雄混战的局面,更多的产商对JCA规范产生了兴趣,包括众多的EAI集成软件厂商和ERP巨头如SAP等等,JCA1.5规范在2003年完成,这个版本就很完备了,加入了Inbound(入站)消息流向,定义了WorkManager等重要内容。直到今日,很多Resource Adapter也只支持1.5规范。

在版本5时J2EE重新命名为JavaEE,这个大版本主要聚焦在JPA和EJB3,JCA没有变动。JavaEE6版本发布时JCA升级到1.6,JSR编号是322,除了功能完善以外,主要是加入对Annotation的支持,从此可以选用XML或者Annotation描述JCA的相关实现类。

去年发布了JavaEE7,JCA作了微小的修改,升级到1.7,但还是沿用JSR322规范编号。所以我们现在看到的最新支持JavaEE7的应用服务器中的JCA规范是1.7版本。在最新的Wildfly(原JBossAS)应用服务器中,数据库连接池,JMS连接,接受消息MDB信息等配置信息,都是IronJacamar(JBoss开源组织JCA实现)可以识别并处理的配置选项。

让我们看一下标准的JCA体系结构图。

四个部分是应用服务器(Application Server),应用组件(Application Component), 资源适配器(Resource Adapter)和企业信息系统(Enterprise Information System)。

我们一般开发的应用是将War部署在WebServer中,分别对应于应用组件和应用服务器。企业信息系统是可以独立运行的应用系统,比如数据库,ERP等,资源适配器是为了和企业信息系统进行连接而设计的连接适配器软件,可以把JavaEE应用服务器和外部应用系统连接起来,并提供资源服务给应用组件来使用。

这里大家可能会产生疑问,一般应用可以通过JDBC或者JMS接口获得连接,为什么还要定义JCA规范接口呢。答案简单说就是为了统一接入层的API和被容器管理。应用服务器中的资源池容器(可以称为JCA容器)需要管理所有的外部信息系统连接,统一调度给应用程序使用。对于应用开发人员来说,使用这些资源就很简单,只需要通过JNDI就可以获取到可用资源,得到引用并进行调用,使用完毕后关闭,容器会进行回收,放回可用资源池中供后续使用。所有这样的资源都会被资源容器识别并管理,JCA的规范就定义了这样的接口。我们看到在JCA Javadoc中定义的很清楚,spi包里面的就是让资源适配器实现的接口集合。