MDB 消息驱动bean开发

MDB用于异步通信,其原理与android中的Intent和IntentFilter类似

MDB实际就是个监视特定地点destination的监听器

关于消息MDB只关心 消息格式和消息目的

JMS异步,安全(确保发送成功且只发送一次消息)

JMS像JDBC一样只是一个接口,标准。有P2P和Pub/Sub两种形式

消息分为 消息头,消息属性,消息体

MDB开发流程。(和MDB通信的唯一手段是将JMS消息发送给MDB正在监听的目的)(MDB也是无状态的bean)

配置消息目标地址,文件遵守 *-service.xml 格式 如mymdb-service.xml例子如下

<?xml version="1.0" encoding="UTF-8" ?>

- < server >
- < mbean code =" org.jboss.mq.server.jmx.Queue " name =" jboss.mq.destination:service=Queue,name=jsun ">
< attribute name =" JNDIName " > queue/jsun </ attribute >
< depends optional-attribute-name =" DestinationManager " > jboss.mq:service=DestinationManager </ depends >
</ mbean >
</ server >
把文件放到%JBOSS_HOME%/server/default/deploy目录下
注:如果 < attribute name =" JNDIName " >不设定,JBoss会自动生成一个全局JNDI,格式为 queue/xxxx xxxx为上面 name=jsun中的jsun

2。消息生产者

InitialContext jndi=new InitialContext();

Destination 目的地

destination=(Queue)jndi.lookup("queue/jsun");

QueueConnectionFactory 连接工厂

factory = (QueueConnectionFactory)jndi.lookup("ConnectionFactory");

QueueConnection P2P连接 //TopicQueueConnection为订阅/发布连接

conn = factory.createQueueConnection();

Session 会话

session=conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);

//false 表示会话不需要事务,第二个参数说明消息为自动确认模式

MessageProducer 消息生产者

pro=session.createProducer(destination);

发送

pro.send(session.createTextMessage("jsun come"));

当然会话session还可以创建别的Message对象

如 :ByteMessage MapMessage ObjectMessage(包含可以序列化的Java对象)

StreamMessage

3。消息消费者

可以是普通的java类,或者MDB(推荐)

普通java接收消息

与发送者不同的地方

MessageConsumer 消息消费者

consumer = session.createConsumer(destination);

consumer.setMessageListener(this);

//这里的this是一个实现了MessageListener接口,它有方法onMessage(Message m)

MDB开发(推荐)

因为MDB可以

1多线程并发的处理,

2简约消息代码(比如建立连接工厂),

3自动开关监听.

MDB类必须是:

a。实现MessageListener接口。

b。必须是POJO(普通JavaBean,非EJB里的bean)不可以是任何EJB Bean的子类。

c。必须是public,不可以是final和abstract。

@MessageDriven(

activationConfig={

@ActivationConfigProperty(propertyName="destinationType",

propertyValue="javax.jms.Queue"),

@ActivationConfigProperty(propertyName="destination",

propertyValue="queue/jsun")

}

)

public class XX implements MessageListener{

public void onMessage(Message m){}

}

MDB生命周期分为:不存在和已就绪

@PostConstruct

@PreDestroy

你可能感兴趣的:(bean,android,jboss,jms,ejb)