图1 JBI插件系统
图1展示了抽象层次的JBI插接组件概念,JBI为插接组件提供了特定的交互接口,插接组件也为JBI环境提供了特定的交互接口,组件与组件之间并不直接进行交互,相反的,如图2所示,JBI成为组件与组件之间交互的媒介。参与数据交换的组件间的分离对于解耦服务提供者和服务消费者是至关重要的,这也是通用的SOA架构,特别是应用集成解决方案所期望的。这种方式因消费者和提供者之间最小程度的纠缠从而保持了最大程度的灵活性,同时为JBI实现中的消息处理和监控提供了一种关键。同时也应该注意到的是,因为这种处理模式中固有的异步特征使得提供者和消费者之间从不共享一个线程,从而有助于保持组件间的松耦合。
图2 消息序列图
在这种基于WSDL的面向服务的架构模型中,JBI插接组件负责提供和消费服务。通过提供服务,一个组件为其他组件甚至是他自己提供了一种或多种处理功能(function),这些功能在WSDL2.0模型中定义为操作(operation),参与一种或多种消息的交换。WSDL规范中定义的四种基本的消息交换模型(Message Exchange Patterns,简称MEPs)清楚地定义了上述操作运行过程中消息的交换顺序。JBI组件间的交互遵循这四种消息交换模型。
JBI组件提供的任何服务,都由组件使用WSDL1.1或2.0规范进行描述,WSDL为基于XML的消息交换提供了一重抽象的,独立于特定技术的模型。WSDL也为服务消费者和JBI环境本身提供了一种声明额外的服务元数据的机制,组件可以通过JBI环境查询可用的WSDL描述的服务。
承载JBI插接组件的JBI环境称为“JBI框架”。插接在JBI框架中的这些组件能够为终端用户在应用系统集成过程中面临的问题提供通用的或标准的解决方案。这些组件可以分为两种不同的类型:
-
服务引擎( Service Engine [SE] )
服务引擎既为其他组件提供了业务逻辑和数据转换服务,同时也消费此类服务。服务引擎可以集成基于Java的应用(和其他资源)或提供了Java API接口的应用。
-
绑定组件( Binding Component [BC] )
绑定组件为JBI环境以外的服务提供了连通性,这些外部的服务既可能是某种协议的通信服务也可能是企业信息系统提供的服务(EIS资源)。绑定组件可以集成Java环境不能提供的远程访问技术的应用实现或资源。
服务引擎和绑定组件可以是服务提供者,服务消费者甚至两者兼具。服务引擎和绑定组件根据架构设计原则定义,但两者之间的差别完全是根据实际应用来决定的。业务处理逻辑和通信逻辑的分离降低了实现的复杂度并提高了适应性。
JBI除了为消息系统提升了组件互用性,同时也定义了一个基于JMX的管理框架。JBI为以下功能提供了标准的管理机制:
-
组件的安装
-
组件生命周期的管理(启动 / 停止等)
-
组件服务描述信息( Service Artifacts )的部署
还要提到的一点是,JBI组件也可以认为是一种功能操作的容器,通过部署不同的服务描述信息提供新的服务消费者或者服务提供者逻辑。例如,一个提供基于XSLT转换服务的服务引擎可以部署不同的XSLT样式表描述信息,从而提供不同的转换功能操作。这种为特定组件提供操作功能服务描述信息的过程称之为“部署”(Deployment),用于区分组件的安装。JBI将一组描述信息及其关联信息的部署的集合术语化为服务集合(Service Assembly)。这些服务描述信息及其关联数据集在一些文献中称之为合成服务描述符(Composite Service Description [CSD])。
JBI定义的不是一个传统的应用程序模型,相反地, JBI通过将插接组件抽象为服务提供者和服务消费者而与面向服务的架构紧密结合来构建企业应用。该规范中定义的APIs和SPIs供开发人员开发插接到JBI环境中的服务引擎和绑定组件使用。
服务引擎(SE)是指提供业务逻辑处理,数据转换服务等的插接组件。
服务引擎根据其提供的功能类型,其外延是广泛的。特别的,一些SE可以作为处理容器,为用户提供特定的开发模型,例如:
-
一个 XSLT XML 转换引擎可以支持多种转换形式,用户面对的开发接口就仅限于 XSLT 语言本身;
-
对于一个 WS-BPEL 2.0 业务处理执行引擎,应用开发接口就仅限于 WS-BPEL ;
-
对于一个 EJB 容器,用户面对的就是 EJB 规范。
绑定组件通过提供通信协议处理功能,使得JBI组件可以访问JBI环境以外的外部系统提供的远程服务,同时外部远程服务消费者可以访问JBI环境内部提供的服务。通信协议可以根据系统集成需求的不同而不同,典型的例子包括:
-
基于 HTTP 的 SOAP[http://www.ws-i.org/Profiles/BasicProfile-1.1.html] ;
-
JMS/MOM[http://jcp.org/aboutJava/communityprocess/final/jsr914/index.html]
- AS1/AS2 EDI [http://www.ietf.org/html.charters/ediint-charter.html]