JavaTM 2 Platform
Standard Ed. 6

org.omg.PortableInterceptor
介面 ServerRequestInterceptorOperations

所有父級介面:
InterceptorOperations
所有已知子介面:
ServerRequestInterceptor

public interface ServerRequestInterceptorOperations
extends InterceptorOperations

伺服器端的請求 interceptor。

請求 Interceptor 用於通過 ORB 在指定點截取請求/應答序列串流,以便服務能夠查詢請求資訊並操作在客戶端和伺服器之間傳播的服務上下文。請求 Interceptor 主要用途是使 ORB 服務能夠在客戶端和伺服器之間傳輸上下文資訊。請求 Interceptor 有兩種型別:客戶端和伺服器端。

編寫伺服器端 Interceptor 需要實作 ServerRequestInterceptor 介面。

另請參見:
ServerRequestInfo

方法摘要
 void receive_request_service_contexts(ServerRequestInfo ri)
          允許 interceptor 處理服務上下文資訊。
 void receive_request(ServerRequestInfo ri)
          允許 Interceptor 在所有資訊(包括操作參數)可用後查詢資訊。
 void send_exception(ServerRequestInfo ri)
          允許 Interceptor 在向客戶端拋出異常前查詢異常資訊並修改應答服務上下文。
 void send_other(ServerRequestInfo ri)
          允許 Interceptor 在請求引起了正常應答和異常之外的情況時查詢可用資訊。
 void send_reply(ServerRequestInfo ri)
          允許 Interceptor 在已調用目標操作後、向客戶端返回應答前查詢應答資訊並修改應答服務上下文。
 
從介面 org.omg.PortableInterceptor.InterceptorOperations 繼承的方法
destroy, name
 

方法詳細資訊

receive_request_service_contexts

void receive_request_service_contexts(ServerRequestInfo ri)
                                      throws ForwardRequest
允許 interceptor 處理服務上下文資訊。

在此截取點,Interceptor 必須從傳入請求獲取其服務上下文資訊,並將其傳輸到 PortableInterceptor.Current 的槽 (slot)。

在調用 servant 管理器之前調用此截取點。此時操作參數尚未可用。此截取點可能執行與目標調用相同的執行緒,也可能不執行。

此截取點可能拋出系統異常。如果拋出異常,則不調用任何其他 Interceptor 的 receive_request_service_contexts 操作。移除那些 Flow Stack 上的 Interceptor 並調用其 send_exception 截取點。

此截取點同樣可能拋出 ForwardRequest 異常。如果 Interceptor 拋出此異常,則不調用任何其他 Interceptor 的 receive_request_service_contexts 操作。移除那些 Flow Stack 上的 Interceptor 並調用其 send_other 截取點。

如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status 語義。completion_status 應為 COMPLETED_NO。

參數:
ri - 關於將被截取的當前請求的資訊。
拋出:
ForwardRequest - 拋出此異常指示 ORB 重試請求應該與異常中給定的新物件一起發生。

receive_request

void receive_request(ServerRequestInfo ri)
                     throws ForwardRequest
允許 Interceptor 在所有資訊(包括操作參數)可用後查詢資訊。此截取點應該執行與目標調用相同的執行緒。

在 DSI 模型中,因為在使用者程式碼調用 arguments 時參數首次可用,所以將從 arguments 內部調用 receive_request。有可能不是在 DSI 模型中調用 arguments。目標可以在調用 arguments 之前調用 set_exception。ORB 應保證通過 argumentsset_exception 調用 receive_request 一次。如果通過 set_exception 調用,則請求參數將導致拋出 NO_RESOURCES,並帶有標準次要程式碼 1。

此截取點可能拋出系統異常。如果拋出異常,則不調用任何其他 Interceptor 的 receive_request 操作。移除那些 Flow Stack 上的 Interceptor 並調用其 send_exception 截取點。

此截取點同樣可能拋出 ForwardRequest 異常。如果 Interceptor 拋出此異常,則不調用任何其他 Interceptor 的 receive_request 操作。移除那些 Flow Stack 上的 Interceptor 並調用其 send_other 截取點。

如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status 語義。completion_status 應為 COMPLETED_NO

參數:
ri - 關於將被截取的當前請求的資訊。
拋出:
ForwardRequest - 拋出此異常指示 ORB 重試請求應該與異常中給定的新物件一起發生。

send_reply

void send_reply(ServerRequestInfo ri)
允許 Interceptor 在已調用目標操作後、向客戶端返回應答前查詢應答資訊並修改應答服務上下文。此截取點應該執行與目標調用相同的執行緒。

此截取點可能拋出系統異常。如果拋出異常,則不調用任何其他 Interceptor 的 send_reply 操作。Flow Stack 中剩餘的 Interceptor 將使其 send_exception 截取點被調用。

如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status 語義。completion_status 應為 COMPLETED_YES

參數:
ri - 關於將被截取的當前請求的資訊。

send_exception

void send_exception(ServerRequestInfo ri)
                    throws ForwardRequest
允許 Interceptor 在向客戶端拋出異常前查詢異常資訊並修改應答服務上下文。當發生異常時,將調用此截取點。此截取點應該執行與目標調用相同的執行緒。

此截取點可能拋出系統異常。這可以更改連續 Interceptor(從 Flow Stack 中移除的)調用 send_exception 收到的異常。對客戶端拋出的異常將是 Interceptor 拋出的最終異常或者原始異常(如果沒有 Interceptor 更改了異常)。

此截取點同樣可能拋出 ForwardRequest 異常。如果 Interceptor 拋出此異常,則不調用任何其他 Interceptor 的 send_exception 操作。將調用 Flow Stack 中剩餘 Interceptor 的 send_other 截取點。

如果異常的 completion_status 不是 COMPLETED_NO,則此截取點拋出 ForwardRequest 異常是不恰當的。將失去請求的最多一次 (at-most-once) 語義。

如果符合的 Interceptor 從此截取點拋出系統異常,則它們應該完全遵守 completion_status 語義。如果原始異常為系統異常,則新異常的 completion_status 將與原始異常相同。如果原始異常為使用者異常,則新異常的 completion_status 應為 COMPLETED_YES

參數:
ri - 關於將被截取的當前請求的資訊。
拋出:
ForwardRequest - 拋出此異常指示 ORB 重試請求應該與異常中給定的新物件一起發生。

send_other

void send_other(ServerRequestInfo ri)
                throws ForwardRequest
允許 Interceptor 在請求引起了正常應答和異常之外的情況時查詢可用資訊。例如,請求可以引起重試(例如,收到帶有 LOCATION_FORWARD 狀態的 GIOP 應答)。此截取點應該執行與目標調用相同的執行緒。

此截取點可能拋出系統異常。如果拋出異常,則不調用任何其他 Interceptor 的 send_other 操作。將調用 Flow Stack 中剩餘 Interceptor 的 send_exception 截取點。

此截取點同樣可能拋出 ForwardRequest 異常。如果 Interceptor 拋出此異常,則使用 ForwardRequest 異常提供的新資訊調用連續 Interceptor 的 send_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