—SOAP绑定组件
o 通过ActiveSOAP提供基于StAX(XML流处理API)的对SOAP栈的支持
o对基于JAXP的Web服务客户端调用、 服务宿主提供支持,并且支持多种协议方式
o 使用反射支持POJO对象的部署。
o 支持Java SOAP附件API和Apache Axis
o 通过XFire SOAP栈集成POJO对象支持
o 集成Apache WSIF (Web Service Invocation Framework,Web服务调用框架)
—传输绑定
o 通过JavaMail支持Email功能
o 基于文件操作的组件提供将消息写进文件、目录轮询、向JBI发送文件
o 通过Jakarta Commons Net库提供FTP支持
o 支持客户端/服务器端HTTP处理
o 通过 XMPP (Extensible Messaging and Presence protocol,可扩展的消息提供协议)提供与
Jabber网络的连接
o 使用ActiveMQ支持JMS功能
o 使用Rome库支持RSS的访问及处理
o 使用Jakarta Commons Net库支持VFS(virtual filesystem switch,虚拟文件系统转换),提供对于文件系统、jar/zip/bzip2临时文件、万维网分布验证及版本机制、Samba文件系统、HTTP、HTTPS、FTP、SFTP等的访问。
大部分的ServiceMix系统初始化过程、活动过程以及消息交换过程,涉及到基于JBI的组件间的通信或交互。 以下部分通过简单的消息交换场景说明这些过程. (ServiceMix 2.0)
初始化JBI容器
使用JBI容器之前,必须调用其init()方法执行初始化过程。此方法会实例化核心系统服务,为JMX管理BEAN服务器以及事务管理器等资源赋值。
代码1是容器启动代码.
代码1. JBI容器初始化
protected JBIContainer jbiContainer = new JBIContainer();
jbiContainer.init();
JBIContainer类的init方法会依次进行如下操作:
—初始化org.servicemix.jbi.management.ManagementContext对象,并在JMX MBean服务器中注册。此对象是JBI管理工具如JMX管理器的调用的首要访问点。
—初始化org.servicemix.jbi.container.EnvironmentContext实例并在JMX MBean服务器中注册。此对象创建资源目录结构,各种资源包括安装文件、部署文件、组件、共享库、服务组合的文件等
—初始化org.servicemix.jbi.framework.Registry实例,此对象维护服务端点和组件等信息。
—初始化org.servicemix.jbi.nmr.Broker实例,此对象管理消息队列,并在org.servicemix.jbi.nmr.flow.Flow对象帮助下分发消息。消息流程对象管理消息代理对象的消息分发策略。
—初始化实现org.servicemix.jbi.framework.FrameworkInstallationService的实例,此对象管理文件包的安装和卸载。
—初始化org.servicemix.jbi.framework.DeploymentService实例,此对象部署服务单元及其相关服务单元。
启动JBI容器
如下面代码2所示,简单的调用JBIContainer对象的start()方法即可触发JBI容器的启动过程。此过程会启动所有嵌入的组件和服务,比如服务注册区、消息代理、管理上下文、环境上下文、安装服务、部署服务等。多数组件和服务的启动过程仅仅设置一个标志位,以表明组件或服务处于运行状态,而且与组件关联的定时计划任务开始执行。
代码2.启动JBI容器
jbiContainer.start();
创建支持组件
ServiceMix框架中作为消息生产者和提供者的对象常被称为支持组件。这些对象实现了javax.jbi.component.Component接口,使得JBI容器和其它关联对象能够以标准方式操作它们。在ServiceMix系统中,此类对象一般继承于org.servicemix.components.util包内的某些支持(Support)类,比如ComponentSupport或者PojoSupport。 通过继承,支持组件获得了作为JBI组件的缺省行为,比如JMX功能等。
支持组件一般通过javax.jbi.component.ComponentContext对象获得DeliveryChannel对象,以用于实际的消息交换(message exchange)对象的创建和处理。
请留意代码3中支持组件的类/接口层次。
代码3 支持组件类层次
//PojoSupport类封装了简单的基于POJO的组件,提供标准的被ServiceMix管//理的组件的功能
public abstract class PojoSupport
extends org.servicemix.jbi.management.BaseLifeCycle
implements javax.jbi.component.ComponentLifeCycle
{
…
}
//ComponentSupport类扩展了PojoSupport类,提供标准JBI组件功能。
public abstract class ComponentSupport
extends org.servicemix.components.util.PojoSupport
implements javax.jbi.component.Component
{
…
}
// SenderComponent类是消息生产者
public class SenderComponent
extends org.servicemix.components.util.ComponentSupport
implements Sender
{
…
}
// 类ReceiverComponent是消息消费者
public class ReceiverComponent
extends org.servicemix.components.util.ComponentSupport
implements org.servicemix.MessageExchangeListener, Receiver
{
…
}
激活支持组件
在使用ServiceMix ESB系统中的组件前,这些组件必须得到“激活”。相应步骤如下:
—创建DeliveryChannel类的实例, 此对象参与随后的消息交换
DeliveryChannel负责:
o 获取路由到此组件的消息
o 发送异步消息
o 发送同步消息
—注册org.servicemix.jbi.framework.ComponentRegistry类的组件,注册后获得一个org.servicemix.jbi.framework.ComponentConnector类的实例,Servicemix 系统在内部使用此ComponentConnector对象来交换消息。
—在组件注册区内注册上面步骤获得的ComponentConnector对象,将此对象与org.servicemix.jbi.container.EnvironmentContext关联。此对象维护组件运行的JBI执行环境,包括安装路径、部署路径、服务单元目录等信息。
—调用组件的生命周期init()方法,然后执行其start()方法。
—封装对象的ComponentConnector实例为一个JMX 管理Bean,并在JBI容器的JMX管理Bean服务器(MBeanServer)中注册此Bean。
激活组件需要与org.servicemix.jbi.container.JBIContainer 类交互,调用其activateComponent()方法。 此方法使用org.servicemix.jbi.container.ActivationSpec类的实例,以此构建有效的JBI组件。ActivationSpec对象是最终可以被激活的三种Java类型中的一种的实例。 对应类型如下:
1.javax.jbi.component.Component
2.javax.jbi.component.ComponentLifeCycle
3.org.servicemix.MessageExchangeListener:此对象实例被封装在org.servicemix.components.util.PojoLifecycleAdaptor或org.servicemix.components.util.PojoLifecycleAdaptor 或org.servicemix.components.util.ComponentAdaptor 类型实例中。比如org.servicemix.components.util.ComponentAdaptorMEListener。
代码4 说明了如何激活消息发送和接收组件。
代码4 激活发送和接收组件
//激活发送组件
String senderComponentID = “sender”;
org.servicemix.jbi.container.ActivationSpec senderActivationSpec =
new org.servicemix.jbi.container.ActivationSpec(senderComponentID, sender);
jbiContainer.activateComponent(senderActivationSpec);
//激活接收组件
String receiverComponentID = “receiver”;
org.servicemix.jbi.container.ActivationSpec receverActivationSpec =
new org.servicemix.jbi.container.ActivationSpec(receiverComponentID,
receiver)
jbiContainer.activateComponent(receverActivationSpec);
使用支持组件发送以及接收消息
在ServiceMix中发送消息,需要通过发送者支持组件传输此消息,需要消息接收支持组件监听并接收此信息。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SOA的2008年:应用软件开发hot stove联盟
回首2008年,我们发现一个完整的SOA年。在2008年初,SearchSOA.com涉及Eclipse和影响SCA和JBI。看来,JavaScript框架和图书馆厂商-开放源码的倡导者,仍然处理Web……
-
SOA有哪些基本原则?
在SOA中服务粒度有两种相关的意思,即服务是如何实现的,服务使用和返回了多少数据或多少消息。细粒度服务执行了最小的功能,发送和接收少量的数据……
-
JBI-Java实现SOA的标准途径
本文简短地阐述了即将到来的与SOA(面向服务体系)规范及ESB(企业服务总线)基础架构有关的JBI(Java业务集成)标准……
-
JBI简介
我最近听说有一些开始使用JBI 2.0 ,我感到很惊讶,因为我从来没有看到或听到任何关于JBI 1.0 。JBI 2.0版比原来的版本提供更多的承诺?