关于事务的超时机制

lfgoal 2005-03-22 11:37:35
问题案例:
消息发送端每隔一段时间发送JMS消息到一个Queue,该Queue对应有一个消息驱动Bean(MDB)来处理这个消息,当此MDB处理此消息需要的时间大于发送端发送的间隔时间时,就会造成Queue的堵塞,以至于后面的消息都无法得到及时的处理,能否有一个超时机制的设置,使得当MDB执行时间超过设定的超时时间,即丢弃此消息。

尝试1:JMS有个time-to-live设置,但是此参数只是对于收到但是并未处理的消息的超时处理。

尝试2:利用EJB的事务处理机制,修改ejb的配置信息
ejb-jar.xml内:
<message-driven>
<display-name>Enterprise1</display-name>
<ejb-name>Enterprise1</ejb-name>
<ejb-class>com.aspire.platform.business.security.Enterprise1Bean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
--...--
<container-transaction>
<method>
<ejb-name>Enterprise1</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>

weblogic-ejb-jar.xml内:
<weblogic-enterprise-bean>
<ejb-name>Enterprise1</ejb-name>
<transaction-descriptor>
<trans-timeout-seconds>120</trans-timeout-seconds>
</transaction-descriptor>
</weblogic-enterprise-bean>
但是仍然无效,server抛出一堆异常后,消息就永远在pending状态无法释放。

尝试3:Bean-managed transactions. An application calls the UserTransaction.setTransactionTimeout method.

此方法在试验中,有哪位大侠知道此类问题的解决办法,或者第三种尝试方法中具体实施的例子,急盼!谢谢!
...全文
265 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