org.omg.PortableInterceptor

接口
异常
所有超级接口:
InterceptorOperations
所有已知子接口:
ClientRequestInterceptor

public interface ClientRequestInterceptorOperations
     
extends InterceptorOperations

客户端的请求 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
 

方法详细信息

send_request

void send_request(ClientRequestInfo ri)
                  throws ForwardRequest
允许 Interceptor 在请求被发送到服务器前查询请求信息并修改服务上下文。

此截取点可能抛出系统异常。如果抛出异常,则不调用其他任何 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 重试请求应该与异常中给定的新对象一起发生。

send_poll

void send_poll(ClientRequestInfo ri)
允许 Interceptor 在轮询获取应答序列的与时间无关的调用(Time-Independent Invocation,TII)时查询信息。

利用 TII,应用程序可以轮询对之前由轮询客户端或其他客户端发送的请求所做出的响应。此轮询将通过 send_poll 截取点报告给 Interceptor,响应将通过 receive_replyreceive_exception 截取点返回。如果在超过轮询超时期前没有获得响应,则抛出系统异常 TIMEOUT,并使用该异常调用 receive_exception

此截取点可能抛出系统异常。如果抛出异常,则不调用其他任何 Interceptor 的 send_poll 操作。移除那些 Flow Stack 上的 Interceptor 并调用其 receive_exception 截取点。

如果符合的 Interceptor 从此截取点抛出系统异常,则它们应该完全遵守 completion_status 语义。completion_status 应为 COMPLETED_NO

参数:
ri - 关于将被截取的当前请求的信息。
抛出:
TIMEOUT - 如果在超过轮询超时期前没有获得响应。

receive_reply

void receive_reply(ClientRequestInfo ri)
允许 Interceptor 在从服务器返回后但在向客户端返回控件前查询信息。

此截取点可能抛出系统异常。如果抛出异常,则不调用其他任何 Interceptor 的 receive_reply 操作。将调用 Flow Stack 中剩余 Interceptor 的 receive_exception 截取点。

如果符合的 Interceptor 从此截取点抛出系统异常,则它们应该完全遵守 completion_status 语义。completion_status 应为 COMPLETED_YES

参数:
ri - 关于将被截取的当前请求的信息。

receive_exception

void receive_exception(ClientRequestInfo ri)
                       throws ForwardRequest
指示 interceptor 发生异常。允许 Interceptor 在向客户端抛出异常前查询异常信息。

此截取点可能抛出系统异常。这等效于更改连续 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 重试请求应该与异常中给定的新对象一起发生。

receive_other

void receive_other(ClientRequestInfo ri)
                   throws ForwardRequest
允许 Interceptor 在请求引起了正常应答和异常之外的情况时查询可用信息。例如,请求可以引起重试(例如,收到带有 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 重试请求应该与异常中给定的新对象一起发生。