JBoss ESB学习笔记12第十一个ESB应用Spring Hello World.docx
《JBoss ESB学习笔记12第十一个ESB应用Spring Hello World.docx》由会员分享,可在线阅读,更多相关《JBoss ESB学习笔记12第十一个ESB应用Spring Hello World.docx(11页珍藏版)》请在冰豆网上搜索。
JBossESB学习笔记12第十一个ESB应用SpringHelloWorld
JBossESB学习笔记12——第十一个ESB应用SpringHelloWorld
续上篇介绍了第十个ESB应用,本文介绍第十一个ESB应用——SpringHelloWorld。
1概述
本实例主要演示了基于spring的action调用,这里需要引用spring相关的jar包,这些jar包都可以在所下载的jbossesb中找到。
2新建ESB工程
新建ESB工程,在jbossesb-server-4.7中找到以下两个jar包:
jbossesb-spring.jar和spring-2.5.6.SEC01.jar,并将这两个jar包复制到esbcontent/lib目录下,同时添加到项目的classpath。
至于这两个jar包的具体位置,不记得了,可以直接搜索找到。
3ESB配置
3.1创建消息队列
Xml代码
1
xmlversion="1.0"encoding="UTF-8"?
>
2
3service=Queue,name=springhelloworldRequest"xmbean-dd="xmdesc/Queue-xmbean.xml">
4
5jboss.messaging:
service=ServerPeer
6
7jboss.messaging:
service=PostOffice
8
9service=Queue,name=springhelloworldResponse"xmbean-dd="xmdesc/Queue-xmbean.xml">
10
11jboss.messaging:
service=ServerPeer
12
13jboss.messaging:
service=PostOffice
14
15service=Queue,name=springhelloworldEsb"xmbean-dd="xmdesc/Queue-xmbean.xml">
16
17jboss.messaging:
service=ServerPeer
18
19jboss.messaging:
service=PostOffice
20
21
3.2定义Provider
这里将定义一个JMSProvider,并定义2个消息通道,内容如下:
Xml代码
22
23
2425dest-type="QUEUE"/>
26
27
2829dest-type="QUEUE"/>
30
31
3.3定义Service
Xml代码
3233World"name="SpringHelloWorldService">
34
35
36
37
38
3.4定义Listener
Xml代码
39
4041name="gwListener"/>
42
43
3.5定义JavaBean
Java代码
44/***********************************************************************
45*
ProjectName:
springhelloworld
46*
FileName:
com.thu.afa.esb.jbossesb.action.SaySomething.java
47*
Copyright:
Copyright(c)2010
48*
Company:
49***********************************************************************/
50packagecom.thu.afa.esb.jbossesb.action;
51
52/**
53*
ClassName:
SaySomething
54*
Description:
55*@authorAfa
56*@date2010-9-16
57*@version1.0
58*/
59publicclassSaySomething
60{
61privateStringgreeting;
62
63publicStringgetGreeting()
64{
65returngreeting;
66}
67
68publicvoidsetGreeting(Stringgreeting)
69{
70this.greeting=greeting;
71}
72
73}
说明:
这是一个普通的JavaBean,为后面验证spring在ESB中的IOC功能而引入。
3.6定义Action
Java代码
74/***********************************************************************
75*
ProjectName:
springhelloworld
76*
FileName:
com.thu.afa.esb.jbossesb.action.MySpringEnabledAction.java
77*
Copyright:
Copyright(c)2010
78*
Company:
79***********************************************************************/
80packagecom.thu.afa.esb.jbossesb.action;
81
82importorg.jboss.soa.esb.actions.AbstractSpringAction;
83importorg.jboss.soa.esb.helpers.ConfigTree;
84importorg.jboss.soa.esb.message.Body;
85importorg.jboss.soa.esb.message.Message;
86
87/**
88*
ClassName:
MySpringEnabledAction
89*
Description:
90*@authorAfa
91*@date2010-9-16
92*@version1.0
93*/
94publicclassMySpringEnabledActionextendsAbstractSpringAction
95{
96@SuppressWarnings({"deprecation"})
97publicMySpringEnabledAction(finalConfigTreeconfigTree)
98{
99this.configTree=configTree;
100}
101
102publicMessagedisplayMessage(Messagemessage)throwsException
103{
104System.out.println("Body:
"+message.getBody().get());
105returnmessage;
106}
107
108publicMessagesayHelloSpring(Messagemessage)throwsException
109{
110SaySomethingsaySomething=(SaySomething)getBeanFactory().getBean("saySomething");
111Bodybody=message.getBody();
112Stringcontents=(String)message.getBody().get();
113StringBufferbuffer=newStringBuffer();
114buffer.append(contents+"\n");
115buffer.append(saySomething.getGreeting());
116body.add(buffer.toString());
117
118returnmessage;
119}
120}
注意:
这里的action扩展的是AbstractSpringAction类,而不是AbstractActionLifecycle。
3.7Spring配置
在src目录下创建spring配置文件:
spring-context.xml,内容如下:
Xml代码
121
xmlversion="1.0"encoding="UTF-8"?
>
122//www.springframework.org/schema/beans"
123xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
124xsi:
schemaLocation="http:
//www.springframework.org/schema/beansttp:
//www.springframework.org/schema/beans/spring-beans-2.0.xsd">
125126class="com.thu.afa.esb.jbossesb.action.SaySomething">
127
128
129
经常跟Spring打交道的朋友看到这里应该感到很亲切了,这里的配置跟平时的没什么分别。
想必大家也能猜到,这里的配置是利用Spring的依赖注入功能,在程序中获取greeting属性的值。
3.8配置Action
Xml代码
130
131132class="com.thu.afa.esb.jbossesb.action.MySpringEnabledAction"
133process="sayHelloSpring,displayMessage">
134
135
136
137
说明:
这里的springContextXml属性指明了spring配置文件的位置。
消息处理分发是sayHelloSpring和displayMessage,按顺序依次执行。
首先执行sayHelloSpring方法,往消息主体中添加SaySomething的greeting属性的值,而该属性值是通过上面的spring配置文件注入的。
后面的测试结果会证明这一点。
3.9配置部署文件
部署依赖文件deployment.xml内容如下:
Xml代码
138
139jboss.esb:
deployment=spring.esb
140jboss.esb.quickstart.destination:
service=Queue,name=springhelloworldRequest
141
142jboss.esb.quickstart.destination:
service=Queue,name=springhelloworldResponse
143
144jboss.esb.quickstart.destination:
service=Queue,name=springhelloworldEsb
145
146
3.10部署ESB
将整个工程导出成一个ESB文件,并保存至JBossESBServer的部署目录下,启动JBossESBServer即可。
4ESB客户端
4.1新建Java工程
这里略去操作过程以及添加所需要的Jar包,具体操作过程可参考第一个ESB实例说明。
4.2发送消息的客户端
Java代码
147/***********************************************************************
148*
ProjectName:
helloworldclient
149*
FileName:
com.thu.afa.esb.jbossesb.client.SpringHelloWorldClient.java
150*
Copyright:
Copyright(c)2010
151*
Company:
152***********************************************************************/
153packagecom.thu.afa.esb.jbossesb.client;
154
155importjava.util.Properties;
156
157importjavax.jms.ObjectMessage;
158importjavax.jms.Queue;
159importjavax.jms.QueueConnection;
160importjavax.jms.QueueConnectionFactory;
161importjavax.jms.QueueSender;
162importjavax.jms.QueueSession;
163importjavax.naming.Context;
164importjavax.naming.InitialContext;
165
166/**
167*
ClassName:
SpringHelloWorldClient
168*
Description:
169*@authorAfa
170*@date2010-9-16
171*@version1.0
172*/
173publicclassSpringHelloWorldClient
174{
175privateQueueConnectionconnection;
176privateQueueSessionsession;
177privateQueuequeue;
178
179publicvoidsetupConnection()throwsException
180{
181Propertiesproperties=newProperties();
182properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
183properties.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:
org.jnp.interfaces");
184properties.put(Context.PROVIDER_URL,"jnp:
//127.0.0.1:
1099");
185InitialContextcontext=newInitialContext(properties);
186
187QueueConnectionFactoryfactory=(QueueConnectionFactory)context.lookup("ConnectionFactory");
188connection=factory.createQueueConnection();
189queue=(Queue)context.lookup("queue/springhelloworldRequest");
190session=connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
191connection.start();
192
193System.out.println("ConnectionStarted");
194}
195
196publicvoidstop()throwsException
197{
198if(connection!
=null)connection.stop();
199if(session!
=null)session.close();
200if(connection!
=null)connection.close();
201}
202
203publicvoidsendAMessage(Stringtext)throwsException
204{
205QueueSendersender=session.createSender(queue);
206ObjectMessagemessage=session.createObjectMessage(text);
207sender.send(message);
208sender.close();
209}
210
211publicstaticvoidmain(String[]args)throwsException
212{
213SpringHelloWorldClientclient=newSpringHelloWorldClient();
214client.setupConnection();
215client.sendAMessage("Llu,missyou,afa-hello,spring");
216client.stop();
217}
218
219
220}
运行客户端程序即可看到以下输出结果: