这个问题直接从以下矿井的前一个问题的SO。 我仍然无法神交被用作工作事务部 JMS会话的概念。
从Java消息服务书:
QueueConnection对象被用于创建一个JMS会话对象(具体地,一个队列会话),这是工作线程和JMS工作的事务单元。 不同于JDBC,这需要每个工作事务单元的连接,JMS使用单一连接和多个会话对象。 通常,应用程序将创建在应用程序启动一个JMS连接和保持会话对象的池用于每当需要产生或消耗的消息。
我无法理解工作的短语交易单元的含义。 用一个例子一个简单明了的解释是什么,我期待在这里。
工作单位是什么,必须完成全有或全无。 如果它不能完成它必须像什么都没有发生。
在JTA说法工作单元由具有相互作用的transactional
之间的资源transaction.begin()
调用和transaction.commit()
调用。
比方说,你定义拉源队列的消息,在数据库中插入一条记录,并提出了另一条消息上的目标队列的工作单元。 在这种情况下transaction aware
的资源是两个JMS队列和数据库。
如果数据库插入后发生故障,然后很多事情一定会发生,实现原子。 数据库提交必须回滚,这样你就不必在数据源孤立的记录,这是被拉断源队列必须更换的消息。
净出这种做作的情况是,无论在哪里在发生故障的unit of work
的结果是,你在开始的准确状态。
要记住的邮件系统的关键是,一个更具全球性的事务可以由几个较小的原子事务切换的队列排队。
Queue A -> Processing Agent -> Queue B --> Processing Agent --> Queue C
而在这种情况下是不是一个真正的全局事务上下文(例如滚滚失败B->C
所有的方式回到A
)你做什么,有是消息要么被传递下来链或留在garauntees其源队列。 这使得系统在任何时刻一致。 异常状态可以通过创建错误的路线,实现一致性的更全局状态进行处理。
作为事务会话可以被创建。 有关session.commit)事务会话(此会话的消费者已经收到承诺的所有消息,即收到的邮件从本次会议的所有生产者已将成为可见的其他目的地(队列或主题)和短信被删除客户端。 在回滚接收到的消息都将返回到他们的目的地,从发送目标中删除的消息。 所有发送/接收邮件,直到提交/回滚是一个工作单元。