JavaEE之消息驱动Bean.docx

上传人:b****6 文档编号:5817936 上传时间:2023-01-01 格式:DOCX 页数:23 大小:1.22MB
下载 相关 举报
JavaEE之消息驱动Bean.docx_第1页
第1页 / 共23页
JavaEE之消息驱动Bean.docx_第2页
第2页 / 共23页
JavaEE之消息驱动Bean.docx_第3页
第3页 / 共23页
JavaEE之消息驱动Bean.docx_第4页
第4页 / 共23页
JavaEE之消息驱动Bean.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

JavaEE之消息驱动Bean.docx

《JavaEE之消息驱动Bean.docx》由会员分享,可在线阅读,更多相关《JavaEE之消息驱动Bean.docx(23页珍藏版)》请在冰豆网上搜索。

JavaEE之消息驱动Bean.docx

JavaEE之消息驱动Bean

实验6.消息驱动Bean

实验内容

在本实验中将学习编写消息驱动Bean,编写消息发送程序,配置消息服务器,测试消息的发送和接收。

实验目的

◆掌握消息驱动Bean的编写。

◆掌握消息发送程序的编写。

◆掌握消息服务器的配置。

◆掌握消息发送和接收的测试。

实验介绍

本实验首先创建EJB工程,其次创建和部署消息驱动Bean,接着创建消息发送程序,然后配置消息服务器,包括消息目的和消息工厂,最后测试消息的发送和接收。

环境要求

服务器:

JBoss6.0

集成开发环境:

MyEclipse8.5/MyEclipse8.6

实验指导

步骤1:

创建EJB工程myMDB

1.在主菜单中选择【New】【EJBProject】,出现NewEJBProject对话框。

2.在NewEJBProject对话框中,ProjectName文本框中输入myMDB,J2EESpecificationLevel项选中JavaEE5.0-EJB3,具体如下图所示,点击【Finish】按钮。

图6-1

步骤2:

创建消息驱动Bean

1.在主菜单中选择【New】【EJB3MessageDrivenBean】,出现NewEJB3MessageDrivenBean对话框。

2.在NewEJB3MessageDrivenBean对话框中,Package文本框中输入ejbBeans,Name文本框中输入MyMDB,DestinationType项选中Queue,具体如下图所示,点击【Finish】按钮。

图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"),

@ActivationConfigProperty(propertyName="destination",

propertyValue="jms/MyMDB"),

@ActivationConfigProperty(propertyName="acknowledgeMode",

propertyValue="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.ejb.ActivationConfigProperty;

importjavax.ejb.MessageDriven;

importjavax.jms.BytesMessage;

importjavax.jms.MapMessage;

importjavax.jms.Message;

importjavax.jms.MessageListener;

importjavax.jms.ObjectMessage;

importjavax.jms.StreamMessage;

importjavax.jms.TextMessage;

importcn.edu.jms.bean.Man;

@MessageDriven(activationConfig=

{

@ActivationConfigProperty(propertyName="destinationType",

propertyValue="javax.jms.Queue"),

@ActivationConfigProperty(propertyName="destination",

propertyValue="jms/MyMDB1"),

@ActivationConfigProperty(propertyName="acknowledgeMode",

propertyValue="Auto-acknowledge")

})

publicclassMyMDBimplementsMessageListener{

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();

System.out.println(content);

}elseif(msginstanceofMapMessage){

MapMessagemap=(MapMessage)msg;

Stringcontent=map.getString("no1");

System.out.println(content);

}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();

System.out.println(content);

}elseif(msginstanceofStreamMessage){

StreamMessagesmsg=(StreamMessage)msg;

Stringcontent=smsg.readString();

System.out.println(content);

}

}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){

this.name=name;

}

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

}

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.BytesMessage;

importjavax.jms.Connection;

importjavax.jms.ConnectionFactory;

importjavax.jms.Destination;

importjavax.jms.JMSException;

importjavax.jms.MapMessage;

importjavax.jms.MessageProducer;

importjavax.jms.Queue;

importjavax.jms.Session;

importjavax.jms.StreamMessage;

importjavax.jms.TextMessage;

importjavax.naming.Context;

importjavax.naming.InitialContext;

importcn.edu.jms.bean.Man;

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("jms/MyMDB1");

MessageProducerproducer=session.createProducer(destination);

//发送文本

TextMessagemsg=session.createTextMessage("大家好,这是我的一个消息驱动Bean");

producer.send(msg);

//发送Ojbect(对象必须实现序列化,否则等着出错吧)

producer.send(session.createObjectMessage(newMan("孙悟空","花果山水帘洞")));

//发送MapMessage

MapMessagemapmsg=session.createMapMessage();

mapmsg.setObject("no1","花果山景区。

");

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{

try{

session.close();

conn.close();

}catch(JMSExceptione){

e.printStackTrace();

}

}

}

}

注意:

由于工程中没有需要的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服务器中配置了消息服务器,包括消息目的和消息工厂。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1