Apache Servicemix 教程 – GET/POST传递

   这几天在南京出差,参与一个华为巴西的POC演示项目. 涉及到CRM,OSS,BSS,BA等多个生产系统. 原先项目采用WebLogic作为中间件(浙江电信自己的中间件,部署在Weblogic)上.由于该中间件的局限性,其他系统SOAP传递有点问题, 因此对方简易使用别的ESB产品,已便于支撑项目能够完成.

   CRM系统是把浙江电信CRM完全移植,采用sieble7. 可能是时代的局限性, sieble7还不支持soap消息的传递,而是使用一种特定结构的xml,通过post方式传递到外部系统. 最新的sieble8应该不会有这个问题.

   然而,阅读Servicemix文档,可以发现Servicemix并没有直接的HTTP Post/Get的Binding Component. 然后自己观察就可以发现,Servicemix提供了HTTP Binding Compoent组件, 而POST/GET方式正式最基本的HTTP提交方式. 因此完全可以用HTTP Bingding Compoent支持这点.

HTTP Binding Compoent    http://servicemix.apache.org/servicemix-http.html

  阅读HTTP Binding Compoent的文档.并没有找到那里有设置GET/POST参数的地方, 而POST/GET传递方式,最基本的一点是必须要有一个参数作为载体,然后通过这个载体传递到服务端.

  继续翻文档,翻Mail List,终于找到servicemix有个相似的例子: Http Upload

   使用HTTPMarshaler完全可以解决我们的需求.

Http 配置


				xmlns:http="http://servicemix.apache.org/http/1.0"

				xmlns:novaesb="http://www.fengsage.com/novaesb"

				xmlns="http://www.springframework.org/schema/beans"

				xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance"

				xsi:schemaLocation="http://servicemix.apache.org/http/1.0 http://servicemix.apache.org/schema/servicemix-http-3.2.3.xsd

				http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

				service="novaesb:httplistener"

				endpoint="listenerEndpoint"

				locationURI="http://0.0.0.0:8192/query/"

				defaultMep="http://www.w3.org/2004/08/wsdl/in-out"

				targetService="novaesb:CustomerTarget"

				marshaler="#marshaler" />

				id="marshaler" class="com.fengsage.novaesb.HTTPMarshaler" />

				

com.fengsage.novaesb.HTTPMarshaler代码


				/*

				* To change this template, choose Tools | Templates

				* and open the template in the editor.

				*/

				package com.fengsage.novaesb;

				import javax.jbi.component.ComponentContext;

				import javax.jbi.messaging.MessageExchange;

				import javax.jbi.messaging.MessagingException;

				import javax.jbi.messaging.NormalizedMessage;

				import javax.servlet.http.HttpServletRequest;

				import javax.servlet.http.HttpServletResponse;

				import org.apache.log4j.Logger;

				import org.apache.servicemix.http.endpoints.DefaultHttpConsumerMarshaler;

				import org.apache.servicemix.jbi.jaxp.StringSource;

				/**

				* HTTP protocal POST/GET

				* @author Fred

				*/

				public class HTTPMarshaler extends DefaultHttpConsumerMarshaler{

				private static final Logger logger = Logger.getLogger(HTTPMarshaler.class);

				public MessageExchange createExchange(HttpServletRequest req, ComponentContext context) throws Exception {

				String request = req.getParameter("request");

				logger.info("******"+request);

				MessageExchange me = context.getDeliveryChannel().createExchangeFactory().createExchange(getDefaultMep());

				NormalizedMessage in = me.createMessage();

				if (request != null) {

				in.setContent(new StringSource(this.wappedJBI(request)));

				} else {

				in.setContent(new StringSource(this.wappedJBI("null")));

				}

				me.setMessage(in, "in");

				return me;

				}

				public static String wappedJBI(String xml){

				String head = " "

				+ "

				+ "xmlns:xsd="http://www.w3.org/2001/XMLSchema" "

				+ "xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"";

				String body = ""+xml+"";

				String end = "";

				return head+body+end;

				}

				public void sendOut(MessageExchange exchange, NormalizedMessage outMsg, HttpServletRequest request,

				HttpServletResponse response) throws Exception {

				response.getOutputStream().print("11111111111111111");

				}

				}

 

~Over~

仙境傳說 永遠に…Love Forever

有一种感动流淌在心中,经典的游戏啊~

下载地址:skydrive

在Debian上安装Xen配置虚拟机

不想做翻译了,直接链接

http://mediakey.dk/~cc/installing-xen-on-debian-etch-40/

非常不错的文章

windows xp 任务栏活动项缩小

昨天又把win7改回XP了,原因是本本CPU有点问题,温度太烫. 感觉使用win7对CPU的温度有一定影响. 当然改回XP后发现其实差不多·╮(╯▽╰)╭

目前看来改成XP最大的好处是为我减少了6个G左右的硬盘空间,本本T60比较老,只有60G硬盘,资源有限.习惯了win7的操作界面,回到XP还是有点不适应,最难受的就是XPd的任务栏了,显示一个活动项后,就很长,打开几个程序就能把任务栏沾满 .如果像win7那样把相同任务重叠,并缩小显示就好了.

特意查了点资料,整理如下(XP有效):

一、任务栏重叠
1. 右键单击任务栏,点’属性’  2. 对’分组相似任务栏按钮’前的框打钩

二、任务栏图标缩小

1. 打开注册表,运行内输入’regedit’  2. 找到’HKEY_CURRENT_USER/AppEvents/Control Panel/Desktop/WindowMetrics’项,修改或新增‘字符串项’ MinWidth, 并设置值为 -285 即可

如图:

保存后,需要重启电脑, 重置explorer.exe的方法无效.

最终效果如下:

重温RO

RO即仙境传说,5年前曾风靡一时的一款网游佳作. 年少的我被这款网游深深的吸引.至此今日,很多网游都能看到RO的身影. RO开创了转职模式. 自由的配点,让职业不单单像外表看到的那样.

会拿书砸人的牧师,法力高强的骑士,这些打破常规的自由组合正是RO的魅力之处.

曾今的外挂毁了RO,RO的辉煌也已经过去. 正如这天道盛久必衰一样. 任何一款网游都会有这一天的. 今天重温RO 无非是儿时的梦想罢了.

如今工作繁忙,也不知道能有多少时间重温这个梦. 望RO有重新回到人们视野中的那天.

偶在新服  天空之城  ID: fengsage  O(∩_∩)O~ 有志同道合的朋友一起重温吧·

Apache Servicemix 教程 – CXFSE

前面我们讲了Servicemix最常用的组件之一CXFBC的使用,几乎常见的接口开发都会用到,这里我们介绍CXFSE,从名字上可以看到这是一个SE组件.属于JBI内部的数据处理单元.

SE 即 Service Enging 服务引擎,JBI一个重要概念,基本概念参考此处 

从官网上我们可以看到下面几个特征

  • JSR-181 annotations
  • JAXB2/Aegis/XMLBeans databinding
  • WSDL auto generation
  • Java proxy support
  • MTOM / attachments support

我们关心最后2个,其实这几个都属于WebService或CXF框架本身的范畴,这里因为Servicemix用到了CXF所以这些特征也带了,想获得详细特性的请访问CXF官网.

其实简单来说,CXFSE最主要的功能是用代码发布一个WSDL,但是,这个WSDL是在JBI容器内的,不对外的,因为CXFSE是一个SE组件而非BC组件,根据JBI规范,不能用于协议转换.

CXFBC+CXFSE 可以做到在Servicemix容器内发布自己的Webservice. 虽然这种做法比较少见,因为Servicemix主要把现有的系统集成,而不是自己发布服务.

一、Java Proxy

官网上这句话解释的非常清楚,‘You can create java proxies for JBI endpoints, provided that they expose a WSDL.’

要理解这句话,首先要明白一件事,即JBI内部用来描述一个服务,也是采用了WSDL规范,这不能说是JBI就是WSDL规范,只能说是JBI用了WSDL规范来描述自身的服务.因此这里我们可以很显性的把一个JBI的组件向外暴露出WSDL,通过CXF-BC直接暴露给外部.当然一般业务角度上来说,这是危险的.

二、MTOM Support

CXF支持MTOM,Servicemix没理由不支持,只需按如下申明即可

<cxfse:endpoint mtomEnabled="true" ... />

结合上面说的一对P话,我们来实际做一个例子,即Servicemix发布一个服务,该服务允许上传附件,即用到了CXFBC+CXFSE+MTOM这些.

