我正在閱讀JMS 2.0規範,並且提到(如下相關摘錄),如果客戶端嘗試修改Message對象,那麼JMS提供者可能會拋出異常。JMS 2.0規範 - JMS提供程序如何通過JMS客戶端檢測Message對象中的更改?
我的問題是JMS提供程序如何知道客戶端是否嘗試修改Message對象,因爲Message對象將通過線路傳輸,並且在JMS提供者端它不是同一個堆對象,所以即使客戶端修改了消息對象,JMS提供者無法檢測到更改。
我錯過了什麼嗎?
7.3.9。關於使用消息對象的限制
應用其中執行一個異步發送必須考慮 限制,即在消息對象被設計成通過控制的一個 邏輯線程在一個時間訪問,並且不支持併發的使用 。參見2.14節「多線程」。
發送方法 返回後,應用程序不能嘗試讀取頭, 屬性或Message對象的身體,直到 CompletionListener的onCompletion或onException的方法已經 調用。這是因爲在此期間JMS提供程序可能正在修改另一個線程中的消息 對象。如果應用程序試圖訪問或修改 Message對象發送方法返回之後並已調用 CompletionListener之前
JMS提供可能拋出 的JMSException。如果JMS提供程序不 引發異常,則行爲未定義。
謝謝你的時間來回答。 – pjj