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

你可能感兴趣的:(MDB 消息驱动bean开发)