仅仅是我还是JMS API在如何建模事务处理和XA事务处理等效项方面不一致?
我不完全理解为什么为ConnectionFactory,QueueConnectionFactory,Session等提供XA表单以及如此多的重复:
例如
XAQueueConnection
XAQueueSession
createXAQueueSession() throws JMSException;
QueueSession
createQueueSession(boolean transacted,
int acknowledgeMode) throws JMSException;
包含非交易和交易会话的方法吗?
最佳答案
这些提供了服务等级的梯度。 JMS允许...
这些中的每一个的成本随着可靠性的程度而增加。通常,您要使用应用程序所需的成本最低的方法。如果您有一条非永久性的,即将到期的“即发即弃”消息(例如,股票行情事件),将其放在工作单元中是浪费的。同样,如果您需要事务处理会话,但JMS是唯一的资源管理器,那么XA就是浪费。
另一方面,如果您确实需要XA进行某些操作,那并不意味着您随后应将XA用于所有操作。例如,您可能有一个连接,在其中一个XA事务维护一个会话,为非XA消息传递维护另一个会话。首先是接收对长时间运行的流程的请求,并使用流程详细信息更新数据库。另一个会话用于发送定期状态更新。该连接必须是XAConnection,但是出于性能目的,您需要在其下面同时具有XA和非XA会话。您也可以维护单独的连接,但是此方法允许您在单个连接中执行XA和非XA消息传递。对于具有许多连接的经纪人,此优化至关重要。
诚然,这不是一个很常见的用例,但它仍然是有效的用例,并且足够有用,可以包含在规范中。