|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface ClientRequestInterceptorOperations
客戶端的請求 interceptor。
請求 Interceptor 用於通過 ORB 在指定點截取請求/應答序列串流,以便服務能夠查詢請求資訊並操作在客戶端和伺服器之間傳播的服務上下文。請求 Interceptor 主要用途是使 ORB 服務能夠在客戶端和伺服器之間傳輸上下文資訊。請求 Interceptor 有兩種型別:客戶端和伺服器端。
編寫客戶端 Interceptor 需要實作 ClientRequestInterceptor
介面。
ClientRequestInfo
方法摘要 | |
---|---|
void |
receive_exception(ClientRequestInfo ri)
指示 interceptor 發生異常。 |
void |
receive_other(ClientRequestInfo ri)
允許 Interceptor 在請求引起了正常應答和異常之外的情況時查詢可用資訊。 |
void |
receive_reply(ClientRequestInfo ri)
允許 Interceptor 在從伺服器返回後但在向客戶端返回控制元件前查詢資訊。 |
void |
send_poll(ClientRequestInfo ri)
允許 Interceptor 在輪詢獲取應答序列的與時間無關的調用(Time-Independent Invocation,TII)時查詢資訊。 |
void |
send_request(ClientRequestInfo ri)
允許 Interceptor 在請求被發送到伺服器前查詢請求資訊並修改服務上下文。 |
從介面 org.omg.PortableInterceptor.InterceptorOperations 繼承的方法 |
---|
destroy, name |
方法詳細資訊 |
---|
void send_request(ClientRequestInfo ri) throws ForwardRequest
此截取點可能拋出系統異常。如果拋出異常,則不調用其他任何 Interceptor 的 send_request
操作。移除那些 Flow Stack 上的 Interceptor 並調用其 receive_exception
截取點。此截取點也可能拋出 ForwardRequest
異常。如果 Interceptor 拋出此異常,則不調用其他任何 Interceptor 的 send_request
操作。移除那些 Flow Stack 上的 Interceptor 並調用其 receive_other
截取點。
符合的 Interceptor 如果從此截取點拋出系統異常,則它們應該完全遵守 completion_status 語義。completion_status
應為 COMPLETED_NO
。
ri
- 關於將被截取的當前請求的資訊。
ForwardRequest
- 拋出此異常指示 ORB 重試請求應該與異常中給定的新物件一起發生。void send_poll(ClientRequestInfo ri)
利用 TII,應用程序可以輪詢對之前由輪詢客戶端或其他客戶端發送的請求所做出的回應。此輪詢將通過 send_poll
截取點報告給 Interceptor,回應將通過 receive_reply
或 receive_exception
截取點返回。如果在超過輪詢逾時期前沒有獲得回應,則拋出系統異常 TIMEOUT
,並使用該異常調用 receive_exception
。
此截取點可能拋出系統異常。如果拋出異常,則不調用其他任何 Interceptor 的 send_poll
操作。移除那些 Flow Stack 上的 Interceptor 並調用其 receive_exception
截取點。
如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status
語義。completion_status 應為 COMPLETED_NO
。
ri
- 關於將被截取的當前請求的資訊。
TIMEOUT
- 如果在超過輪詢逾時期前沒有獲得回應。void receive_reply(ClientRequestInfo ri)
此截取點可能拋出系統異常。如果拋出異常,則不調用其他任何 Interceptor 的 receive_reply
操作。將調用 Flow Stack 中剩餘 Interceptor 的 receive_exception
截取點。
如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status
語義。completion_status
應為 COMPLETED_YES
。
ri
- 關於將被截取的當前請求的資訊。void receive_exception(ClientRequestInfo ri) throws ForwardRequest
此截取點可能拋出系統異常。這等效於更改連續 Interceptor(從 Flow Stack 中移除的)調用 receive_exception
接收到的異常。對客戶端拋出的異常將是 Interceptor 拋出的最終異常或者原始異常(如果沒有 Interceptor 更改了異常)。
此截取點同樣可能拋出 ForwardRequest
異常。如果 Interceptor 拋出此異常,則不調用其他任何 Interceptor 的 receive_exception
操作。移除 Flow Stack 中剩餘的 Interceptor 並調用其 receive_other
截取點。
如果異常的 completion_status
不是 COMPLETED_NO
,則此截取點拋出 ForwardRequest
異常是不恰當的。將失去請求的最多一次 (at-most-once) 語義。
如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status
語義。如果原始異常為系統異常,則新異常的 completion_status
將與原始異常相同。如果原始異常為使用者異常,則新異常的 completion_status
應為 COMPLETED_YES
。
在某些情況下,異常(如 COMM_FAILURE
)可能導致重試請求,具體取決於實行的策略。雖然這種重試對於 Interceptor 而言是一個新的請求,但是在原始請求和重試請求之間仍然存在一種相關性:因為沒有向客戶端返回控制資訊,所以原始請求和重試請求的 PortableInterceptor.Current
是相同的。
ri
- 關於將被截取的當前請求的資訊。
ForwardRequest
- 拋出此異常指示 ORB 重試請求應該與異常中給定的新物件一起發生。void receive_other(ClientRequestInfo ri) throws ForwardRequest
LOCATION_FORWARD
狀態的 GIOP 應答);又如非同步調用時,請求後不會立即應答,但是將向客戶端返回控制資訊並調用終端截取點。
對於重試而言,當已經指示重試後可能執行一個新的請求,也可能不執行,具體取決於實行的策略。如果執行新的請求,則雖然這種重試對於 Interceptor 而言是一個新的請求,但是在原始請求和重試請求之間仍然存在一種相關性:因為沒有向客戶端返回控制資訊,所以原始請求和重試請求的請求域 PortableInterceptor.Current
是相同的。
此截取點可能拋出系統異常。如果拋出異常,則不調用其他任何 Interceptor 的 receive_other
操作。移除 Flow Stack 中剩餘的 Interceptor 並調用其 receive_exception
截取點。
此截取點同樣可能拋出 ForwardRequest
異常。如果 Interceptor 拋出此異常,則使用 ForwardRequest
異常提供的新資訊調用連續 Interceptor 的 receive_other
操作。
如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status
語義。completion_status
應該是 COMPLETED_NO
。如果已經完成了目標調用,則將調用此截取點。
ri
- 關於將被截取的當前請求的資訊。
ForwardRequest
- 拋出此異常指示 ORB 重試請求應該與異常中給定的新物件一起發生。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。