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!");
	}

}

你可能感兴趣的:(ejb)