想问一下消息驱动Bean 什么可以required事务的?因为它只有一个onmessage()方法,并且,它的调用是容器来调用的。怎么可以将它与事务扯上联系呢?有点不明白? 事务应该是跟数据库扯上联系的,但是消息驱动Bean却只是接收队列或者主题发送的消息,这怎么会跟数据库的操作扯上关系呢?我最不明白的就是这里,大家能举个例子吗?我上网找了很久也找不到的。

解决方案 »

  1.   

    消息驱动Bean的实例变量可以在处理客户消息期间包含一些状态信息,例如JMS连接、打开的数据库连接,或者是对EJB对象的引用。当一个消息到达,容器调用消息驱动Bean的onMessage()方法处理消息。onMessage()方法通常把消息定型(cast)成为五种JMS消息类型之一,然后按照应用的业务逻辑的要求处理消息。 传递给消息驱动Bean的消息可能处于一个事务之内,这时,onMessage()方法内的所有操作都属于该事务的一部分。如果消息处理结果被回退,则系统将再次投递该消息。哪些时候应该使用消息驱动的Bean呢?会话Bean和实体Bean能够发送JMS消息,能够同步接收消息,但不能异步接收。一些时候,为防止过多地占用服务器资源,在服务器端的组件中,我们想要避免阻塞,这时,我们可以用消息驱动的Bean异步接收消息。 
    我的问题是:::::::::::::::::
    但是面对事务方面,我还是有点不明白。MDB的实例变量是如何接收JMS连接,数据库连接的?是通过OnMessage()方法去得到这些连接吗?能举个例子说明一些事务方面的东西吗?