Message Drive Bean据说是EJB 2.0规范里面最有好的一个特性,可惜一般应用和项目中鲜有EJB的使用,更不谈MDB了。
应用中需要将一些消息发送email到主机,为此配置服务器jms,建立消息的queue和factory(使用工具如WSAD可快速的配置,可以参考developerworks的这篇文章这篇)。创建一SLSB AlertsService,该bean作为jms的工具类bean,提供接口将消息发送到队列。该EJB有对queue和factory的resource-ref。
在EJB中建立jms监听端口(在queue, factory上),创建一MDB OutboundAlerts监听该端口,在onMessage()中处理消息:send emails to host。MDB的目标类型为Queue(只有一个消息接受者)。
这里用jms的原因是:发送email可能延误时间,必须为异步的。相对用多线程的实现异步方法,MDB提供了持久性(只有Topic才有这个功能),更稳定。
这里MDB的onMessage的事务类型为:NotSupported,一般消息的发送者和接受者分别在各自的事务中,不可能在一个事务中。