JBossESB HelloWorld实例解析

本文我们来具体结合JBossESB中自带的helloworld_action例子,通过具体的HelloWorld中的配置来分析JBossESB的运行机制。

1、 jboss-esb.xml
该文件存放在%JBOSSESB_HOME%/sample/quickstarts/helloworld_action中。在看jboss-esb.xml的配置时候,我们应该分成两个部份. providersservices.
1.1Providers部分配置代码如下:

<providers>

<jms-provider name="JBossMQ" connection-factory="ConnectionFactory">

<jms-bus busid="quickstartGwChannel">

<jms-message-filter

dest-type="QUEUE"

dest-name="queue/quickstart_helloworld_action_Request"

/>

</jms-bus>

<jms-bus busid="quickstartEsbChannel">

<jms-message-filter

dest-type="QUEUE"

dest-name="queue/quickstart_helloworld_action_esb"

/>

</jms-bus>

</jms-provider>

</providers>

首先是<providers>,它是有一系列的<provider>组成, 目前有jms-provider, fs-provider, ftp-provider等等. 然后我们在provider里面定义这个.esb文件里面service所定义的listener所需要的bus, Bus可以简单理解成消息传送所需要的传输层. 正如以下所显示的,我们定义了两个Bus,一个是给GatewayListener,另外一个是给ESB-aware Message传输所需要的传输层.

1.2 services的部分配置代码如下:

<services>

<service category="HelloWorld_ActionESB"

name="SimpleListener"

description="Hello World" >

<listeners>

<jms-listener name="JMS-Gateway"

busidref="quickstartGwChannel"

is-gateway="true"

/>

<jms-listener name="JMS-ESBListener"

busidref="quickstartEsbChannel"

/>

</listeners>

<actions mep="OneWay">

<action name="action2"

class="org.jboss.soa.esb.actions.SystemPrintln"/>

<action name="displayAction" class="org.jboss.soa.esb.samples.quickstart.helloworldaction.MyJMSListenerAction"

process="displayMessage">

<property name="exceptionMethod" value="exceptionHandler"/>

</action>

<action name="playAction"

class="org.jboss.soa.esb.samples.quickstart.helloworldaction.MyJMSListenerAction"

process="playWithMessage">

<property name="exceptionMethod" value="exceptionHandler"/>

</action>

<action name="notificationAction"

class="org.jboss.soa.esb.actions.Notifier">

<property name="okMethod" value="notifyOK" />

<property name="notification-details">

<NotificationList type="OK">

<target class="NotifyConsole" />

<target class="NotifyQueues">

<messageProp name="quickstart" value="hello_world_action" />

<queue jndiName="queue/quickstart_helloworld_action_Response"/>

</target>

</NotificationList>

</property>

</action>

<!-- The next action is for Continuous Integration testing -->

<action name="testStore" class="org.jboss.soa.esb.actions.TestMessageStore"/>

</actions>

</service>

</services>

第二部份就是定义services的部份, 在这里定义了当前这个esb包所提供的services. 每个service又是由 <listener> <actions>组成的.actions又是由naction组成。这里的action是对消息(Message)处理的地方.

listener,我们通过 busidref来关联到我们定义在provider里面的bus. 在这里,我们定义了两个listener. 其中一个是做为Gateway,只负责从外界获取到JMS的消息,然后转成ESB内部所需要的Message. 而另外一个listener是用来这个Messageservices内部之间通讯的通道. 所以对于每个service来说,一定要至少定义一个listener来作为内部Message传输用.

2、 MyJMSListenerAction的定义:

public class MyJMSListenerAction extends AbstractActionLifecycle

{

protected ConfigTree _config;

public MyJMSListenerAction(ConfigTree config) { _config = config; }

public Message noOperation(Message message) { return message; }

public Message displayMessage(Message message) throws Exception{

logHeader();

System.out.println("Body: " + message.getBody().get().toString());

logFooter();

return message;

}

public Message playWithMessage(Message message) throws Exception {

// Header msgHeader = message.getHeader();

Body msgBody = message.getBody();

// Call theCall = msgHeader.getCall();

// EPR theEpr = theCall.getFrom();

String contents = msgBody.get().toString();

StringBuffer sb = new StringBuffer();

sb.append("/nBEFORE**/n");

sb.append(contents);

sb.append("/nAFTER**/n");

msgBody.add(sb.toString());

return message;

}

public void exceptionHandler(Message message, Throwable exception) {

logHeader();

System.out.println("!ERROR!");

System.out.println(exception.getMessage());

System.out.println("For Message: ");

System.out.println(message.getBody().get());

logFooter();

}

// This makes it easier to read on the console

private void logHeader() {

System.out.println("/n&&&&&&&&&&&&&&&&&&&&&&&&&&");

}

private void logFooter() {

System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&/n");

}

}

其中上述的方法会对应在jboss-esb.xml文件中的action。其中action中的name表示该action的一个别名,class表示定义该action方法所在的类(包及类名),process表示该类下的具体的方法。

3、 esb文件目录结构
server目录下部署.esb的文件,它的目录结构如下所示:
/META-INF/jboss-esb.xml
/META-INF/deployment.xml 在这里定义对其他包或者服务的依赖,或者配置classloader.
jbm-queue-service.xml (optional) 这里是定义启动所需要的Queue
**.jar (optional) 放些所需要的第三方包
所需要的classes文件

4、 客户端调用服务
目前在JBossESB,一般有两种方式来调用service. 一种是通过Gateway listener, 另外一种是直接通过ServiceInvokerAPI来调用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值