一种将EJB接入企业服务总线的方法
技术领域
本发明涉及企业服务总线领域,主要是一种将EJB接入企业服务总线的方法。
背景技术
企业服务总线作为应用系统的连接中枢,是构筑SOA(Service Oriented Architecture,面向服务架构)为基础的企业信息系统的必要元素。企业服务总线的定义可以简单的理解为:由中间件技术实现并支持SOA的一组基础架构,支持异构环境中的服务、消息以及基于事件的交互,并且具有适当的服务级别和可管理性。通过企业服务总线实现应用系统的快速接入,并通过更高级的事件、流程处理能力,能够很好的将企业信息系统与实际业务协调起来,在保证原有投资的条件下,实现更加灵活和敏捷的企业信息系统改造。
JBI是针对ESB的一种规范及API,提供了规范化消息服务、组件框架和管理模型,用以部署路由引擎、规则引擎、以及信息转换等集成服务.也就是说JBI是关于ESB的一种具体描述,同时JBI也是一种基于SOA的EAI,它是一种面向服务的用来解决企业应用集成的方案.它的主要目的是为了不同异构的系统能够通过统一的消息规范和统一的消息总线来相互通讯.它之所以采用面向服务的体系结构,是因为这样可以降低异构系统的耦合度。其中规范化消息服务中的一些概念在下文提到,包括服务消费者和提供商,规范化消息。在下文中,调用EJB的组件作为服务消费者,而引擎则充当了服务提供者。终点(Endpoint)表示一种特殊的地址,能够通过某种特殊的协议访问,代表服务的地址。服务的提供者和消费者组件他们之间的交互是通过消息路由(NMR),提供商通过endpoint将服务激活,并提供有关服务定义的原数据。当出现服务请求时,NMR根据消费者所需服务的地址信息选择一种方式来确定一个服务提供商,并将消息转发给最终确定的对象。在服务调用完成后,NMR再将相应的消息返回给消费者。下面消费者组件调用EJB的Soap消息就是放到标准消息(NM)的内容中的。
另一方面,J2EE是第一个为业界所广为接受的完整的企业应用框架,而EJB在其中扮演重要角色,广泛的得到了业界的支持,已经成为应用服务器的标准技术.从企业应用多层结构的角度,EJB是商业逻辑层的构件技术,于JAVA BEANS不同,他提供了事务处理的能力,自从三层结构提出,中间层,也就是商业逻辑层,是处理事务的核心,由于从数据存储层分离,他就取代了存储进程的大部分地位。从分布式计算的角度,EJB像CORBA一样,提供了分布式技术的基础.提供了对象之间的通讯手段。在J2EE框架的支持下,运行在EJB容器中的EJB,完全符合企业应用关于分布、移植、安全和交易的要求。
通过企业服务总线实现应用系统的快速接入,使EJB接入企业服务总线变得迫切,而今的EJB的接入企业服务总线的方法一般是通过服务端将EJB部署为Web Service的相应客户端调用,例如应用服务器上是通过AXIS将EJB发布成Web Service的。Axis提供了对WebService的基本支持,主要包括对SOAP的支持,WSDL的解析,WSDL文件到java类的映射,SOAP信息到java方法的转换和映射,Web Service的部署和发布,用户自定义类的序列化和反序列化等等,这些对实现EJB Web Service提供了底层支持。Axis具有高度的可配置性和可扩展性,有利于应用服务器对它的集成。所有的Web Service都是使用同一个servlet接收信息。这个servlet根据URL中的参数确定调用的是哪一个Web Service,然后对调用做必要的检查和处理后交给Axis处理,再将由Axis包装好的返回消息发送给客户端。通常的访问EJB Web Service的方法是利用AXIS的客户端接口来构造SOAP消息,然后通过HTTP协议传输此消息到指定的端口。在AXIS服务端,有监听程序监听此端口,然后接收到SOAP请求,对此SOAP消息做相应处理生成消息内容,最后激活AXIS的处理框架,AXIS处理框架的任务是按照部署配置的Handler依次对消息内容进行处理,并最终调用到指定的EJB。因为ESB容器和应用服务器是在同一JVM下的,对于这种通过HTTP协议传输消息然后访问Web服务的方式效率并不高。因此,需要寻求一种快速,简便的方式,而这正是本发明所要解决的问题。
发明内容
本发明要解决上述技术所存在的缺陷,提供一种将EJB接入企业服务总线的方法,使jbi内部组件简单高效地调用部署成Web service的EJB。
本发明解决其技术问题所采用的技术方案:这种将EJB接入企业服务总线的方法,步骤如下:EJB Web Servcie模块通过集成Axis实现EJB对Web Service的支持,使用StatelessSession Bean作为Web Service的端点,而在ESB内部环境中,jbi endpoint是作为一个组件也就是服务的地址,通过消息路由到指定jbi端点就能访问相应的组件。那么如果在引擎内部建立jbi端点和EJB部署成Web Service的端点的一对一的联系,访问jbi端点的信息就可以映射到具体的部署的EJB Web Service了。同时,在引擎内部保持jbi端点信息和EJB Web Service的端点的同步,当有新的EJB Web Service部署成功后,则在ESB环境中为引擎激活相应的jbi端点,代表了这种服务的存在。当EJB Web Service被反部署后,则在ESB环境中为引擎反激活相应的jbi端点,代表注销了这种服务,从而保持了同步。
jbi环境内部通信的消息内容是Source形式,可以是xml格式的soap消息内容。消费者组件调用Web Service,以标准消息的形式(内容为soap消息),通过指定所要调用的WebService端点路由到j2ee引擎,因为引擎已做了隐式的对应。
j2ee引擎把根据访问消息直接构造axis的处理引擎ServerEngine能够处理的消息内容交由axis的处理引擎来处理,此处理引擎根据要调用的Web Service初始化相应的handler进行相应的EJB调用,并将调用结果以soap消息封装在消息内容的回复消息里,然后j2ee引擎把调用的结果返回给jbi消费者组件。至此为止,jbi内部组件成功地调用部署成WebService的EJB,在应用服务器端成功地避开了Svelte接收,从而绕开了http。
本发明有益的效果是:
1.jbi组件能够通过本引擎方便快速地调用部署在应用服务器上并发布成Web Service的EJB。
2.成功地绕开http协议,比传统的Web服务客户端的访问性能提高了三倍。
3.引擎能够进行服务的隐式的对应,并能够对服务进行方便高效的管理。
附图说明
图1为总的流程图;
图2为保持应用服务器上的EJB Web Service和J2EE引擎上的服务的同步示意图;
图3为消费者组件调用EJB,指定EJB Web Service的地址,路由soap消息到引擎的示意图;
图4为引擎构造axis引擎能处理的消息,调用后并将消息返回的示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步介绍:
子流程1:保持应用服务器上的EJB Web Service和J2EE引擎上的服务的同步
如图2所示,当j2EE引擎启动的时候,如果已有EJB发布成Web Service,那么在AxisService(AXIS的服务引擎)中保存着一张EJB Web Service列表,包含一个键值对,包含服务ID和EJB Web Service地址。在J2EE引擎启动初始化的过程中建立和JTang应用服务器的连接,启动同步的轮询线程,保持应用服务器上的EJB Web Service列表和J2EE引擎上的服务列表的同步,线程扫描一遍J2EE引擎上的服务列表,如果发现当前引擎的服务列表中的服务ID和EJB Web Service列表中的ID有不同,则进行相应的增减。即当有新的EJB部署并被AXIS发布成Web Service,则相应在引擎激活一个jbi端点(代表服务的地址),端点由两部分组成:引擎的QName和EJB Web Service的地址。同样,当EJB被反部署后,则在引擎上将相应的jbi端点钝化,以此达到同步。在这同步的过程中,建立引擎服务和EJB的隐式对应。
子流程2:消费者组件指定要调用EJB Web Service的地址,soap消息将被路由到引擎
如图3所示,当一个jbi消费者组件调用EJB,可以根据引擎的QName和EJB Web Service的地址从jbi环境中得到jbi端点(已被引擎激活),构造标准jbi消息(消息内容是soap消息),指定jbi端点路由消息。ESB提供的消息路由机制能够使消息路由到消息指定的jbi端点所对应的那个组件,在这里也就是J2EE引擎。当引擎接收到标准jbi消息后,获取soap消息,然后根据消息交换中的jbi端点获取EJB Web Service的地址,得到引擎处理器对象后构造MessageContext(消息内容),该消息内容为Axis引擎处理器能够处理的对象。MessageContext是一个包含三个重要部分的结构:请求消息、响应消息和一系列的属性。
调用Axis的途径有两种:
A、作为服务器端,TransportListener创建MessageContext并调用Axis ProcessingFramework。
B、作为客户端,应用程序代码(通常是通过客户端Axis模块半自动地)创建MessageContext并调用Axis Processing Framework。
无论是哪一种方式,Axis Processing Framework的工作都是简单地通过一系列预先配置的Handlers来传递结果MessageContext,MessageContext包含所有相关的请求和响应信息。在这里我们选择的是B的方式。
子流程3:引擎接到jbi消息后,构造axis引擎能够处理的消启内容,调用axis引擎提供的接口进行处理
如图4所示:J2EE引擎获取Axis引擎处理器对象,调用其中的invoke(MessageContext)方法,该处理框架根据MessageContext中的EJB Web Service的地址初始化相应的handler,各handler依次对MessageContext进行处理,并最终调到相应的EJB Web Service,并将调用的结果作为MessageContext的回复内容。J2EE引擎根据回复内容重新封装成jbi标准消息路由给消费者组件,这样就标志着一次成功调用的结束。
上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。