2011-10-10 49 views
1

全部, 我是JMS的新手,我在JMS中有一个关于Session.rollBack()方法的问题。 AFAIK,此方法用于在使用* SESSION_TRANSACTED *确认模式时通过会话将所有操作回滚到JMS服务器(发送/接收)。现在假设我在接收/处理操作的catch块中调用此方法(是合理的?),以告知JMS服务器重新传递消息以进行处理,但即使重新传递,处理仍会抛出相同的异常,从而导致JMS服务器重新传递消息,所以它似乎是一个无限的过程。如何处理这个问题?还是还有其他的JMS功能是为它设计的?提前致谢!about JMS中的Session.rollBack()

回答

1

JMS中的回滚方法将回滚在该“事务”中发送和接收的任何消息。这里的事务对于JMS会话是本地的。

重新交付是否会导致问题真的取决于发生异常的原因。如果是由于一些短暂的问题,那么重新交付可能会奏效。如果你遇到过这种问题,那么一旦发生,就会一直发生(这个例子是一个JMS的TextMessage,它的主体应该包含XML,但是不包含)。

JMS API本身不提供任何解决方案。这通常由JMS提供者负责,它的行为方式取决于您使用的是哪一个。举例来说,WebSphere MQ将重新传递达到可配置的最大值,此时它会将它移动到队列中以查找错误消息。 WebSphere Application Server中的服务集成总线具有类似的行为。我建议你参考你的JMS提供者文档来确定它在这种情况下的行为。

如果您在应用程序服务器中运行,回滚通常不会执行任何操作,因为应用程序服务器将为您管理事务。