待续…

男儿当自强~刘伟

好男儿,当如刘伟,身残志不残,修身养性,孝顺父母~

Apache Servicemix 教程 – CXFBC

主要介绍下Servicemix最常用的组件之一servicemix cxfbc的使用,官方上有比较详细的文档,英文好的朋友可以直接点击查看

  CXF 同时也是apache的一款webserivce框架.Java开发者可以使用cxf快速的发布webserivce或者作为客户端调用别的webserivce.

  在Java世界里,webserivce本质上就是把java bean对象序列化成xml文本,并包装成SOAP格式的消息传递到服务端,由服务端反序列化xml消息到java bean调用相关服务.

Note:这里的序列化和反序列化,涉及到2个标准,即jax-rpc和jax-ws规范 这2个规范无论是对SOAP的格式还是java-xml间互转都有着本质上的不同.JDK1.5以后,sun已经把jax-rpc移除了jdk中去. JDK1.5开始都采用jax-ws规范. 这里cxf同样只支持jax-ws规范.

  我们先来写一个简单的webservice程序,充当集成的一个系统,我们称这个系统为mock系统. 如何开发一个webserivce不是这里的重点,可以点击此处下载已开发完好的webservice程序,只需把war包扔到Servlet容器内部署即可. 这里我们假设我需要集成一个订单受理系统.

  浏览器内输入 http://localhost:8000/mock/services/order?wsdl   打开如下图,则启动正常

TM截图未命名

好了,我们开始对这个mock系统进行集成,因为是例子,我做的尽量简单,只使用cxfbc一个JBI组件来开发,现实环境中一般还用上xslt作为数据树结构转换,这里我们先不用.

一、编写自定义WSDL,

  CXFBC是一个BC组件,简单来说其实是一个WebService的代理组件,使用这个组件我可以不写任何一行代码,来和一个现有的WebService进行连接,虽然不用写代码,但我们却需要编写一个WSDL文件,这样ESB暴露给别的系统的就是这份WSDL文件,调用后CXFBC组件会把这份WSDL产生的SOAP消息,发往外部系统,这里是我们的mock系统.

大致关系如下:   
Client   — soap –>   ServiceMix(Custom WSDL) – soap – > mock

这里为了演示,我就自己不写WSDL了,直接把mock发布的WDSL拷贝一份即可,但要注意修改几个地方,参考下面WSDL.

 

XML语言: 临时自用代码
<?xml version=”1.0″ ?><wsdl:definitions name=“OrderServerImplService” targetNamespace=“http://www.fengsage.com/order” xmlns:ns1=“http://cxf.apache.org/bindings/xformat” xmlns:soap=“http://schemas.xmlsoap.org/wsdl/soap/” xmlns:tns=“http://www.fengsage.com/order” xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/” xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
  <wsdl:types>
<xs:schema attributeFormDefault=“unqualified” elementFormDefault=“unqualified” targetNamespace=“http://www.fengsage.com/order” xmlns=“http://www.fengsage.com/order” xmlns:xs=“http://www.w3.org/2001/XMLSchema”>
<xs:complexType name=“orderDetail”>
<xs:sequence>
<xs:element name=“id” type=“xs:long”></xs:element>
<xs:element minOccurs=“0” name=“name” type=“xs:string”></xs:element>
<xs:element name=“nums” type=“xs:int”></xs:element>
<xs:element minOccurs=“0” name=“remark” type=“xs:string”></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name=“orderResult”>
<xs:sequence>
<xs:element name=“id” type=“xs:long”></xs:element>
<xs:element minOccurs=“0” name=“name” type=“xs:string”></xs:element>
<xs:element minOccurs=“0” name=“status” type=“xs:string”></xs:element>

