我尝试使用this tutorial了解JMS API。在创建会话对象时,我们将2个参数传递给createSession(argument1,argument2)
。
argument1值是boolean
值。
如果您指定,
true
:这是一个交易会话。
false
:这是一个非交易会话。
我的问题是,交易和非交易会话之间有什么区别。为此我读了this tutorial。我明白了。但我很想知道,这两种类型的会话在实际案例中是有用的。
你能用一个简单的例子解释一下吗?
答案 0 :(得分:1)
如果您必须在逻辑事务完成之前收到多条消息,则事务处理会话非常有用。
例如,在将结果保存到数据库之前,必须使用三条消息。在这种情况下,在完成对数据库的更新后,您将在队列会话上提交以在一个回合中确认三条消息。
否则,如果您的程序在阅读了两条消息后被终止,则这两条消息将丢失(如果您使用AUTO_ACKNOWLEDGE
)。
因此,交易和非交易之间的差异是您确认的对象:在第一种情况下,它是会话,而另一种是单独的消息。
答案 1 :(得分:0)
事务处理会话允许您执行多项操作,并让它们一起发生或不发生。一个典型的例子可能是您收到一条消息并发送另一条消息。 JMS被认为是可靠的传输,因此假设您要确保发送第二条消息。如果你做这些事情是非交易的,你的处理应用程序在收到之后和发送之前就失败了,那么你就丢失了信息。要解决此问题,您可以使用事务处理会话。这将允许您接收一条消息,发送一秒,然后调用Session.commit以使两者同时发生。