org.omg.PortableInterceptor

接口
异常
所有超级接口:
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 重试请求应该与异常中给定的新对象一起发生。