</xs:sequence>
</xs:complexType>
<xs:element name=“create” nillable=“true” type=“orderDetail”></xs:element>
<xs:element name=“createResponse” nillable=“true” type=“orderResult”></xs:element>
</xs:schema>
  </wsdl:types>
  <wsdl:message name=“create”>
    <wsdl:part element=“tns:create” name=“create”>
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name=“createResponse”>

    <wsdl:part element=“tns:createResponse” name=“createResponse”>
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name=“OrderMockServer”>
    <wsdl:operation name=“create”>
      <wsdl:input message=“tns:create” name=“create”>
    </wsdl:input>
      <wsdl:output message=“tns:createResponse” name=“createResponse”>
    </wsdl:output>

    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name=“OrderServerImplServiceSoapBinding” type=“tns:OrderMockServer”>
    <soap:binding style=“document” transport=“http://schemas.xmlsoap.org/soap/http”></soap:binding>
    <wsdl:operation name=“create”>
      <soap:operation soapAction=“” style=“document”></soap:operation>
      <wsdl:input name=“create”>
        <soap:body use=“literal”></soap:body>
      </wsdl:input>

      <wsdl:output name=“createResponse”>
        <soap:body use=“literal”></soap:body>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name=“OrderServerImplService”>
    <wsdl:port binding=“tns:OrderServerImplServiceSoapBinding” name=“OrderMockEndPointPort”>
      <soap:address location=“http://localhost:8000/mock/services/order”></soap:address>
    </wsdl:port>

  </wsdl:service>
</wsdl:definitions>

 

注意<wsdl:service name=”OrderServerImplService” 和 <wsdl:port name=”OrderMockEndPointPort” 我们要修改成如下:

XML语言: 临时自用代码
<wsdl:service name=“OrderServerESBService”>
  <wsdl:port binding=“tns:OrderServerImplServiceSoapBinding” name=“OrderESBEndPointPort”>
    <soap:address location=“http://localhost:8000/mock/services/order”></soap:address>
  </wsdl:port>
</wsdl:service>

由于对Servicemix来说,外部系统(mock),也是一个endpoint,所以这里service name和endpoint name不能和外部系统一致,改成不同即可.

二、建立Servicemix工程

  这里使用maven脚本建立.

  1) 创建ROOT目录

C: mvn archetype:create -DarchetypeArtifactId=servicemix-project-root -DarchetypeGroupId=org.apache.servicemix.tooling -DartifactId=Root -DgroupId=com.fengsage.esb

2) 创建CXFBC组件

C:Root>mvn archetype:create -DarchetypeArtifactId=servicemix-cxf-bc-service-unit -DarchetypeGroupId
=org.apache.servicemix.tooling -DartifactId=cxfbc -DgroupId=com.fengsage.esb

3) 把前面自定义的WSDL文件放到srcmainresources 系统classpath 路径下

4) 编辑CXFBC组件的xbean.xml

XML语言: 临时自用代码
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=“http://www.springframework.org/schema/beans”
       xmlns:cxfbc=“http://servicemix.apache.org/cxfbc/1.0”
       xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
       xmlns:esb=http://www.fengsage.com/order
       xsi:schemaLocation=“http://servicemix.apache.org/cxfbc/1.0 http://servicemix.apache.org/schema/servicemix-cxfbc-3.2.3.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”>
  
  <cxfbc:consumer wsdl=“classpath:custom.wsdl”
                service=“esb:OrderServerESBService”
            endpoint=“OrderMockEndPointPort”
                  locationURI=“http://localhost:8193/ESB/1”
            targetService=“esb:OrderServerImplService”
                  targetEndpoint=“OrderMockEndPointPort”/>

  <cxfbc:provider wsdl=“http://localhost:8000/mock/services/order?wsdl”
                service=“esb:OrderServerImplService”
                  endpoint=“OrderMockEndPointPort”/> 
</beans>

5) 创建SA组件,进行打包

C:Root>mvn archetype:create -DarchetypeArtifactId=servicemix-service-assembly -DarchetypeGroupId=or
g.apache.servicemix.tooling -DartifactId=sa -DgroupId=com.fengsage.esb

6) 手动调整SA组件里的POM文件,添加下面几行,通知SA编译时把CXFBC组件打包进去

<dependency>
  <groupId>com.fengsage.esb</groupId>
  <artifactId>cxfbc</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

7) 编译

C:Root>mvn install

8) 发布

  进入SAtarget目录,可以看到有个生成的sa-1.0-SNAPSHOT.jar文件把这个文件放到ApacheService的hotdeploy目录,启动Servicemix即可.或运行下面命令可以直接发布

C:Rootsa>mvn jbi:projectDeploy -o

如无错误,应该有下面提示

