[原创]消息驱动bean上手_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2288 | 回复: 0   主题: [原创]消息驱动bean上手        下一篇 
tianyuan.liu
注册用户
等级:上尉
经验:766
发帖:33
精华:0
注册:1970-1-1
状态:离线
发送短消息息给tianyuan.liu 加好友    发送短消息息给tianyuan.liu 发消息
发表于: IP:您无权察看 2015-1-15 10:33:47 | [全部帖] [楼主帖] 楼主

消息驱动bean的主要用于接受和处理异步消息,这些信息可能来自一个外部的系统或者同一个应用中的其它组件,之所以称它们为异步,那时因为这些消息可以在任何时候到达,而不同于一般的远程方法调用的结果,是立马直接得到的。同UI的事件处理工作方式类似,消息驱动bean用于监听发送给它的异步消息。值得注意的是,与远程调用方法不同,异步消息的发送者不会停下来去等待对方的响应。

要实现消息驱动bean(message driven bean),首先要在WebLogic上配置JMS服务,具体配置方法参考http://blog.csdn.net/xuxian361/article/details/8080229

服务器端接收消息的代码如下:

MessageBean.java
package testMDB;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@MessageDriven(activationConfig=
{
      @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
      @ActivationConfigProperty(propertyName="connectionFactoryJndiName",propertyValue="jms/MyMDB-Factory"),
      @ActivationConfigProperty(propertyName="destinationJndiName",propertyValue="jms/MyMDB"),
      @ActivationConfigProperty(propertyName="initialContextFactory",propertyValue="weblogic.jndi.WLInitialContextFactory")
})
public class MessageBean implements MessageListener {
      @Override
      public void onMessage(Message msg) {
            TextMessage tm = (TextMessage) msg;
            try {
                  System.out.println("hello MDB"+"------"+tm.getText());
            } catch (JMSException e) {
                  e.printStackTrace();
            }
      }
}
@MessageDriven:申明MDB,并进行参数配置。


实现MessageListener接口中的onMessage方法,收到消息后作出响应。

客户端发送消息,代码如下:

index.jsp
<%@ page language="java" import="java.util.Properties,javax.jms.Queue" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="javax.jms.*,javax.naming.*;"%>
<%
QueueConnection cnn = null;
QueueSender sender = null;
QueueSession sess = null;
Queue queue = null;
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://localhost:7001");
try {
      InitialContext ctx = new InitialContext(props);
      QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("jms/MyMDB-Factory");
      cnn = factory.createQueueConnection();
      sess = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
      queue = (Queue) ctx.lookup("jms/MyMDB");
      TextMessage msg = sess.createTextMessage("消息");
      sender = sess.createSender(queue);
      sender.send(msg);
      sess.close();
} catch (NamingException e) {
      e.printStackTrace();
} catch (JMSException e) {
      e.printStackTrace();
}
%>


通过JNDI创建工厂与queue,然后创建queueSession与sender,再发送消息。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论