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