技术开发 频道

J2EE连接器开发实践之: J2EE连接器的开发

  【IT168 技术文章】

         引言

  J2EE连接器(JCA)是一种企业级应用整合的技术。目前,在J2EE平台中,常使用的应用整合的技术有:

  Java消息服务(JMS);

  Web服务(Web Services);

  J2EE 连接器体系结构(JCA)。

  Java消息服务是一组在Java程序中使用企业级消息的API,它为整合J2EE应用和非J2EE应用程序提供了异步整合的方式,在这种方式里,所有的应用都和消息中间件(MOM)进行通信,这样就提供了与平台无关、语言无关的整合。Web服务是一种新兴发展起来的技术,它使用SOAP消息作为传输的载体,使用HTTP或者其它基于文本的协议作为数据传输的协议,Web服务可以是同步的整合,也可以进行异步的整合。同样,Web服务也是一种和平台无关、和开发语言无关的整合技术。

  J2EE连接器技术为连接J2EE应用服务器和已有的企业应用系统(ERP/CRM等)提供了解决方案。通过J2EE连接器,EIS(企业信息系统)厂商不需要再为每个应用服务器提供专门的支持接口,同样,应用服务器厂商在连接到新的EIS系统时也不需要再重新开发新的代码,JCA为整合企业资源提供了标准的解决方案。

  在JCA1.0规范中,它定义了应用服务器和资源适配器的系统级合同(连接池、事务管理和安全),为资源适配器的客户端定义了通用的客户端接口(Common Client Interface,CCI),同样也规范了JCA打包和部署等细节。但在JCA1.0规范中,只支持OutBound的调用,也就是说只能在J2EE应用中通过资源适配器向外调用企业资源层,而企业资源层不能通过适配器调用J2EE里的资源。在即将发布的JCA1.5规范中,这个问题得到了解决,也就是说,在J2EE的外部可以通过资源适配器直接调用部署在J2EE中的应用,如EJB。

  下面简单看一下JCA的体系结构,如图1所示。

  图1 JCA的体系结构

  下面解释一下上图中的一些概念。

  资源适配器(Resource Adapter):为了获得在应用服务器和EIS之间的系统标准可插入性,JCA定义了应用服务器和EIS之间的一系列合约(Contract),资源适配器实现了EIS端的系统级合约。

  系统级合同(System Contract):系统级合同定义了一组系统合同,可以让应用服务器和资源适配器连接起来以管理连接、事务和安全性。这样,应用组件的开发者就可以把精力集中与和业务逻辑相关的开发,而没有必要关心系统级的问题。

  客户通用接口(CCI):定义了J2EE组件连接到EIS系统的一组通用的API,这些API在具体的开发中进行实现。

  在连接器的开发中,主要任务就是开发资源适配器。如果需要,再开发出一套客户通用接口实现(CCI),这样,客户端就可以通过这些通用的接口来连接、使用EIS层的资源了。

  在使用连接池的情况下,应用程序组件和JCA以及EIS交互关系如图2所示。

  图2 应用程序组件和JCA以及EIS交互之间的交互关系

  我们简要看一下请求传递的顺序:

  应用程序组件发出获得连接的请求;

  连接工厂调用连接管理器的allocateConnection;

  连接管理器向连接池管理器发出获得连接的请求;

  连接池管理器试图从ManagedConnectionFactory进行连接匹配,如果没有匹配到连接,那么返回null;

  由于没有匹配到连接,连接池管理器调用ManagedConnectionFactory的createManagedConnection方法来创建连接;

  ManagedConnectionFactory接收到连接池管理器的请求后,创建一个ManagedConnection实例,同时ManagedConnection打开和EIS之间的物理连接,然后把这个ManagedConnection实例返回给连接池管理器;

  连接池管理器调用ManagedConnection实例的getConnection方法以获得一个Connection实例;

  ManagedConnection实例收到连接池管理器的getConnection请求后,创建一个Connection实例,然后把这个实例返回给连接池管理器;

  这个Connection实例通过连接池管理顺次返回给应用程序组件;

  应用程序组件通过返回的Connection来创建Interaction或者调用业务方法;

  应用程序组件通过Connection调用业务方法时,实际上Connection使用了ManagedConnection的物理连接和EIS进行交互。

  下面我们介绍一个简单的案例的开发。

  案例介绍

  这个案例使用了典型的J2EE多层体系结构,如图3所示。EIS层是一个简单的能处理多线程的Socket服务程序,当它接收到客户端发送来的字符串时,就在这个字符串前增加"Hello:"字符串,然后返回。资源适配器用于连接到EIS,使得J2EE应用(如EJB)能够通过它调用EIS层。这个案例的客户端有两种,一种是基于浏览器的客户端,它通过HTTP来访问Web服务器上的JSP组件,JSP组件通过RMI调用EJB来访问EIS;另一种客户端是普通的Java程序,它通过RMI来调用部署在EJB服务器中的EJB组件以访问EIS。

  图3 案例体系结构

  下面我们看简单资源层的代码。

0
相关文章