此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【yegaofei】截止到2008-07-01 10:37:50的历史汇总数据(不包括此帖):
发帖数:3                  发帖分:300                
结贴数:3                  结贴分:300                
未结数:0                  未结分:0                  
结贴率:100.00%            结分率:100.00%            
敬礼!

解决方案 »

  1.   

    谢谢楼上的!我也比较倾向于第一种,因为在onMessage中执行顺序应该是按照代码顺序自上而下的,至少也要等数据插入操作完了再发消息吧?如果是第一种情况但我已经将MDB-A的onMessage方法配置到容器控制的事务控制中去了,配置如下:
                               <container-transaction>
    <method>
    <ejb-name>MDB-AListener</ejb-name>
    <method-name>onMessage</method-name>
    </method>
    <trans-attribute>Required</trans-attribute>难道数据插入失败导致的事务回滚不能控制往其他Queue发送消息吗?  换句话说,就是像这种情况事务控制不起作用?
      

  2.   

    猜下啊 
    假定你把A B的调用都放在一个SessionBean的方法methodA()中
    它使用分布式事务 只有在MDB a b都成功才会提交事务
    也就是在MDB b执行是 MDB a的数据还没提交 b报错但是分布式事务只有在发生系统级异常才回滚,如果抛出应用级异常
    是不会回滚的,这时MDB a插入的数据就被提交了纯猜的啊~
      

  3.   

    谢谢各位终于拿到系统log了,是在MDB执行方法onMessage()方法期间,数据库连接一直失败,报'got one minuse from a read call'异常。 可能是因为连接失败持续时间太久(有将近1分钟左右,共出现了300多次这种异常),导致一直回滚,失败,再回滚,最终那些message都被发送到dead queue中去了。