JBoss ESB学习笔记3第二个ESB应用Hello World ActionWord文件下载.docx
《JBoss ESB学习笔记3第二个ESB应用Hello World ActionWord文件下载.docx》由会员分享,可在线阅读,更多相关《JBoss ESB学习笔记3第二个ESB应用Hello World ActionWord文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
![JBoss ESB学习笔记3第二个ESB应用Hello World ActionWord文件下载.docx](https://file1.bdocx.com/fileroot1/2023-2/2/91bae22e-918f-4f68-bdca-737d142961fb/91bae22e-918f-4f68-bdca-737d142961fb1.gif)
service=ServerPeer
7<
/depends>
8<
depends>
service=PostOffice<
9<
/mbean>
10<
11name="
service=Queue,name=helloworldEsb"
12xmbean-dd="
13<
14<
15<
16<
17<
18name="
service=Queue,name=helloworldResponse"
19xmbean-dd="
20<
21<
22<
23<
24<
/server>
3.2定义Provider
这里将定义一个JMSProvider,同时定义两个消息通道,一个用于监听客户端发来的消息,另一个用作ESB消息通道。
内容如下:
25<
jms-providerconnection-factory="
ConnectionFactory"
name="
JBossMQ"
26<
jms-busbusid="
helloworldGwChanel"
27<
jms-message-filterdest-name="
queue/helloworldRequest"
28dest-type="
QUEUE"
/>
29<
/jms-bus>
30<
helloworldEsbChanel"
31<
queue/helloworldEsb"
32dest-type="
33<
34<
/jms-provider>
3.3定义Service
35<
servicecategory="
HelloWorld"
description="
HelloWorld"
HelloWorldService"
36<
listeners/>
37<
actions/
38<
/service>
3.4定义Listener
这里定义两个listener,分别用于监听客户端消息和ESB内部消息。
其中,前者用于监听客户端消息,因此需要将其is-gateway属性设置为true。
39<
jms-listenerbusidref="
is-gateway="
true"
40name="
helloworldJMSListener"
41<
helloworldEsbListener"
3.5定义Action类
这里仍然使用自定义的action类,因此需要扩展AbstractActionLifecycle类。
类的全部代码如下:
Java代码
42/***********************************************************************
43*<
p>
ProjectName:
helloworldaction<
/p>
44*<
FileName:
com.thu.afa.esb.jbossesb.action.HelloWorldAction.java<
45*<
Copyright:
Copyright(c)2010<
46*<
Company:
<
ahref="
"
<
/a>
47***********************************************************************/
48packagecom.thu.afa.esb.jbossesb.action;
49
50importorg.jboss.soa.esb.actions.AbstractActionLifecycle;
51importorg.jboss.soa.esb.helpers.ConfigTree;
52importorg.jboss.soa.esb.message.Body;
53importorg.jboss.soa.esb.message.Message;
54
55/**
56*<
ClassName:
HelloWorldAction<
57*<
Description:
58*@authorAfa
59*@date2010-9-7
60*@version1.0
61*/
62publicclassHelloWorldActionextendsAbstractActionLifecycle
63{
64protectedConfigTreeconfigTree;
65
66publicHelloWorldAction(ConfigTreeconfigTree)
67{
68this.configTree=configTree;
69}
70
71publicMessagenoOperation(Messagemessage)throwsException
72{
73returnmessage;
74}
75
76publicMessageprintMessage(Messagemessage)throwsException
77{
78System.out.println("
MessageBody:
"
+message.getBody().get().toString());
79
80returnmessage;
81}
82
83publicMessageplayWithMessage(Messagemessage)throwsException
84{
85Bodybody=message.getBody();
86Stringcontent=body.get().toString();
87StringBufferbuffer=newStringBuffer();
88buffer.append("
Before------------------"
);
89buffer.append(content);
90buffer.append("
After-------------------"
91body.add(buffer.toString());
92
93returnmessage;
94}
95
96publicvoidexceptionHandler(Messagemessage,Throwableexception)
97{
98System.out.println("
!
ERROR!
99System.out.println(exception.getMessage());
100System.out.println("
ForMessage:
101System.out.println(message.getBody().get());
102}
103}
类方法说明:
printMessage方法用于在控制台打印输出消息的内容,playWithMessage方法用于处理消息,而exceptionHandler则是异常处理方法。
3.6配置Action
由于使用了自定义的action类,因此在说明action配置之前介绍了action类的定义。
下面将说明action的配置。
104<
actionsmep="
OneWay"
105<
actionlass="
com.thu.afa.esb.jbossesb.action.HelloWorldAction"
106name="
printAction"
process="
printMessage"
107<
propertyname="
exceptionMethod"
value="
exceptionHandler"
108<
/action>
109<
110name="
playAction"
playWithMessage"
111<
112<
113<
actionclass="
org.jboss.soa.esb.actions.Notifier"
notificationAction"
114<
okMethod"
notifyOK"
115<
notification-details"
116<
NotificationListtype="
OK"
117<
targetclass="
NotifyConsole"
118<
NotifyQueues"
119<
messagePropname="
helloworld"
QueueNotification"
120<
queuejndiName="
queue/helloworldResponse"
121<
/target>
122<
/NotificationList>
123<
/property>
124<
125<
/actions>
配置说明:
这里定义了三个action,当有消息到来时,所有的action将会顺序执行。
即当接收到客户端消息时,将首先执行printAction,该action将会调用HelloWorldAction类的printMessage方法打印消息内容。
之后执行第二个action,即playAction,该action将会调用HelloWorldAction类的playWithMessage方法用于处理printAction传递过来的消息(ESB内部消息)。
之后执行第三个action,即notificationAction,这是一个由JBossESB所提供的处理类,从类名可看出该类用于像指定的位置发出通知,这里的通知位置有两个,一个是控制台,由<
指定,另一个是消息队列:
queue/helloworldResponse,即被第二个action处理后的消息将会被发送到该消息队列,客户端或者其他的应用系统可在此读取消息。
3.7配置部署文件
部署依赖文件deployment.xml内容如下:
126<
jbossesb-deployment>
127<
service=Queue,name=helloworldRequest
128<
129<
service=Queue,name=helloworldEsb
130<
131<
service=Queue,name=helloworldResponse
132<
133<
/jbossesb-deployment>
3.8部署ESB
将整个工程导出成一个ESB文件,并保存至JBossESBServer的部署目录下,启动JBossESBServer即可。
4ESB客户端
4.1新建Java工程
这里略去操作过程以及添加所需要的Jar包,具体操作过程可参考第一个ESB实例说明。
4.2发送消息的客户端
134packagecom.thu.afa.esb.jbossesb.client;
135importjava.util.Properties;
136importjavax.jms.Message;
137importjavax.jms.Queue;
138importjavax.jms.QueueConnection;
139importjavax.jms.QueueConnectionFactory;
140importjavax.jms.QueueSender;
141importjavax.jms.QueueSession;
142importjavax.naming.Context;
143importjavax.naming.InitialContext;
144
145publicclassMain{
146privateQueueConnectionconnection;
147privateQueueSessionsession;
148privateQueuequeue;
149publicvoidsetupConnection()throwsException{
150……
151}
152publicvoidstop()throwsException{
153……
154}
155
156publicvoidsendMessage(Stringtext)throwsException{
157……
158}
159
160publicstaticvoidmain(String[]args)throwsException
161{
162Mainmain=newMain();
163main.setupConnection();
164main.sendMessage("
Llu,missyou,afa"
165main.stop();
166}
167}
其中,省略部门代码如下:
168publicvoidsetupConnection()throwsException
169{
170System.out.println("
ConnectionStarting..."
171
172Propertiesproperties=newProperties();
173properties.put(Context.INITIAL_CONTEXT_FACTORY,"
org.jnp.interfaces.NamingContextFactory"
174properties.put(Context.URL_PKG_PREFIXES,"
org.jboss.naming:
org.jnp.interfaces"
175properties.put(Context.PROVIDER_URL,"
jnp:
//127.0.0.1:
1099"
176InitialContextcontext=newInitialContext(properties);
177
178QueueConnectionFactoryfactory=(QueueConnectionFactory)context.lookup("
179connection=factory.createQueueConnection();
180queue=(Queue)context.lookup("
181session=connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
182connection.start();
183
184System.out.println("
ConnectionStarted"
185}
186publicvoidstop()throwsException
187{
188if(connection!
=null)connection.stop();
189if(session!
=null)session.close();
190if(connection!
=null)connection.close();
191}
192
193publicvoidsendMessage(Stringtext)throwsException
194{
195QueueSendersender=session.createSender(queue);
196Messagemessage=session.createTextMessage(text);
197sender.send(message);
198sender.close();
199}
运行程序将会在ESB服务器的控制台看到如下图所示输出信息,其中第一行即是printAction打印输出的来自客户端的消息。
第二行显示的是经过playAction处理后的消息,由notificationAction指向控制台的输出通知。
4.3接收消息的客户端
200packagecom.thu.afa.esb.jbossesb.client;
201importjava.util.Properties;
202importjavax.jms.Message;
203importjavax.jms.Queue;
204importjavax.jms.QueueConnection;
205importjavax.jms.QueueConnectionFactory;
206importjavax.jms.QueueSender;
207importjavax.jms.QueueSession;
208importjavax.naming.Context;
209importjavax.naming.InitialContext;
210
211publicclass