JBossESB教程(三)——别人不会对你说的,第一个实例
2013-10-06 21:48
330 查看
前言
发现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
在JBossESB的doc里面的Getting Started的最后面列出了一个学习JBossESB的学习建议。网上的JBossESB学习笔记大概就是按照这个顺序来进行的,有一些不同,但不碍事。在最初,我其实不太建议自己去敲,因为你还很不熟悉,直接运行它自己带的例子就好。
运行需要安装Ant,Ant的安装很简单。提到Ant,不得不说一下。JBossESB是用的Ant构建的,所以最近和Ant打的交道特别多,最初感觉Ant没啥,现在感觉里面需要学习的东西很多,最近没事学习一下这个小东西。前面的博客对这个对这个进行过说明,这里不再重复。
首先启动服务器,这里在JBossESB_Home/bin下的run.bat,不过建议新建一个start.bat,然后在里面写上run -b 0.0.0.0,这样写,就可以监听所有的IP了,不然,你的服务只能用localhost或者127.0.0.1访问(JBoss应用服务器首页也是这样的)。
命令行下进入JBossESB_HOME/sample/quickstart/helloworld,然后运行ant deploy,成功后,再执行ant runtest;还可以执行ant sendesb执行,两个执行的结果是一样的,但原理却差好多。
helloworld配置解析
action的代码很简单,所以就不做什么解析了,列一下代码得了,需要说的就是配置以及执行流程。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
在这个里面有provider、service、listener、action。provider是对外提供的一个入口,不论是ESB(aware)还是非ESB(aware)都可以通过这个进入。
listener是对provider进行监听的一个东西。通过它能够获取到发到provider上的东西。
service是对外发布的服务,我感觉是对action的一个整理。
action是一个又一个的动作。可大可小(粒度),就看你是怎样设计的。
看完这些基本的概念,那么现在来看一下官方提供的权威例子吧。
<?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>
大家发现了么,在一个jms-provider里面使用了两个jms-bus,而且除了名字其它都一样。但监听它们的listoner配置是不一样的,那就是is-gateway="true",这个区别了,is-gateway的默认值为false。被设置这个属性为true的才能监听来自非ESB(Unaware)发过来的消息,否则只能监听ESB消息(Aware,采用ServiceInvoker调用)。
下面,咱们来看一下官方文档中给的一个helloworld中给出的执行流程的一个图:
有了这一张原理图,是不是好些了呢?那么我们继续来看后几个吧。
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。
下面是jbmq-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,具体原因还待日后研究,只能说时间和精力有限啊。。。
那么剩下的就是对QUEUE的定义了,privide中用到的QUEUE和Topic都需要在这里面进行一下定义。使用方法就照葫芦画一个瓢吧。
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这个配置文件中做的事情。
结语
至此,helloworld中用到的配置文件就说完了。我是看完官方给的所有PDF后才开始看这些源码的,再加上JBossESB学习笔记系列的一些简单说明,现在感觉看例子什么的比之前好多了,但是还是有一些数据库之类的配置真心让人感觉很不爽,而且还有一些概念目前没有时间和精力来细研究,这块的学习继续进行~~后面陆续会有一些相对综合的文章。下篇想就Notifier、Router、Wiretap说一下自己的看法~
相关文章推荐
- SpringBoot 入门教程实例详解(一) 开发第一个SpringBoot应用程序实例
- MVC5与EF6 Code First 第一个入门完整实例教程
- Highmaps网页图表教程之Highmaps第一个实例与图表构成
- 在Linux上安装Python的Flask框架和创建第一个app实例的教程
- 一步一步图示开发第一个Android项目并运行 看图学Android---Android 开发实例教程二
- WEB标准教程第9天:第一个CSS布局实例
- MVC5与EF6 Code First 第一个入门完整实例教程
- DirectX5.0最新游戏编程指南 DirectDraw教程篇 二、第一个DirectDraw实例
- Highmaps网页图表教程之Highmaps第一个实例与图表构成
- Thrift教程初级篇——thrift安装环境变量配置第一个实例
- MVC5与EF6 Code First 第一个入门完整实例教程
- WEB2.0标准教程:第一个CSS布局实例
- Kafka 教程(一) 第一个实例
- Highmaps网页图表教程之Highmaps第一个实例与图表构成
- Javascript实例教程:querySelector()方法接受一个CSS查询并返回匹配模式的第一个子孙元素,如果没有匹配的元素则返回null。
- web开发实例教程:使用autofocus属性定位第一个表单域元素
- Highmaps网页图表教程之Highmaps第一个实例与图表构成
- PHP的curl_init采集网页数据 实例教程
- Windows 8 Store应用开发XAML实例教程系列汇总
- Selenium 2.0 WebDriver 自动化测试 使用教程 实例教程 API快速参考