EJB MDB demo

MDB其实就是JMS消息监听器,它实现了javax.jms.MessageListener接口。
P2P的消息模型(Queue):每次只有一个MDB bean被调用。
Server:

package com.kevin.ejb;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;

// 这个annotation是定义MDB
@MessageDriven(
// 注册一个Queue类型的destination
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType" ,propertyValue = "javax.jms.Queue"),
// destination名字
@ActivationConfigProperty(propertyName = "destination" ,propertyValue = "queue/myqueue")
}
)
public class MyQueueMDBBean implements MessageListener {

public void onMessage(Message message) {
TextMessage msg = (TextMessage)message;
try {
System.out.println("MyQueueMDBBean invoked. the message is: " + msg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}

}


client:

package com.kevin.ejb;

import javax.jms.JMSException;
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;
import javax.naming.NamingException;

public class MyQueueMDBBeanClient {

public static void main(String[] args) throws NamingException, JMSException {
InitialContext context = new InitialContext();

// 获得QueueConnectionFactory对象
QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("ConnectionFactory");
// 获得QueueConnection对象
QueueConnection connection = factory.createQueueConnection();
// 获得QueueSession对象
QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

// 获得destination对象
Queue queue = (Queue)context.lookup("queue/myqueue");

// 创建文本消息
TextMessage msg = session.createTextMessage("Hello, Kevin.");
// 创建一个发送者
QueueSender sender = session.createSender(queue);

// 发送消息
sender.send(msg);

session.close();
connection.close();
System.out.println("message has been sended successfully!");

}

}



Pub/Sub模型(Topic):所有destination名字相同的MDB bean都被调用。
Server:

package com.kevin.ejb;

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.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/mytopic")
}
)
public class MyTopicMDBBean implements MessageListener {

public void onMessage(Message message) {
TextMessage msg = (TextMessage)message;
try {
System.out.println("MyTopicMDBBean invoked. the message is: " + msg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}

}


Client:

package com.kevin.ejb;

import javax.jms.JMSException;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class MyTopicMDBBeanClient {

public static void main(String[] args) throws NamingException, JMSException {
InitialContext context = new InitialContext();

// 创建TopicConnectionFactory对象
TopicConnectionFactory factory = (TopicConnectionFactory)context.lookup("ConnectionFactory");
// 创建TopicConnection对象
TopicConnection connection = factory.createTopicConnection();
// 创建TopicSession对象
TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);

// 获取destination对象
Topic topic = (Topic)context.lookup("topic/mytopic");

// 创建文本消息对象
TextMessage msg = session.createTextMessage("Hello, Cissy.");
// 创建TopicPublisher对象
TopicPublisher publisher = session.createPublisher(topic);

// 发布消息
publisher.publish(msg);

session.close();
connection.close();
System.out.println("message has been published successfully!");
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值