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

---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中发送消息,需要通过发送者支持组件传输此消息,需要消息接收支持组件监听并接收此信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值