INFO  – ServerImpl                     – Setting the server’s publish address to be http://localhost
:8193/ESB/1

10) 打开http://localhost:8193/ESB/1?wsdl 进行浏览,可以看到这个就是我们在ESB发布的WebService了

11) 测试

  我们使用一款免费的WebService测试工具, SOAP UI , 官方地址

<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:ord=”http://www.fengsage.com/order”>
   <soapenv:Header/>
   <soapenv:Body>
      <ord:create>
         <id>?</id>
         <!–Optional:–>
         <name>?</name>
         <nums>?</nums>
         <!–Optional:–>
         <remark>?</remark>
      </ord:create>
   </soapenv:Body>
</soapenv:Envelope>

Apache Servicemix 教程 – 安装部署

简单介绍下Servicemix安装、使用、部署,并简单介绍下Servicemix简单配置.

安装

  1. 下载Servicemix  http://servicemix.apache.org/download.html 由linux和windows两个不同版本
  2. 解压到指定文件夹(zip/tar.gz)

Note:目前最新版本是3.3.2 和 4.0.0

运行

  1. cd <SERVICEMIX_HOME>
  2. windows:   .binservicemix.bat
    linux:          ./bin/servicemix

Note:由于linux启动servicemix,会随终端退出而关闭,需要使用nohup命令,使其脱离终端独立运行

部署

Servicemix提供2种主要监控方式

  1. 热部署目录. 即把开发好的SA直接放到<SERVICEMIX_HOME>hotdeploy目录中去即可
  2. 脚本部署. Servicemix运行使用ant或maven脚本方式,直接把开发好的SA植入到JBI容器内

Note:Servicemix提供了部署MBena,用户可以使用此MBean开发第三方程序进行部署

监控

Servicemix并没有提供第三方监控工具,而是推荐使用sun的jconsole工具,该工具位于JDK bin目录中和java
、javac等命令在一个目录下,操作如下

  1. 命令行输入jconsole
  2. 在远处连接处输入”service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi”  默认用户名和密码都是smx
  3. 点击”连接”按钮即可对Serivicemix内部资源进行监控

Note:Servicemix的第三方生产商FUSE提供了HQ监控工具,但是由于不开源,所以大家无福消受了.

 

关于开发

官方推荐使用maven作为Servicemix的开发工具,个人也强烈推荐,简单方便.详细的maven教程可以参考maven官方网站.http://maven.apache.org/

这里简单讲一下如何建立一个Servicemix工程,后面实例中讲详细介绍

  1. 创建一个root工程
    mvn archetype:create -DarchetypeArtifactId=servicemix-project-root -DarchetypeGroupId=org.apache.servicemix.tooling -DartifactId=Root -DgroupId=com.fengsage.esb
  2. 创建任意SU组件,各个组件对应的maven id 都可以从下面网址中得到
    http://mvnrepository.com/artifact/org.apache.servicemix.tooling
  3. 创建SA组件,对于每个servicemix工程,都需要打包成SA文件才能部署到JBI容器中去.
    mvn archetype:create -DarchetypeArtifactId=servicemix-service-assembly -DarchetypeGroupId=org.apache.servicemix.tooling -DartifactId=Root -DgroupId=com.fengsage.esb
  4. 编译,在root目录下,输入maven install 或 maven clear install 即可完成编译
  5. 打开编译后的*sa文件夹,找到target文件夹,里面有个*.jar文件即使我们打包后得到的SA文件,部署到servicemix容器中即可.

Apache Servicemix 教程 – 介绍及理论

经过一年来ESB学习和工作的部分经验.即给自己总结的时间,把脑海中关于ESB的部分进行整理,也留下点心得,也想和对ESB感兴趣,有研究的朋友进行交流.不足之处望予以批评指正.

基础概念

1. ESB

ESB(Enterprise Service Bus)是为了解决企业生态群落内大量系统间因为交互繁琐导致维护成本增加而产生的.下图是典型的传统多系统间数据交互图.随着生态群落的扩大,越来越多的系统加入,导致维护这些系统的通讯成本越来越多

clip_image002[4]

ESB的诞生就是为了解决上图中的这些问题,下图可以可以看到ESB所解决的实际问题.

clip_image004[4]

2. Apache Servicemix

