【发布时间】:2017-11-14 05:07:12
【问题描述】:
我正在阅读 JMS 2.0 规范,并且提到(在相关摘录下方)如果客户端尝试修改 Message 对象,则 JMS 提供程序可能会引发异常。
我的问题是 JMS 提供者如何知道客户端是否正在尝试修改消息对象,因为消息对象将通过线路传输,并且在 JMS 提供者端它不是同一个堆对象,因此即使客户端修改了该消息对象,JMS 提供者无法检测到更改。
我错过了什么吗?
7.3.9。 Message 对象的使用限制
执行异步发送的应用程序必须考虑 Message 对象被设计为由一个人访问的限制 一次控制逻辑线程,不支持并发 采用。请参见第 2.14 节“多线程”。
send 方法之后 返回时,应用程序不得尝试读取标头, Message 对象的属性或正文,直到 CompletionListener 的 onCompletion 或 onException 方法已 叫。这是因为 JMS 提供者可能正在修改消息 在此期间另一个线程中的对象。
JMS 提供者可能会抛出一个 如果应用程序尝试访问或修改 在 send 方法返回之后和之前的消息对象 CompletionListener 已被调用。如果 JMS 提供程序不 抛出异常,则行为未定义。
【问题讨论】: