实验6.消息驱动Bean 实验内容 在本实验中将学习编写消息驱动Bean,编写消息发送程序,配置消息服务器,测试消 息的发送和接收。 实验目的 ◆掌握消息驱动Bean的编写。 ◆掌握消息发送程序的编写。 掌握消息服务器的配置。 ◆ 掌握消息发送和接收的测试。 实验介绍 本实验首先创建EB工程,其次创建和部署消息驱动Bean,接着创建消息发送程序, 然后配置消息服务器,包括消息目的和消息工厂,最后测试消息的发送和接收。 环境要求 服务器:JBoss6.0 集成开发环境:MyEclipse8.5 MyEclipse8.6 实验指导 步臻1:创建EJB工程myMDB l.在主菜单中选择【New】→【EJBProject】.,出现New EJB Project对话框 2.在New EIB Proiect对话框中,Proiect name文木框中输入mwDB.T2EE Specification Level项选中Java EE5.O-EJB3,具体如下图所示,点击【Finish】按钮
实验 6. 消息驱动 Bean 实验内容 在本实验中将学习编写消息驱动 Bean,编写消息发送程序,配置消息服务器,测试消 息的发送和接收。 实验目的 ◆ 掌握消息驱动 Bean 的编写。 ◆ 掌握消息发送程序的编写。 ◆ 掌握消息服务器的配置。 ◆ 掌握消息发送和接收的测试。 实验介绍 本实验首先创建 EJB 工程,其次创建和部署消息驱动 Bean,接着创建消息发送程序, 然后配置消息服务器,包括消息目的和消息工厂,最后测试消息的发送和接收。 环境要求 服务器:JBoss6.0 集成开发环境:MyEclipse 8.5/MyEclipse 8.6 实验指导 步骤 1:创建 EJB 工程 myMDB 1. 在主菜单中选择【New】→【EJB Project】,出现 New EJB Project 对话框。 2. 在 New EJB Project 对话框中 ,Project Name 文 本 框中 输 入 myMDB,J2EE Specification Level 项选中 Java EE5.0-EJB3,具体如下图所示,点击【Finish】按钮
®New EJB Project 日回☒ Create an EJB Project Create an EJB project in the workspace or an external location EJB Proiect Details Proiect Nane nvDB Location ☑Use default1 ocation Direetory D:\myapp\MyEclipse 6.0\vorkspace\myDB Browse.. Source folder sre Java EE 5.0-EJB3 1.4-EJB2 OJ2EE 1.3-EJBI 1品总 ⑦ 〈Back Hext inih☐cncl☐ 图6-1 步骤2:创建消息驱动Bean L.在主菜单中选择【New】→【EJB3 Message Driven Bean】,出现NewEJB3 Message Driven Bean对话框, 2.在New EJB3 Message Driven Bean对话框中,Package文本框中输入ejbBeans,Name 文本框中输入MyMDB,.Destination Type项选中Queue,,具体如下图所示,点击【Finish】 按钮
图 6-1 步骤 2:创建消息驱动 Bean 1. 在主菜单中选择【New】→【EJB3 Message Driven Bean】,出现 New EJB3 Message Driven Bean 对话框。 2. 在 New EJB3 Message Driven Bean 对话框中,Package 文本框中输入 ejbBeans, Name 文本框中输入 MyMDB,Destination Type 项选中 Queue,具体如下图所示,点击【Finish】 按钮
New EJB3 essage Driven Bean 回☒ Message Driven Bean Create a new EJB3 nessage driven bean Source folder nyllDB/sre Brovse... ejbBeans Nane: MyMDB Destination Type:OQueue OTopic Superclass java.lang.Object Brow经. Interfaces add.. ⊙ inih☐Cancel☐ 图6-2 3.MyMDB类自动形成代码如下: package ejbBeans; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.ims.MessageListener; eMessageDriven(mappedName-"jms/MyMDB",activationconfig - (ActivationconfigProperty(propertyName-"destinationType" propertyvalue="javax.jms.Queue"), eActivationConfigProperty(propertyName="destination", propertyvalue="ims/MyMDB"), rtyName="acknowledgeMode" propertyvalue="Auto-acknowledge") ) public class MyMDB implements MessageListener public void onMessage(Message arg0)(
图 6-2 3. MyMDB类自动形成代码如下: package ejbBeans; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.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") }) public class MyMDB implements MessageListener { public void onMessage(Message arg0) {
/TODO Auto-generated method stub 注意:以上代码中声明的这个消息驱动Bean使用的消息目的是“jms/MyMDB”。ationConfig 声明消息的确认模式和消息目的类型(队列)。 4.在onMessage方法中漆加对消息处理的代码 这里假设接收的消息是TextMessage类型、object类型、Map类型、Stream类型,接 收到消息之后把消息输出到控制台。 修政onMessage方法,类MyMDB完整代码如下: package cn.edu.jms.impl; import java.io.ByteArrayoutputstream; import javax.ejb.ActivationConfigProperty import javax.ejb.MessageDriven; import javax.jms.BytesMessage; import javax.jms.MapMessage import s.Message import javax.jms.MessageListener. import iavax.ims.obiectMessage: import iavax.ims.StreamMessage import javax.jms.TextMessage import cn.edu.jms.bean.Man; eMessageDriven(activationconfig propertyvalue="javax.jms.Queue") eActivationconfigProperty(propertyName="destination", propertyvalue="ims/MyMDB1"). @ActivationconfigProperty(propertyName="acknowledgeMode", propertyValue="Auto-acknowledge") public class MyMDB implements MessageListener public void onMessage(Message msg)( try if (msg instanceof TextMessage)( TextMessage tmsg (TextMessage)msg String content tmsg.getText () System.out.printin(content);
// TODO Auto-generated method stub } } 注意:以上代码中声明的这个消息驱动 Bean 使用的消息目的是“jms/MyMDB”。ationConfig 声明消息的确认模式和消息目的类型(队列)。 4.在 onMessage 方法中添加对消息处理的代码。 这里假设接收的消息是 TextMessage 类型、Object 类型、Map 类型、Stream 类型,接 收到消息之后把消息输出到控制台。 修改 onMessage 方法,类 MyMDB 完整代码如下: package cn.edu.jms.impl; import java.io.ByteArrayOutputStream; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.BytesMessage; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.ObjectMessage; import javax.jms.StreamMessage; import javax.jms.TextMessage; import cn.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") }) public class MyMDB implements MessageListener { public void onMessage(Message msg) { try { if (msg instanceof TextMessage) { TextMessage tmsg = (TextMessage) msg; String content = tmsg.getText(); System.out.println(content);
lelse if(msg instanceof obiectMessage) ObjectMessage omsg-(ObjectMessage)msg: man (Man)omsg.getobject() String content man.getName()+ ”家住” man.getAddress () System.out.printin(content): lelse if (msg instanceof MapMessage) MapMessage map-(MapMessage)msg string content-map.getst ing ("nol") system.out.println(content); lelse if(msg instanceof BvtesMessage) BytesMessage bmsa (BytesMessage)msg ByteArrayoutputstream bytestream byte[]buffer new byte[256]; int length 0: while ((length bmsg.readBytes(buffer))!-1){ bytestream.write(buffer,0,length); content new String(bytestream.toByteArray()); bytestream.close(); System.out.println(content): )else if(mag instanceof StreamMessage) essage smsg (StreamMessage)msg; string content smsg.readstring() System.out.println(content); catch (Exception e)[ e.printstackTrace() 1 在项目上建立一个bean,名称为Man,类Man在包cn.edu.jms,bean下,内容如 package cn.edu.ims.bean; import java.io.Serializable; public class Man implements serializable( private static final long serialversionUID -1789733418716736359L:
}else if(msg instanceof ObjectMessage){ ObjectMessage omsg = (ObjectMessage) msg; Man man = (Man) omsg.getObject(); String content = man.getName()+ " 家 住 "+ man.getAddress(); System.out.println(content); }else if(msg instanceof MapMessage){ MapMessage map = (MapMessage) msg; String content = map.getString("no1"); System.out.println(content); }else if(msg instanceof BytesMessage){ BytesMessage bmsg = (BytesMessage) msg; ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); byte[] buffer = new byte[256]; int length = 0; while ((length = bmsg.readBytes(buffer)) != -1) { byteStream.write(buffer, 0, length); } String content = new String(byteStream.toByteArray()); byteStream.close(); System.out.println(content); }else if(msg instanceof StreamMessage){ StreamMessage smsg = (StreamMessage) msg; String content = smsg.readString(); System.out.println(content); } } catch (Exception e){ e.printStackTrace(); } } } 在项目上建立一个 bean,名称为 Man,类 Man 在包 cn.edu.jms.bean 下,内容如 下: package cn.edu.jms.bean; import java.io.Serializable; public class Man implements Serializable{ private static final long serialVersionUID = -1789733418716736359L;