服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

ejb 3.0开发指南之消息驱动bean


  消息驱动bean的业务接口已经被定义,对于使用jms来说那就是messagelistener接口,这个接口定义了onmessage方法。
  
  实现类必须使用messagedriven注释。可以实现也可以不实现setmessagedrivencontext和ejbremove方法。
  
  在jboss中,通过connectionconfig指定消息的队列的jndi名称。
  
  @connectionconfig(destinationtype = javax.jms.queue.class, destinationjndiname = "queue/kuaffejb3/sample", durable = true, subscriptionid = "kuaffmessage")
  
  在eclipse中导入本文提供的例子messager。
  
  这个例子从客户端发送一个textmessage,这个bean组件接收到这个消息后,将把这个消息输出到控制台上。
  
  这个例子主要有5个文件:
  
  messager.java:业务组件。
  
  client.java:测试ejb的客户端类。
  
  jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。
  
  build.xml:ant 配置文件,用以编译、发布、测试、清除ejb。
  
  queue-example-service.xml:消息服务,用来测试消息。
  
  下面针对每个文件的内容做一个介绍。
  
  messager.java
  
  package com.kuaff.ejb3.messager;
  
  import org.jboss.ejb3.mdb.connectionconfig;
  import javax.ejb.messagedriven;
  import javax.jms.jmsexception;
  import javax.jms.message;
  import javax.jms.textmessage;
  import javax.jms.messagelistener;
  
  @messagedriven
  @connectionconfig(destinationtype = javax.jms.queue.class, destinationjndiname = "queue/kuaffejb3/sample", durable = true, subscriptionid = "kuaffmessage")
  
  public class messager implements messagelistener
  {
  public void onmessage(message recvmsg)
  {
  system.out.println("接收到的消息:");
  try
  {
  textmessage message = (textmessage)recvmsg;
  system.out.println(message.gettext());
  }
  catch (jmsexception e)
  {
  e.printstacktrace();
  }
  }
  }
  
  这个消息bean很简单,接收到消息后不做什么处理,就是将消息内容输出到控制台上,
  
  client.java
  
  package com.kuaff.ejb3.messager;
  
  import javax.jms.queue;
  import javax.jms.queueconnection;
  import javax.jms.queueconnectionfactory;
  import javax.jms.queuesender;
  import javax.jms.queuesession;
  import javax.jms.textmessage;
  import javax.naming.initialcontext;
  
  public class client
  {
  public static void main(string[] args) throws exception
  {
  queueconnection cnn = null;
  queuesender sender = null;
  queuesession session = null;
  initialcontext ctx = new initialcontext();
  queue queue = (queue) ctx.lookup("queue/kuaffejb3/sample");
  queueconnectionfactory factory = (queueconnectionfactory) ctx.lookup("connectionfactory");
  cnn = factory.createqueueconnection();
  session = cnn.createqueuesession(false, queuesession.auto_acknowledge);
  textmessage msg = session.createtextmessage("江湖快报:玉树临风风流倜傥的公子小巢又出现了。");
  sender = session.createsender(queue);
  sender.send(msg);
  system.out.println("消息已经发出");
  }
  }
  
  这个客户端将发送一个文本消息到队列中。
  
  queue-example-service.xml
  <?xml version="1.0" encoding="utf-8"?>
  <server>
  <mbean code="org.jboss.mq.server.jmx.queue" name="jboss.mq.destination:service=queue,name=kuaffmessage">
  <attribute name="jndiname">queue/kuaffejb3/sample</attribute>
  <depends optional-attribute-name="destinationmanager">jboss.mq:service=destinationmanager</depends>
  </mbean>
  </server>
  
  配置这个程序所需的消息服务。
  
  请运行{$jboss_home}/bin目录下的run.bat: run ?call,启动jboss。
  
  在eclipse的ant视图中执行ejbjar target。或者在命令行下,进入到此工程目录下,执行ant ejbjar,将编译打包发布此ejb。
  
  在eclipse的ant视图中执行run target。或者在命令行下,进入到此工程目录下,执行ant run,测试这个ejb。

扫描关注微信公众号