1. MDB 负责消费JMS及其他类型的消息。
2.消息可能来自JMS目的地的JMS消息,或者来自其他Endpoint的其他消息类型。
3.MDB实例仅存在两种状态:不存在或池化(pooled,也称之为就绪状态)。
MDB的生命周期:
MDB的具体特征:
1)MDB不存在远程或本地业务接口。
2)MDB支持各种用于消息分发的监听器方法。
3)MDB监听方法可能不会返回任何值给客户。
4)MDB可能不会返回异常信息给客户。
5)MDB是无状态的。
6)MDB是单线程的。
示例代码:
在实际企业应用中,开发的MDB组件往往需要调用到其他EJB组件。
package examples.messaging;
import javax.jms.*;
import javax.ejb.*;
import javax.annotation.PreDestroy;
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Topic")// "javax.jms.Queue"
})
public class LogBean implements MessageListener {
public LogBean() {
System.out.println("LogBean created");
}
public void onMessage(Message msg) {
if (msg instanceof TextMessage) {
TextMessage tm = (TextMessage) msg;
try {
String text = tm.getText();
System.out.println("Received new message : " + text);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
@PreDestroy
public void remove() {
System.out.println("LogBean destroyed.");
}
}