前言
发现JBossESB网上流传甚广的就是JBoss学习笔记系列了,这个系列资料还可以,但如果你一上来就看这个的话,感觉还是有点蒙,因为根本不明白这样做到底是为什么。所以看了之后,也会发现自己只能照着葫芦画一个葫芦,连一个瓢也画不了。
helloworld这句话从我们一进行编程的世界就经常听到,那么第一个例子,我们就来helloworld。
ESB目录结构
ESB发布之后,会是一个.esb格式的zip压缩包,里面的结构如下:
其中:
jboss-esb.xml:包含service、listener、action、provider的配置,具体都是什么,后面会说到的。
deployment.xml:是可选的,有两种情况下会用这个。一种是一个.esb依赖令一个.esb,用来指定加载顺序,另一种就是确定.esb的部署范围。不明白没关系,有的是例子使你明白这个的用处的。
java classes:是你自己的包含包层次的action
jars:这个我想不用说吧,就是添加你的应用依赖的包
queue-service.xml:如果你的jboss-esb.xml中的provider使用的queue或者topic,你可以在通过这个来进行部署。使用其它方式督署也可以,不过ESB的官方文档中明确说明的建议采取此种方式。
运行helloworld
helloworld配置解析
public class MyJMSListenerAction extends AbstractActionLifecycle
{
protected ConfigTree _config;
public MyJMSListenerAction(ConfigTree config) { _config = config; }
public Message displayMessage(Message message) throws Exception{
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
System.out.println("Body: " + message.getBody().get()) ;
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
return message;
}
}
怎样写Action,自己查文档吧,没啥意思。jboss-esb.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd" parameterReloadSecs="5">
<providers>
<jms-provider name="JBossMQ" connection-factory="ConnectionFactory">
<jms-bus busid="quickstartGwChannel">
<jms-message-filter
dest-type="QUEUE"
dest-name="queue/quickstart_helloworld_Request_gw"
/>
</jms-bus>
<jms-bus busid="quickstartEsbChannel">
<jms-message-filter
dest-type="QUEUE"
dest-name="queue/quickstart_helloworld_Request_esb"
/>
</jms-bus>
</jms-provider>
</providers>
<services>
<service
category="FirstServiceESB"
name="SimpleListener"
description="Hello World">
<listeners>
<jms-listener name="JMS-Gateway"
busidref="quickstartGwChannel"
is-gateway="true"
/>
<jms-listener name="helloWorld"
busidref="quickstartEsbChannel"
/>
</listeners>
<actions mep="OneWay">
<action name="action1"
class="org.jboss.soa.esb.samples.quickstart.helloworld.MyJMSListenerAction"
process="displayMessage"
/>
<action name="action2" class="org.jboss.soa.esb.actions.SystemPrintln">
<property name="printfull" value="false"/>
</action>
<!-- The next action is for Continuous Integration testing -->
<action name="testStore" class="org.jboss.soa.esb.actions.TestMessageStore"/>
</actions>
</service>
</services>
</jbossesb>
jbm-queue-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_esb"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_gw"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
</server
如果你看sample/quickstart/helloworld下面,还有一个jbmq-queue-service.xml,但部署文件里只有jbm-queue-service.xml。
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_esb">
<depends optional-attribute-name="DestinationManager">
jboss.mq:service=DestinationManager
</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_gw">
<depends optional-attribute-name="DestinationManager">
jboss.mq:service=DestinationManager
</depends>
</mbean>
</server>
jbm-queue-service.xml是JBoss messaging这种消息使用方式采用的配置文件,jbmq-queue-service.xml是JBossMQ的配置文件,但官方建议我们使用JBoss messaging,具体原因还待日后研究,只能说时间和精力有限啊。。。
deployment.xml
<jbossesb-deployment>
<depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_esb</depends>
<depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_gw</depends>
</jbossesb-deployment>
上面说过两种情况你会用到这个东西,esb部署上来需要使用到QUEUE或Topic,也就是说QUEUE这些东西是需要在程序部署上来之前就创建好。我感觉这个只是说明一下顺序,而创建工作是jbm-queue-service.xml这个配置文件中做的事情。