EJB 3.0开发指南之消息驱动Bean

北京进近CCA

北京进近CCA

2016-01-29 12:55

EJB 3.0开发指南之消息驱动Bean,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。
展开更多 50%)
分享

猜你喜欢

EJB 3.0开发指南之消息驱动Bean

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

EJB 3.0 开发指南之实体Bean

Java JAVA基础
EJB 3.0 开发指南之实体Bean

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

EJB 3.0开发指南之依赖注入

Java JAVA基础
EJB 3.0开发指南之依赖注入

EJB3.0开发指南之有状态会话Bean

Java JAVA基础
EJB3.0开发指南之有状态会话Bean

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

EJB 3.0 开发指南之定时服务

Java JAVA基础
EJB 3.0 开发指南之定时服务

EJB3.0开发指南之无状态会话Bean

Java JAVA基础
EJB3.0开发指南之无状态会话Bean

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

.NET对软件安装的冲击

.NET对软件安装的冲击

一个全站系统的数据库设计问题 望大家都来帮帮忙 - PHPchina

一个全站系统的数据库设计问题 望大家都来帮帮忙 - PHPchina
下拉加载更多内容 ↓