ejb3.0学习---消息驱动bean

必须实现MessageListener接口,但bean容器检测到消息时,就会调用onMessage()方法,消息将作为参数传入。这里
 可以用annotation配置检测队列消息。
 可用于业务处理时间较长,而无需实时向用户反馈时。如发送邮件,短信等等。
 //说明这是一个消息驱动bean
 @MessageDriven(activationConfig =
 {
  //配置消息的各种类型
  //destinationType属性指定消息的类型,有两种topics(javax.jms.Topics) and queues(javax.jms.Queue)
  //topics:可以有多个客户端,多对多通讯
  //queues:只有一个客户端,消息被接受后就会从对列中消失
  @ActivationConfigProperty(propertyName="destinationType",
  propertyValue="javax.jms.Queue"),
  //destination:消息路径
  @ActivationConfigProperty(propertyName="destination",
  propertyValue="queue/messagebean")
 })
 public class PrintBean implements MessageListener {
 public void onMessage(Message msg) {
  try {
   TextMessage tmsg = (TextMessage) msg;
   this.print(tmsg.getText());
  } catch (Exception e){
   e.printStackTrace();
  }
 }
  private void print(String content){
   System.out.println(content);
  }
 }

 ---test---
 public class Client
 {
  public static void main(String[] args) throws Exception
  {
    QueueConnection cnn = null;
    QueueSender sender = null;
    QueueSession session = null;
    InitialContext ctx = new InitialContext();
    QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
    cnn = factory.createQueueConnection();
    session = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
      Queue queue = (Queue) ctx.lookup("queue/messagebean");
    TextMessage msg = session.createTextMessage("hello, this is a message driven bean");
    sender = session.createSender(queue);
    sender.send(msg);
    System.out.println("消息已经发出");
  }
 }

 消息驱动bean工作步骤:
 a. 初识化上下文
 InitialContext ctx = new InitialContext(props);
 b. 根据上下文查找连接工厂(有两种TopicConnectFactory/ QueueConnectionFactory)
 QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
 c. 从连接工厂得到一个连接
 cnn = factory.createQueueConnection();
 d. 通过连接建立一个会话
 session = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
 e. 查找destination
 Queue queue = (Queue) ctx.lookup("queue/messagebean");
 f. 创建(TopicPublisher/QueueSender)和(TopicSubscriber/QueueReceiver).
 TextMessage msg = session.createTextMessage("hello, this is a message driven bean");
 sender = session.createSender(queue);
 sender.send(msg); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值