EJB---JMS---jBoss4

一、服务端开发,建立EJb工程, 创建类MesssageDMB.java

@MessageDriven(activationConfig = {
  @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
  @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/myqueue") })
public class MesssageDMB implements MessageListener {

 public void onMessage(Message msg) {
  TextMessage textMsg = (TextMessage) msg;
  try {
   System.out.println("收到消息:" + textMsg.getText());
  } catch (JMSException e) {
   System.out.println("获取消息内容失败!");
   e.printStackTrace();
  }
 }

}

二、客户端开发

创建project工程,导入jboss的client的jar包。实现客户端类如下:

public class JmsClient {
 public static void main(String[] args) {
  try {
   InitialContext context = new InitialContext();

   //通过JNDI上下文获取QueueConnectionFactory
   QueueConnectionFactory factory = (QueueConnectionFactory)context.lookup("ConnectionFactory");
   System.out.println("1");
   
   //创建queueConnection
   QueueConnection connection = factory.createQueueConnection();
   System.out.println("1");
   //创建Session
   QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
   
   //创建目标队列
   Queue queue = (Queue)context.lookup("jms/myqueue");
   
   //创建文本消息
   TextMessage msg = session.createTextMessage("hello !!!!!!!!!!!!!");
   
   //创建发送者
   MessageProducer producer = (MessageProducer) session.createProducer(queue);
   
   //发送消息
   producer.send(msg);
   
   session.close();
   connection.close();
   context.close();
   producer.close();
   
  } catch (Exception e) {
   System.out.println("获取上下文失败");
   e.printStackTrace();
  }
  
 }
}

三.创建 jndi.properties,放在客户端工程的src下。内容如下

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost

四、在jboss服务器中手动配置queue的jndi

在目录如D:\jboss-4.2.1.GA\server\default\deploy中,新建文件jms-service.xml (前缀可以随便写,后面一定要是 -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=myqueue">
 <attribute name="JNDIName">jms/myqueue</attribute>
    <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
  </mbean>
</server>

此实现正对JBoss4.2 验证过是能运行成功的。JBoss5.0 不能正常运行。lookup("connectionFactory") 执行不下去。没找到原因。

猜你喜欢

转载自zyzhangyan1986.iteye.com/blog/2068689
今日推荐