消息驱动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。
闽公网安备 35060202000074号