JBoss ESB是什么
来源:百度文库 编辑:神马文学网 时间:2024/04/28 04:24:43
JBoss ESB是一个开源的ESB,它基于RosettaNet ESB,支持服务的创建、部署和整合。
从架构上而言,可以将Jboss ESB中的一切都看作是服务。这些服务并非Web Services,而是ESB服务,这些ESB服务可以通过多种传输暴露出来。所有的ESB服务都有一个方法(doWork),可以通过下面的接口(由所有的服务共享)描述:
[blockquote]Message output = service.doWork(Message input) [/blockquote]在JBossESB中,ESB消息和SOAP消息类似,都由几个部分组成,包括标头(header),消息体(body),错误(fault),附件(attachments),等等。每个部分包括一个可序列化的java对象集合(map),通过集合中定义的name进行访问。这就意味着JBossESB消息并不是强类型的,在访问消息时需要注意(类型转换)。
服务定义的形式:
图2 JBoss ESB服务
与基于拦截器的传统ESB不同的是,JBoss ESB可以很好地隔离“业务”(服务实现)和相关基础设施(拦截器)。JBoss ESB在可执行的管道中将二者连接起来。然而这并非毫无价值,在一个服务管道中包含所有action都可以简化服务处理的理解。
JBoss ESB中的服务action是一个java类,它必须实现接口类DE>org.jboss.soa.esb.actions.ActionLifecycleDE>。服务的实现往往将服务功能分解成一系列的action,然后分别实现每个action。这类服务实现组织为JBoss ESB开发者提供了两个级别的复用——服务本身和可以在多个服务中复用的action。JBoss同样也提供了一个可复用action库。该库中包括如下类型的action[sup]1[/sup]:
服务action调用的设置和顺序以及服务监听的端点都是在jboss-esb.xml文件中配置。可以给指定的服务配置一系列action(它们由JBoss或者特定的公司或者服务所提供)。这种支持action的外部XML配置,极大地提高了actions的复用。
JBoss ESB中的服务调用
正如上文中提到, JBoss ESB中的一切都服务,异步[sup]2[/sup]调用是默认的调用模式。JBoss ESB同样也支持同步调用,同步调用可以使用相关性实现。ESB服务的同步和异步调用可以通过下面两种方式进行控制:
JBoss ESB的本地服务调用
除了远程传输外,JBoss还提供了高效的本地(在同一个JVM中)调用机制,它是通过一个内存队列来实现的。当在服务调用中使用org.jboss.soa.esb.client.ServiceInvoker时,如果该服务采用本地调用且采用本地部署,那么内存传输总会被选择用来优化性能。
支持Web Services
如今,当人们谈论ESB时,经常会强调Web Services的处理。技术上而言,JBoss ESB中包含很多基于Web Services的组件,这些组件可以暴露和调用Web Services端点(比如,总线上SOAP的开启和关闭):
SOAPProcessor通过JBossESB托管的监听器支持调用JBossWS托管的WebService端点。这意味着可以通过ESB为其它的ESB服务暴露Web service端点。它是基于一个轻量级的服务包装器(ServiceWrapper)Web service(比如,JSR 181规范[sup]4[/sup]的实现)而实现的,通过它可以调用目标服务(target Service)。这也意味着这些服务可以通过ESB所支持的传输通道(http, ftp,jms等)进行调用。在Web Service端点(使用JAXWS注解的java类)上配置的SOAP处理器(processor),实际上由WebService端点处理SOAP请求。
SOAPClient使用WISE[sup]5[/sup]客户端服务生成JAXWS客户端代码,并调用目标服务。通常是使用Web Service的WSDL的URL动态生成JAXWS客户端,以调用web service。
在开发的过程中,我们发现采用这种方式使用web service是很笨重的,所以需要采用如下策略:
通过XML文件可以配置服务监听器和服务执行管道。该XML配置文件由3个文件组成,这些是配置ESB服务[sup]6[/sup]不可缺少的文件:
图3 JBoss ESB工具
该工具以图形化的方式添加和配置监听器、服务和动作(包括动作的参数)。
使用Smooks实现数据转换
最重要的服务动作是数据转换。JBoss ESB使用Smooks[sup]9[/sup]实现数据转换。Smooks的基本原理是使用多种类型的数据源,并从数据源中生成事件流。然后对事件流采用访问者模式(Visitor pattern)生成不同类型的数据。[sup]10[/sup]它支持多种不同的数据源和数据类型,这意味着支持多种转换类型,包括(但不仅限这些):
为什么是Smooks?
技术上而言,可以直接通过java代码实现数据转换,那么为什么要使用Smooks呢?(记住:Smooks是基于XML配置文件的,编写XML文件往往比直接通过Java代码实现还要慢[sup]12[/sup]……) 数据转换中使用Smooks的好处:
JBoss ESB工具为可视化定义Smooks转换提供了图形化编辑器。
图 4 Smooks图形编辑器
数据转换创建完后,可以通过Smooks的执行报告(图 5)以视图的形式展现该过程中的所有执行步骤。该视图极大程度上简化了Smooks转换的debug过程。
图 5 Smooks执行报告
常见的Smooks转换设计错误
设计Smooks转换时,最重要的是要记住转换不是上下文敏感的。也就是说,比如,有如下一个XML文档:
[pre]
12345
12345
[/pre]当使用“c”作为选择器时,它会被调用两次。第一次是“b”元素里面的“c”,第二次是“d”元素中的“c”,即使是使用选择器\"b\"也会调用两次。
为了避免出现这些问题,需要使用源文档中具有唯一名称的选择器。
从架构上而言,可以将Jboss ESB中的一切都看作是服务。这些服务并非Web Services,而是ESB服务,这些ESB服务可以通过多种传输暴露出来。所有的ESB服务都有一个方法(doWork),可以通过下面的接口(由所有的服务共享)描述:
[blockquote]Message output = service.doWork(Message input) [/blockquote]在JBossESB中,ESB消息和SOAP消息类似,都由几个部分组成,包括标头(header),消息体(body),错误(fault),附件(attachments),等等。每个部分包括一个可序列化的java对象集合(map),通过集合中定义的name进行访问。这就意味着JBossESB消息并不是强类型的,在访问消息时需要注意(类型转换)。
服务定义的形式:
- [li]服务目录/名称(Service Category/Name)——Jboss ESB有一个内部的服务注册机制(部署服务时,服务会自动注册),其内部为访问服务提供优化机制。 [/li][li]输入消息组件 —— 包括名称(names)(在入站消息体中)和类型(type) [/li][li]输出消息组件 —— 包括名称(names)(在出站消息体中)和类型(type) [/li]
图2 JBoss ESB服务
与基于拦截器的传统ESB不同的是,JBoss ESB可以很好地隔离“业务”(服务实现)和相关基础设施(拦截器)。JBoss ESB在可执行的管道中将二者连接起来。然而这并非毫无价值,在一个服务管道中包含所有action都可以简化服务处理的理解。
JBoss ESB中的服务action是一个java类,它必须实现接口类DE>org.jboss.soa.esb.actions.ActionLifecycleDE>。服务的实现往往将服务功能分解成一系列的action,然后分别实现每个action。这类服务实现组织为JBoss ESB开发者提供了两个级别的复用——服务本身和可以在多个服务中复用的action。JBoss同样也提供了一个可复用action库。该库中包括如下类型的action[sup]1[/sup]:
- [li]转换器(Transformers & Converters) [/li][li]支持JBPM [/li][li]脚本(Scripting) [/li][li]路由(Routing) [/li][li]支持Web Service [/li][li]Misc [/li]
服务action调用的设置和顺序以及服务监听的端点都是在jboss-esb.xml文件中配置。可以给指定的服务配置一系列action(它们由JBoss或者特定的公司或者服务所提供)。这种支持action的外部XML配置,极大地提高了actions的复用。
JBoss ESB中的服务调用
正如上文中提到, JBoss ESB中的一切都服务,异步[sup]2[/sup]调用是默认的调用模式。JBoss ESB同样也支持同步调用,同步调用可以使用相关性实现。ESB服务的同步和异步调用可以通过下面两种方式进行控制:
- [li]服务实现通过使用消息交换模式(MEP)参数定义服务行为(service behavior)。Request-Response是默认的MEP,也就是说服务必须返回一个响应(response)。如果将MEP设置成为one-way,那么服务无需返回响应信息。 [/li][li]服务消费者可以自己定义它是否需要回复。如果需要,request-response MEP服务将返回一个响应信息[sup]3[/sup]。 [/li]
JBoss ESB的本地服务调用
除了远程传输外,JBoss还提供了高效的本地(在同一个JVM中)调用机制,它是通过一个内存队列来实现的。当在服务调用中使用org.jboss.soa.esb.client.ServiceInvoker时,如果该服务采用本地调用且采用本地部署,那么内存传输总会被选择用来优化性能。
支持Web Services
如今,当人们谈论ESB时,经常会强调Web Services的处理。技术上而言,JBoss ESB中包含很多基于Web Services的组件,这些组件可以暴露和调用Web Services端点(比如,总线上SOAP的开启和关闭):
SOAPProcessor通过JBossESB托管的监听器支持调用JBossWS托管的WebService端点。这意味着可以通过ESB为其它的ESB服务暴露Web service端点。它是基于一个轻量级的服务包装器(ServiceWrapper)Web service(比如,JSR 181规范[sup]4[/sup]的实现)而实现的,通过它可以调用目标服务(target Service)。这也意味着这些服务可以通过ESB所支持的传输通道(http, ftp,jms等)进行调用。在Web Service端点(使用JAXWS注解的java类)上配置的SOAP处理器(processor),实际上由WebService端点处理SOAP请求。
SOAPClient使用WISE[sup]5[/sup]客户端服务生成JAXWS客户端代码,并调用目标服务。通常是使用Web Service的WSDL的URL动态生成JAXWS客户端,以调用web service。
在开发的过程中,我们发现采用这种方式使用web service是很笨重的,所以需要采用如下策略:
- [li]要是消费web service,我们直接通过可用的WSDL生成web service客户端(可以采用Axis 1,Axis 2 或者JBoss WS)。 [/li][li]要是暴露ESB服务,我们可以为SOAP采用JBoss WS ,为REST采用RestEasy来暴露DE>org.jboss.soa.esb.client.ServiceInvokerDE>,并调用所需的服务。这在架构上和使用SOAPProcessor是一样的,但更通用一些,这允许服务功能可以暴露成SOAP、REST或者其它所需接口。 [/li]
通过XML文件可以配置服务监听器和服务执行管道。该XML配置文件由3个文件组成,这些是配置ESB服务[sup]6[/sup]不可缺少的文件:
- [li]jbm-queue-service.xml中定义了服务[sup]7[/sup]所用的每个传输(通常是队列)相关的MBean。 [/li][li]deployment.xml定义了服务依赖的所有传输。部署ESB服务时会验证该文件中的依赖关系是否正确。 [/li][li]jboss-esb.xml中定义了监听器和服务管道。 [/li]
图3 JBoss ESB工具
该工具以图形化的方式添加和配置监听器、服务和动作(包括动作的参数)。
使用Smooks实现数据转换
最重要的服务动作是数据转换。JBoss ESB使用Smooks[sup]9[/sup]实现数据转换。Smooks的基本原理是使用多种类型的数据源,并从数据源中生成事件流。然后对事件流采用访问者模式(Visitor pattern)生成不同类型的数据。[sup]10[/sup]它支持多种不同的数据源和数据类型,这意味着支持多种转换类型,包括(但不仅限这些):
- [li]XML to XML [/li][li]XML to Java [/li][li]Java to XML [/li][li]Java to Java [/li][li]EDI to XML [/li][li]EDI to Java [/li][li]Java to EDI [/li][li]CSV to XML [/li][li]CSV to ... [/li]
为什么是Smooks?
技术上而言,可以直接通过java代码实现数据转换,那么为什么要使用Smooks呢?(记住:Smooks是基于XML配置文件的,编写XML文件往往比直接通过Java代码实现还要慢[sup]12[/sup]……) 数据转换中使用Smooks的好处:
- [li]与Java实现不同的是,Smooks不需要处理任何if-then逻辑。可以为数据源中的所有元素定义映射,如果数据源中不存在某个元素,那么将不会生成映射。 [/li][li]Smooks的文件结构对应组件的映射。 [/li][li]Smooks可以使用外部的转换定义,因此提高了整体维护服务的效率。 [/li][li]JBoss/Smooks为Smooks提供了一个图形化的编辑器,通过该编辑器可以设计数据转换。 [/li]
JBoss ESB工具为可视化定义Smooks转换提供了图形化编辑器。
图 4 Smooks图形编辑器
数据转换创建完后,可以通过Smooks的执行报告(图 5)以视图的形式展现该过程中的所有执行步骤。该视图极大程度上简化了Smooks转换的debug过程。
图 5 Smooks执行报告
常见的Smooks转换设计错误
设计Smooks转换时,最重要的是要记住转换不是上下文敏感的。也就是说,比如,有如下一个XML文档:
[pre]
[/pre]当使用“c”作为选择器时,它会被调用两次。第一次是“b”元素里面的“c”,第二次是“d”元素中的“c”,即使是使用选择器\"b\"也会调用两次。
为了避免出现这些问题,需要使用源文档中具有唯一名称的选择器。
JBoss ESB是什么
JBoss ESB 4.x 介绍
JBoss ESB 4.x 介绍
关于JBOSS ESB的部署问题
使用JBoss ESB 和 LegStar实现大型机整合
ESB
ESB
JBoss 是什么 - javaplan - JavaEye技术网站
SOA--ESB
JBoss教程
JBOSS ERROR
jboss jbpm 3.0
jboss jbpm 学习点滴
JBOSS数据库配置大全
jboss的目录结构
jboss-web.xml
jboss TimerBean例子接口
Jboss配置有关
jboss的目录结构
JBoss配置详解
JBoss Tools简介
BPM Console - JBoss Community
Jboss配置有关
Huihoo.org - JBoss - Jboss下MS SQL Server配置指导