实验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;
private String name;/姓名 private String address;/地址 public Man(String name,String address)( this.namename; this.address address: public String getName()( return namer public void setName(String name)( this.namename; public string getAddress()[ return address; public void setAddress(String address)( this.address =address; 5.部署消息驱动Bean a如果Boss没有启动,则启动JBoss。 b在工具栏点击号部署按钮,出现Pmoj8 ctopoy对话框
private String name;//姓名 private String address;//地址 public Man(String name, String address) { this.name = name; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } 5.部署消息驱动 Bean a.如果 JBoss 没有启动,则启动 JBoss。 b. 在工具栏点击 部署按钮,出现 Project Deployments 对话框
Manage Deployments Deploy and un eploy J2EE projects Project nyllDB Server Type Location Add Redeploy Browse 图6.3 c.在Project Deplo nts对话框的【Project】下拉列表框中选择“yDB”。点 击【Add】按钮,出现New Deployment对话框。 d.在New Deployment对话框中,【Server】下拉列表框选择WebL,ogic 10..x,Deploy type项选中Exploded Archive(development),点击【Finish】,回到Project Deployments对话框。点击【OK】即可
图 6-3 c.在 Project Deployments 对话框的【Project】下拉列表框中选择“myMDB”。点 击【Add】按钮,出现 New Deployment 对话框。 d.在 New Deployment 对话框中,【Server】下拉列表框选择 WebLogic 10.x,Deploy type 项选中 Exploded Archive(development),点击【Finish】,回到 Project Deployments 对话框。点击【OK】即可
Project Deploy ments Manage Deployments Deploy and undeploy JEE projects. Prolect myMDB Deplovments server Add JBoss 6.x Exploded D:JavaEEServerjboss-6.0.0.2010091 Remove Redeploy Browse 4 Deplovment Status Successfully deployed. OK 图6.4 e.在Project Depolyments对话框中出现Successfully deployed,.表示部署成功. 点击【Browse 】可以看到 myMDB 部署的路径为 %JBOSS HOME%\serverdefaultdeploy\myMDB. deploy .回x 文件旧编辑旧查看山收流仙工具0帮助山 后退·今·伤D搜索它文件夹田 t地t址@□D:VavaEES5 erverjboss6-.0.0,20100911-M5 serven default deploy 习)转到 文件和文件夹任务 其它位置 52个对象 241K8 一3我的电脑 图6-5 f也可以在Servers下看到部署的消息驱动Bean,如下图所示
图 6-4 e.在 Project Depolyments 对话框中出现 Successfully deployed,表示部署成功。 点击【 Browse 】可以看到 myMDB 部署的路径为 “%JBOSS_HOME%\server\default\deploy\myMDB”。 图 6-5 f.也可以在 Servers 下看到部署的消息驱动 Bean,如下图所示
Problenssk Console we由we5enes 图6-6 步骤3:创建消息发送程序 L,创建Java工程 a在主莱单中选中【New】→【Java Project】,出现New Java Project对话框。 h.在对话框中的Proiect name文本框中输入:myMDBClient。.JRE项选择Use default ire 点击【Next】。注意:JRE是系统的DK 如果前面的实彩 中没有配置jRE,可以在图中点击Configure default.链接,进行默认JRE的配置。 形ew Java Project 口回☒ Create a Java project Create a Javs project in the workspace or in an external location. Project name:myMDBClient Contents Create new project in workspac OCreate project from eistins source ⊙Use default压E (Current1y‘jdx1.5.0_05) Configurs default OUse a project spoeifie JRE! -15 OUse project folder as root for sources and class files Create separate folders for sources and class files Configure defsult orkine sets Add projecs to vorking sets Working set= ext☐Eih☐Cane1 图6-7 c观察出现的Java Settings对话框,特别是【Libraries】选项页。点击【Finish】
图 6-6 步骤 3:创建消息发送程序 1. 创建 Java 工程 a.在主菜单中选中【New】→【Java Project】,出现 New Java Project 对话框。 b.在对话框中的 Project name 文本框中输入:myMDBClient。JRE 项选择 Use default JRE (Currently ‘jdk1.5.0_05’),点击【Next】。注意:JRE 是系统的 JDK,如果前面的实验 中没有配置 JRE,可以在图中点击 Configure default…链接,进行默认 JRE 的配置。 图 6-7 c.观察出现的 Java Settings 对话框,特别是【Libraries】选项页。点击【Finish】
回☒ a build settingr Linkaddisiongl saures use this if you havea folder in the file systen that □ow output older=£or ourge folder 图6-8 2.创建Java类 右键点击工程myMDBClient,.选择【New】→【Clas】,出现New Java Class对 话框 @ Enclosing type: dd Which method stub Inberited abstract metho Do you want to ad lates and default value herd Ensh☐ 图6-9
图 6-8 2. 创建 Java 类 a. 右键点击工程 myMDBClient,选择【New】→【Class】,出现 New Java Class 对 话框。 图 6-9