-
- All Superinterfaces:
-
InterceptorOperations
- All Known Subinterfaces:
-
ClientRequestInterceptor
public interface ClientRequestInterceptorOperations extends InterceptorOperations
客户端请求拦截器。请求拦截器旨在通过特定点的ORB截取请求/回复序列的流程,以便服务可以查询请求信息并操纵客户端和服务器之间传播的服务上下文。 请求拦截器的主要用途是使ORB服务能够在客户端和服务器之间传输上下文信息。 请求拦截器有两种类型:客户端和服务器端。
要写一个客户端拦截器,实现
ClientRequestInterceptor
接口。- 另请参见:
-
ClientRequestInfo
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 void
receive_exception(ClientRequestInfo ri)
向拦截器指示发生异常。void
receive_other(ClientRequestInfo ri)
允许拦截器在请求导致除了正常回复或异常之外的其他内容时查询可用的信息。void
receive_reply(ClientRequestInfo ri)
允许拦截器在从服务器返回并在将控制权返回给客户端之前查询答复上的信息。void
send_poll(ClientRequestInfo ri)
允许拦截器在时间无关调用(TII)轮询获取回复序列期间查询信息。void
send_request(ClientRequestInfo ri)
允许拦截器在请求发送到服务器之前查询请求信息并修改服务上下文。-
Methods inherited from interface org.omg.PortableInterceptor.InterceptorOperations
destroy, name
-
-
-
-
方法详细信息
-
send_request
void send_request(ClientRequestInfo ri) throws ForwardRequest
允许拦截器在请求发送到服务器之前查询请求信息并修改服务上下文。这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的
send_request
操作。 流量堆栈上的拦截器被弹出,并且调用它们的receive_exception
拦截点。 这个拦截点也可能会引发一个ForwardRequest
异常。 如果拦截器抛出此异常,则不会调用其他拦截器的send_request
操作。 流量堆栈上的拦截器被弹出,并且调用它们的receive_other
拦截点。如果从拦截点引发系统异常,合规拦截器应适当地遵循completion_status语义。
completion_status
应为COMPLETED_NO
。- 参数
-
ri
- 有关正在被截获的当前请求的信息。 - 异常
-
ForwardRequest
- 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
-
send_poll
void send_poll(ClientRequestInfo ri)
允许拦截器在时间无关调用(TII)轮询获取回复序列期间查询信息。使用TII,应用程序可以轮询对由轮询客户端或其他客户端先前发送的请求的响应。 通过
send_poll
拦截点向拦截器报告此轮询,通过receive_reply
或receive_exception
拦截点返回响应。 如果在轮询超时到期之前响应不可用,则抛出系统异常TIMEOUT
,并且此异常会调用receive_exception
。这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的
send_poll
操作。 流量堆栈上的拦截器被弹出,它们的receive_exception
拦截点被调用。如果从拦截点发出系统异常,
completion_status
拦截器应正确遵循completion_status
语义。 completion_status为COMPLETED_NO
。- 参数
-
ri
- 有关正在被截获的当前请求的信息。 - 异常
-
TIMEOUT
- 如果在轮询超时到期之前响应不可用,则抛出
-
receive_reply
void receive_reply(ClientRequestInfo ri)
允许拦截器在从服务器返回并在将控制权返回给客户端之前查询答复上的信息。这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的
receive_reply
操作。 流栈中剩余的拦截器应有receive_exception
拦截点。如果从拦截点发出系统异常,
completion_status
拦截器应正确遵循completion_status
语义。completion_status
应为COMPLETED_YES
。- 参数
-
ri
- 有关正在被截获的当前请求的信息。
-
receive_exception
void receive_exception(ClientRequestInfo ri) throws ForwardRequest
向拦截器指示发生异常。 允许拦截器在引发到客户端之前查询异常的信息。这个拦截点可能会引发系统异常。 这样做可以改变这个异常,这个异常从Flow Stack接收到的连续拦截器在
receive_exception
上被接收。 抛出到客户端的异常将是Interceptor抛出的最后一个异常,或者如果没有Interceptor更改异常则是原始异常。这个拦截点也可能会引发
ForwardRequest
异常。 如果拦截器抛出异常,则不会调用其他拦截器的receive_exception
操作。 流栈中剩余的拦截器被弹出,并且调用它们的receive_other
拦截点。如果
completion_status
的异常不是COMPLETED_NO
,那么这个拦截点是不适当的,抛出一个ForwardRequest
异常。 该请求最多一次的语义将丢失。如果从拦截点发出系统异常,合规拦截器应正确遵循
completion_status
语义。 如果原始异常是系统异常,新异常的completion_status
应与原始异常相同。 如果原始异常是用户异常,则新异常的completion_status
应为COMPLETED_YES
。在某些情况下,根据有效的策略,例外(如
COMM_FAILURE
)可能会导致请求重试。 虽然此重试是关于拦截器的新请求,但是原始请求和重试之间存在一个相关点:由于控制尚未返回给客户端,原始请求和重试请求的PortableInterceptor.Current
是相同的。- 参数
-
ri
- 有关正在被截获的当前请求的信息。 - 异常
-
ForwardRequest
- 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
-
receive_other
void receive_other(ClientRequestInfo ri) throws ForwardRequest
允许拦截器在请求导致除了正常回复或异常之外的其他内容时查询可用的信息。 例如,请求可能导致重试(例如,接收到LOCATION_FORWARD
状态的GIOP回复); 或者在异步调用中,回复不会立即跟随请求,但是控制应返回给客户端,并且调用结束截取点。对于重试,根据有效的策略,当指示重试时,新请求可能会也可能不会遵循。 如果一个新的请求没有遵循,而这个请求是一个新的请求,对于拦截器,原始请求和重试之间有一点相关:因为控制没有返回到客户端,所以请求范围为
PortableInterceptor.Current
原始请求和重试请求是一样的。这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的
receive_other
操作。 流栈中剩余的拦截器被弹出,并且调用它们的receive_exception
拦截点。这个拦截点也可能会引发一个
ForwardRequest
异常。 如果拦截器抛出异常,则使用ForwardRequest
异常提供的新信息调用连续的拦截器receive_other
操作。如果从拦截点引起系统异常,则符合标准的拦截器应正确遵循
completion_status
语义。completion_status
应为COMPLETED_NO
。 如果目标调用已经完成,则不会调用此拦截点。- 参数
-
ri
- 有关正在被截获的当前请求的信息。 - 异常
-
ForwardRequest
- 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
-
-