ServiceMix企业服务总线(ESB)(二)

日期: 2007-12-10 来源:TechTarget中国

  —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

官方微博

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版比原来的版本提供更多的承诺?