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