Apache是著名的开源社区,正对不同应用都有很多对应的开源产品,对开源有兴趣的朋友可以进入官网学习. 对于ESB. Apache主要有2款产品: Synapse 和 Servicemix

  1. Synapse,这款产品是apache早期的一款ESB产品,诞生于JBI规范制定之前,属于众多ESB产品中一个普通的产品,并没有什么太吸引人的地方. 但随着WSO2这款新ESB的兴起,发生了点改变.WSO2是WSO2公司正对Synapse进行二次开发后的产物,因为使用了apache licese因此也开源.并且提供了强大的可视化界面,通过几步简单的配置就能完成系统间接口的集成.
  2. ServiceMix,我们重点讲这款产品.这款产品是目前Apache主推的一款ESB产品,遵循了JBI规范,可以很方便的进行二次扩展,其自带的组件基本能完成一般系统集成的需要,是构建SOA的良好产品.目前Servicemix主要有2个版本在维护,即3.*和4.*两个版本,这里我们讲3.*版本.

3. Apache CXF

目前比较成熟功能比较齐全的webserivce工具.可以用来发布自己的webserice程序,并能作为webserivce的客户端. Servicemix使用cxf作为其webserivce的一个发布工具.

4. Apache Camel

Apache Camel是一个开源的企业应用集成框架。它采用URI来描述各种组件,这样你可以很方便地与各种传输或者消息模块进行交互,比如HTTP、 ActiveMQ、JMS、JBI、SCA、MINA或CXF Bus API。该路由完全参照了《Enterprise Integration Patterns》一书中各种路由模式的规则. Servicemix使用camel作为其核心消息路由器.

5.  Apache derby

Apache一款文件型数据库,可以方便的内嵌到任意程序中去,也可以以内存作为数据库存储.比较适合开发系统初期使用. Servicemix用来对一些NMR消息的记录.

6.  Apache activemq

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

7.  JBI

Sun用来规范ESB领域而制定的一个规范,当然目前遵守这一规范的ESB产品不多,Servicemix算是其中一个良民.
Servicemix从本质上来说就是一个JBI的容器,任何符合JBI规范的组件都可以放到这个容器里,成为Servicemix的一部分.JBI协议是smx里的重点,简单来说JBI协议分为下面几部分.

  1. Bind Component(BC) 即消息绑定组件,用于对不同消息进行转换.把收到的各种消息统一转换为JBI消息.也把JBI消息转换成各种协议发往外部系统.eg:
    servicemix-file                 IO组件,允许对把IO文件传入Servicemix
    servicemix-ftp                 支持FTP协议,允许使用FTP上文件传入Servicemix
    servicemix-http               支持Http协议,允许通过Http接受文件
    servicemix-jms                支持JMS协议,允许接受JMS消息
    servicemix-xmpp             支持XMPP协议,允许实时同步消息
    servicemix-cxfbc             支持WebService,允许接受soap消息,此组件不支持jax-rpc规范
    ……
  2. Server Engine(SE) 即服务引擎,简单来说就是把从BC组件收到的消息进行二次处理,比如路由消息,树结构转换, eg:
    servicemix-bean            允许自定义bean,可以自行对消息进行自定义处理
    servicemix-camel           允许对消息路由处理
    servicemix-jsr181           允许自定义通过代码发布WebService接受soap并处理消息
    servicemix-quartz          消息定时处理
    servicemix-saxon           消息格式转换,支持xslt
    servicemix-script            允许在嵌入动态语言对消息进行处理
    ……
  3. Normalized Message Route(NMR) 即标准消息路由,在JBI规范中,BC收到消息后,不能直接传递给下一个BC或者SE进行消息处理,这些传输必须通过NMR转发,NMR转发的消息已经是标准的JBI消息,Servicemix也支持对soap消息进行NMR传递
  4. Delivery channel 即传输通道,上述NMR消息传输的通道
  5. Service Unit (SU) 即服务单元,用户编写的服务的最小单位,每个服务单元都有自己的逻辑进行处理.例如,消息转换,消息路由,通过一个或多个SU的组合完成一次接口调用
  6. Service Assemblys(SA) 即服务集合,简单来说就是把SU大包成SA文件,然后部署到Servicemix中去

先写到这,以后继续补充,ESB设计到太多的J2EE知识,几乎涵盖了J2EE所有特征.