测试Jboss AS7的Ibm MQ队列服务

来源:互联网 发布:looper软件下载 编辑:程序博客网 时间:2024/05/16 10:34

在上一篇介绍Wildfly上搭建Ibm MQ消息队列服务的时候,笔者已经把详细的配置和测试代码都分享出来了,但是考虑到目前Wildfly的稳定版本还在开发当中,没有正式发布,所以在生产环境下选型Jboss的服务器还得用Jboss最新最稳定的版本Jboss AS7,继上一篇文章笔者所讲的话题,跟大家分享下如何在Jboss7上应用Ibm Mq的消息服务。

基本的配置都一样(参考上文:http://blog.csdn.net/liuzhihong01/article/details/17161123),主要是在测试代码的编写上,因为Jboss 7支持的是Java EE6的规范,所以在Java EE7新的规范里面的一些API是不能够用的,像@WebServlet的注解是Java EE7里面的,@Resource里面的lookup属性也只存在Java EE7上面,Java EE6的@Resource的属性为mappedName,而笔者尝试了通过mappedName是找不到在Jboss7的standalone-full.xml配置里面以JNDI命令的连接工厂和队列对象的。

笔者愚钝,找不到好的方法,干脆就不用注解了,修改了如下的测试代码(注意project下的classpath要引入Java EE6的jar包):

消息发送:

import java.util.Properties;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;


public class MessageSender {

 private static final String DEFAULT_CONNECTION_FACTORY = "java:jboss/ManagedConnectionFactoryImpl";
 private static final String DEFAULT_DESTINATION = "java:jboss/MQQueueProxy";

 public void sendMessage(String message) throws JMSException {
  Context context = null;
  Connection connection = null;
  final Properties env = new Properties();
  env.put(Context.SECURITY_PRINCIPAL, "producer1");
  env.put(Context.SECURITY_CREDENTIALS, "producer@163");
  try {
   context = new InitialContext(env);
   ConnectionFactory connectionFactory = (ConnectionFactory) context
     .lookup(DEFAULT_CONNECTION_FACTORY);
   System.out.println(connectionFactory.getClass().getSimpleName());
   Destination destination = (Destination) context
     .lookup(DEFAULT_DESTINATION);
   System.out.println(destination.getClass().getSimpleName());
   // 创建JMS连接、会话、生产者和消费者
   connection = connectionFactory.createConnection();
   Session session = connection.createSession(false,
     Session.AUTO_ACKNOWLEDGE);
   MessageProducer producer = session.createProducer(destination);
   connection.start();
   TextMessage m = session.createTextMessage(message);
   producer.send(m);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

消息接收:

import java.util.Properties;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class MessageReceiver {
 private static final String DEFAULT_CONNECTION_FACTORY = "java:jboss/ManagedConnectionFactoryImpl";
 private static final String DEFAULT_DESTINATION = "java:jboss/MQQueueProxy";

 public String receiveMessage() {
  String s = "";
  Context context = null;
  Connection connection = null;
  final Properties env = new Properties();
  
  env.put(Context.SECURITY_PRINCIPAL, "producer1");
  env.put(Context.SECURITY_CREDENTIALS, "producer@163");
  // 获取到InitialContext对象.
  try {
   context = new InitialContext(env);
   ConnectionFactory connectionFactory = (ConnectionFactory) context
     .lookup(DEFAULT_CONNECTION_FACTORY);
   System.out.println(connectionFactory.getClass().getSimpleName());
   Destination destination = (Destination) context
     .lookup(DEFAULT_DESTINATION);
   System.out.println(destination.getClass().getSimpleName());
   // 创建JMS连接、会话、生产者和消费者
   connection = connectionFactory.createConnection();
   Session session = connection.createSession(false,
     Session.AUTO_ACKNOWLEDGE);
   MessageConsumer consumer = session.createConsumer(destination);
   connection.start();
   TextMessage m = (TextMessage) consumer.receive(5000);
   s = m.getText();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return s;
 }
}

测试的Servlet程序如下:

import java.io.IOException;
import java.io.PrintWriter;

import javax.jms.JMSException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.liu.domain.MessageReceiver;
import com.liu.domain.MessageSender;

public class TestServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

 MessageSender sender ;
 MessageReceiver receiver;

 public void init() throws ServletException {
  sender = new MessageSender();
  receiver = new MessageReceiver();
 }
 
    public TestServlet() {
        super();
    }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String message = "你好,世界!";
  request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Application Managed JMS</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Application Managed JMS</h1>");
        try {
   sender.sendMessage(message);
  } catch (JMSException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println("发送消息出了异常。。。。");
   return;
  }
        out.println("Message sent: " + message + "<br><br>");
        out.println("Message received: " + receiver.receiveMessage());
        out.println("</body>");
        out.println("</html>");
 }

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request, response);
 }

}

Jboss7的web控制台界面如下:

 

访问结果如下: