当前位置: 首页 > 图文教程 > Java技术 > Java基础 > EJB 3.0开发指南之消息驱动Bean

Java基础
体验Java 1.5中面向(AOP)编程
Java中基于Aspectwerkz的AOP
2004开发技术年度综述之Java世界
JavaBeans程序开发
开发基于Java的图形用户界面
Java加密和数字签名编程
Java应用程序中创建图像
初探Java类加载机制
EJB3.0之实体Bean的继承
javamail收取Hotmail的退信
JavaMail访问Hotmail邮箱
EJB3.0开发之多对多和一对一
EJB 3.0开发指南之多表映射
EJB组件与可重用性的矛盾
J2SE中的序默认序列化
Java操作文本文件的方法
Java多线程编程之限制优先级
EJB 3.0 开发指南之定时服务
J2SE中的序列化之继承
J2SE中的序列化的认识

Java基础 中的 EJB 3.0开发指南之消息驱动Bean


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-29   浏览: 53 ::
收藏到网摘: n/a

  消息驱动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。