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

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值