JavaEE之消息驱动BeanWord文档格式.docx
《JavaEE之消息驱动BeanWord文档格式.docx》由会员分享,可在线阅读,更多相关《JavaEE之消息驱动BeanWord文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
![JavaEE之消息驱动BeanWord文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/30/e9af7b4c-fd68-472b-ba04-2c5f26b963e5/e9af7b4c-fd68-472b-ba04-2c5f26b963e51.gif)
图6-2
3.MyMDB类自动形成代码如下:
packageejbBeans;
importjavax.ejb.ActivationConfigProperty;
importjavax.ejb.MessageDriven;
importjavax.jms.Message;
importjavax.jms.MessageListener;
@MessageDriven(mappedName="
jms/MyMDB"
activationConfig={
@ActivationConfigProperty(propertyName="
destinationType"
propertyValue="
javax.jms.Queue"
),
destination"
acknowledgeMode"
Auto-acknowledge"
)
})
publicclassMyMDBimplementsMessageListener{
publicvoidonMessage(Messagearg0){
//TODOAuto-generatedmethodstub
}
}
注意:
以上代码中声明的这个消息驱动Bean使用的消息目的是“jms/MyMDB”。
ationConfig声明消息的确认模式和消息目的类型(队列)。
4.在onMessage方法中添加对消息处理的代码。
这里假设接收的消息是TextMessage类型、Object类型、Map类型、Stream类型,接收到消息之后把消息输出到控制台。
修改onMessage方法,类MyMDB完整代码如下:
packagecn.edu.jms.impl;
importjava.io.ByteArrayOutputStream;
importjavax.jms.BytesMessage;
importjavax.jms.MapMessage;
importjavax.jms.ObjectMessage;
importjavax.jms.StreamMessage;
importjavax.jms.TextMessage;
importcn.edu.jms.bean.Man;
@MessageDriven(activationConfig=
{
jms/MyMDB1"
publicvoidonMessage(Messagemsg){
try{
if(msginstanceofTextMessage){
TextMessagetmsg=(TextMessage)msg;
Stringcontent=tmsg.getText();
System.out.println(content);
}elseif(msginstanceofObjectMessage){
ObjectMessageomsg=(ObjectMessage)msg;
Manman=(Man)omsg.getObject();
Stringcontent=man.getName()+"
家住"
+man.getAddress();
}elseif(msginstanceofMapMessage){
MapMessagemap=(MapMessage)msg;
Stringcontent=map.getString("
no1"
);
}elseif(msginstanceofBytesMessage){
BytesMessagebmsg=(BytesMessage)msg;
ByteArrayOutputStreambyteStream=newByteArrayOutputStream();
byte[]buffer=newbyte[256];
intlength=0;
while((length=bmsg.readBytes(buffer))!
=-1){
byteStream.write(buffer,0,length);
Stringcontent=newString(byteStream.toByteArray());
byteStream.close();
}elseif(msginstanceofStreamMessage){
StreamMessagesmsg=(StreamMessage)msg;
Stringcontent=smsg.readString();
}catch(Exceptione){
e.printStackTrace();
在项目上建立一个bean,名称为Man,类Man在包cn.edu.jms.bean下,内容如下:
packagecn.edu.jms.bean;
importjava.io.Serializable;
publicclassManimplementsSerializable{
privatestaticfinallongserialVersionUID=-1789733418716736359L;
privateStringname;
//姓名
privateStringaddress;
//地址
publicMan(Stringname,Stringaddress){
this.name=name;
this.address=address;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
publicStringgetAddress(){
returnaddress;
publicvoidsetAddress(Stringaddress){
5.部署消息驱动Bean
a.如果JBoss没有启动,则启动JBoss。
b.在工具栏点击
部署按钮,出现ProjectDeployments对话框。
图6-3
c.在ProjectDeployments对话框的【Project】下拉列表框中选择“myMDB”。
点击【Add】按钮,出现NewDeployment对话框。
d.在NewDeployment对话框中,【Server】下拉列表框选择WebLogic10.x,Deploytype项选中ExplodedArchive(development),点击【Finish】,回到ProjectDeployments对话框。
点击【OK】即可。
图6-4
e.在ProjectDepolyments对话框中出现Successfullydeployed,表示部署成功。
点击【Browse】可以看到myMDB部署的路径为“%JBOSS_HOME%\server\default\deploy\myMDB”。
图6-5
f.也可以在Servers下看到部署的消息驱动Bean,如下图所示。
图6-6
步骤3:
创建消息发送程序
1.创建Java工程
a.在主菜单中选中【New】【JavaProject】,出现NewJavaProject对话框。
b.在对话框中的Projectname文本框中输入:
myMDBClient。
JRE项选择UsedefaultJRE(Currently‘jdk1.5.0_05’),点击【Next】。
注意:
JRE是系统的JDK,如果前面的实验中没有配置JRE,可以在图中点击Configuredefault…链接,进行默认JRE的配置。
图6-7
c.观察出现的JavaSettings对话框,特别是【Libraries】选项页。
点击【Finish】。
图6-8
2.创建Java类
a.右键点击工程myMDBClient,选择【New】【Class】,出现NewJavaClass对话框。
图6-9
b.在对话框的Package文本框中输入“cn.edu.jms.test”,Name文本框中输入“QueueSender”,并且选中“publicstaticvoidmain(String[]argv)”,然后点击【Finish】。
c.如果出现如下对话框,询问是否进行视图转换,可以选择点击【No】。
图6-10
3.编写消息发送程序QueueSender的代码如下:
packagecn.edu.jms.test;
importjava.util.Properties;
importjavax.jms.Connection;
importjavax.jms.ConnectionFactory;
importjavax.jms.Destination;
importjavax.jms.JMSException;
importjavax.jms.MessageProducer;
importjavax.jms.Queue;
importjavax.jms.Session;
importjavax.naming.Context;
importjavax.naming.InitialContext;
publicclassQueueSender{
publicstaticvoidmain(String[]args){
Connectionconn=null;
Sessionsession=null;
try{
Propertiesprops=newProperties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,"
org.jnp.interfaces.NamingContextFactory"
props.setProperty(Context.PROVIDER_URL,"
localhost:
1099"
props.setProperty(Context.URL_PKG_PREFIXES,"
org.jboss.naming:
org.jnp.interfaces"
InitialContextctx=newInitialContext(props);
ConnectionFactoryfactory=(ConnectionFactory)ctx.lookup("
ConnectionFactory"
conn=factory.createConnection();
session=conn.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destinationdestination=(Queue)ctx.lookup("
MessageProducerproducer=session.createProducer(destination);
//发送文本
TextMessagemsg=session.createTextMessage("
大家好,这是我的一个消息驱动Bean"
producer.send(msg);
//发送Ojbect(对象必须实现序列化,否则等着出错吧)
producer.send(session.createObjectMessage(newMan("
孙悟空"
"
花果山水帘洞"
)));
//发送MapMessage
MapMessagemapmsg=session.createMapMessage();
mapmsg.setObject("
花果山景区。
"
producer.send(mapmsg);
//发送BytesMessage
BytesMessagebmsg=session.createBytesMessage();
bmsg.writeBytes("
我是一个兵,来自老百姓"
.getBytes());
producer.send(bmsg);
//发送StreamMessage
StreamMessagesmsg=session.createStreamMessage();
smsg.writeString("
孙悟空大在取经路上"
producer.send(smsg);
}catch(Exceptione){
e.printStackTrace();
}finally{
session.close();
conn.close();
}catch(JMSExceptione){
由于工程中没有需要的javax.jms包,因此以上代码保存编译时将出现错误。
实际上,上面的程序中不仅需要javax.jms,而且需要%JBOSS_HOME%\client下所有jar文件,下面将导入需要的jar文件。
4.向工程中添加需要的类库。
a.右键点击工程,选择【Properties】,在出现的对话框的左侧点击【JavaBuildPath】,右侧选中【Libraries】页,点击【AddExternalJars】出现NewJavaProject对话框。
图6-22
b.选择%JBOSS_HOME%\client下的所有jar,最后点击【OK】。
图6-23
图6-24
c.类库添加后,在左边的视图中出现如下内容,注意观察添加的Jar包。
步骤4:
配置消息目的和消息工程
1.进入控制台进行配置。
a.如果WebLogic没有启动,启动JBoss服务,通过http:
//localhost:
8080打开JBoss控制台,如图6-25所示,单击AdministratConsole,弹出如图6-26所示窗口。
图6-25
b.在图6-26所示窗口中输入Username及Password,均为admin。
图6-26
c.在图6-27所示窗口中,单击JMSQueue,弹出如图6-28所示窗口。
图6-27
d.在图6-28所示窗口中,单击Addnewresource,弹出如图6-29所示窗口。
图6-28
e.在图6-29所示窗口中,单击Addnewresource,弹出如图6-29所示窗口。
图6-29
f.在图6-30所示窗口中,输入相关参数,具体操作如图6-30所示。
图6-30
图6-31
g.在图6-31所示窗口中添加角色,具体操作如图6-32所示,单击OK按钮,返回到图6-31所示窗口,如图6-33所示。
图6-32
图6-33
h.出现如下配置成功的界面,如图6-34所示。
图6-34
步骤5:
测试消息的发送和接收
1.运行消息发送程序
a.右键点击工程myMDBClient中的QueueSender,选择【Runas】->
【JavaApplication】
2.观察控制台的输出
图6-35
注意观察:
消息驱动Bean接收消息的顺序是否总是与发送消息的顺序一致?
实验总结
这个实验中,在Eclipse+MyEclipse8.5集成开发环境中创建了一个EJB工程,里面有一个消息驱动Bean:
MyMDB;
创建了一个Java工程,里面有一个消息发送者Java类:
QueueSender;
在JBoss服务器中配置了消息服务器,包括消息目的和消息工厂。