JBI编程模型
Java Community Process利用应用服务器托管应用程序的成功,将它的JBI实现建立在服务容器概念之上。
就像Java业务集成(IEEE互联网计算)中定义的那样——“JBI是由容器和插件(Plug-in)组成的可插入式架构。这个容器托管使用消息路由进行通信的插件组件。架构上,组件通过一个抽象的服务模型(一个消息传递模型,位于任何特殊协议或消息编码之上的抽象层中)进行交互。"
在基于JBI的实现中,服务之间并不直接交互。取而代之的是,采用类似EAI实现中广泛应用的消息代理架构,JBI容器扮演在服务之间路由消息的通用中介,(见图1)。
图1 通过JBI协调消息交换 分离交换的参与者(JBI架构的基础
)在服务提供者和消费者之间提供了解耦,以及一个用于协调(mediating)服务通信量(或插入所有额外需要的功能)的明确位置。
此时,协调器(Mediation)可以支持广泛的功能,从消息传送和安全加强,到基于内容的路由和服务标本标定。
JBI容器托管了2类不同的插件组件:
组合元模型 这个元模型(见图3)定义了组件实例,以及它们是如何连接的。
图3 组件实例和它们在组合元模型中的连接 这个元模型中实例的概念有别于在OO中使用的实例概念。此处的组件实例是指一个带有被完整解析的属性集,为解决特殊问题而修改组件行为的组件实现。
一个组合定义了很多组件实例,它们彼此交互,这里的交互使用连线(wire)来定义。
在SCA中,连线使得绝大多数的底层代码被抽出(与Indigo中的信道类似)。如,连线可以被定义同步的或异步的,支持组件调用的事务行为等。SCA在幕后处理这些底层细节。连线同样可以在任意方向上连接2个不同的接口语言(如Java接口和WSDL 端口类型/接口),只要这2个接口定义的操作是等价的就行了。
除了连线,SCA也支持通过特殊的组件类型,如导入(imports)和导出(exports),进行模块间通信。连线、导入和导出组件的结合使得组件可以引用外部服务。
组合元模型定义的组件组合,与服务组合既类似又不同,尽管两者都定义了使组件/服务一起工作的方式。通过被组合本身引入的功能,服务组合增强了参与服务的功能;而这个元模型只定义组件(更接近于服务实现)间的连接。
SCA实现依赖于服务数据对象(Service Data Objects,SDO),它提供了表示数据的通用模型的技术。SDO是组件的数据交换基础。SDO架构中的基本概念是数据对象——包含基本类型数据和(或)其它数据对象的容器。元数据提供了被包含数据的信息,它被数据对象显式引用。在SDO中数据对象的组合由数据图表示。除了对象本身,图中还包含变更概要,用来记录图中数据对象和属性在处理过程中变化的信息(类似微软环境中的ADO)。除了SDO,SCA还引入了服务消息对象(Service message objects,SMO),它提供了服务间处理和交换消息的抽象层(类似JBI中的标准化消息)。
SCA目前尚显稚嫩(本文写作时版本为0.9),并且还不支持SOA实现要求的大多数?模式。作为替代,目前IBM的Websphere ESB/WPS 6.0的SCA实现引入了协调器框架,它基于SCA并为协调器实现和定位提供了定义良好的机制。(类似Indigo中的中介)。
如果GUI支持,SCA实现会非常强大,可以在面板上实现图形化组件的连接,这种方式正是IBM的WebSphere Integration developer(WID)中所实现的。