public interface ServerRequestInterceptorOperations extends InterceptorOperations
请求拦截器旨在通过特定点的ORB截取请求/回复序列的流程,以便服务可以查询请求信息并操纵客户端和服务器之间传播的服务上下文。 请求拦截器的主要用途是使ORB服务能够在客户端和服务器之间传输上下文信息。 请求拦截器有两种类型:客户端和服务器端。
要编写服务器端Interceptor,请实现ServerRequestInterceptor接口。
ServerRequestInfo
Modifier and Type | Method and Description |
---|---|
void |
receive_request_service_contexts(ServerRequestInfo ri)
允许拦截器处理服务上下文信息。
|
void |
receive_request(ServerRequestInfo ri)
允许拦截器在所有信息(包括操作参数)可用之后查询请求信息。
|
void |
send_exception(ServerRequestInfo ri)
允许拦截器查询异常信息,并在异常抛出到客户端之前修改回复服务上下文。
|
void |
send_other(ServerRequestInfo ri)
允许拦截器在请求导致除了正常回复或异常之外的其他内容时查询可用的信息。
|
void |
send_reply(ServerRequestInfo ri)
允许拦截器在调用目标操作之后以及在将响应返回给客户端之前查询回复信息并修改回复服务上下文。
|
destroy, name
void receive_request_service_contexts(ServerRequestInfo ri) throws ForwardRequest
在这个截取点,拦截器必须从传入请求中获取其服务上下文信息,将其传送到PortableInterceptor.Current
的插槽。
调用这个拦截点之前调用仆人管理器。 此时操作参数尚不可用。 此拦截点可能或可能不在与目标调用相同的线程中执行。
这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的receive_request_service_contexts
操作。 流量堆栈上的send_exception
器被弹出,并且调用它们的send_exception
拦截点。
这个拦截点也可能会抛出一个ForwardRequest
异常。 如果拦截器抛出此异常,则不会调用其他拦截器的receive_request_service_contexts
操作。 流量堆栈上的send_other
器被弹出,并且调用它们的send_other
拦截点。
如果从拦截点引发系统异常,合法拦截器应正确遵循completion_status
语义。 completion_status
应为COMPLETED_NO。
ri
- 有关正在被截获的当前请求的信息。
ForwardRequest
- 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
void receive_request(ServerRequestInfo ri) throws ForwardRequest
在DSI模型中,由于当用户代码调用arguments
时, receive_request
arguments
, receive_request
从arguments
内arguments
。 在DSI模型中不能调用arguments
。 目标可能在致电set_exception
之前致电arguments
。 通过arguments
或通过set_exception
,ORB将保证receive_request
被调用一次。 如果通过set_exception
,请求参数将导致NO_RESOURCES
被抛出,标准的次要代码为1。
这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的receive_request
操作。 流量堆栈上的send_exception
器被弹出,并且调用它们的send_exception
拦截点。
这个拦截点也可能会抛出一个ForwardRequest
异常。 如果拦截器抛出此异常,则不会调用其他拦截器的receive_request
操作。 流量堆栈上的send_other
器被弹出,并且调用它们的send_other
拦截点。
如果从拦截点引起系统异常,合规拦截器应正确遵循completion_status
语义。 completion_status
应为COMPLETED_NO
。
ri
- 有关正在被截获的当前请求的信息。
ForwardRequest
- 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
void send_reply(ServerRequestInfo ri)
这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的send_reply
操作。 流堆栈中的send_exception
拦截器应有其send_exception
拦截点。
如果从拦截点引发系统异常,则符合标准的拦截器应正确遵循completion_status
语义。 completion_status
应为COMPLETED_YES
。
ri
- 有关正在被截获的当前请求的信息。
void send_exception(ServerRequestInfo ri) throws ForwardRequest
这个拦截点可能会引发系统异常。 这样做可以改变在流程堆栈中弹出的连续拦截器的异常,在他们的呼叫中接收到send_exception
。 抛出到客户端的异常将是Interceptor抛出的最后一个异常,或者如果没有Interceptor更改异常则是原始异常。
这个拦截点也可能会引发一个ForwardRequest
异常。 如果拦截器抛出此异常,则不会调用其他拦截器的send_exception
操作。 流堆栈中的send_other
拦截器应具有被称为send_other
拦截点。
如果completion_status
的异常不是COMPLETED_NO
,那么这个拦截点不适合抛出ForwardRequest
异常。 该请求最多一次的语义将丢失。
如果从拦截点发出系统异常,合规拦截器应正确遵循completion_status
语义。 如果原始异常为系统异常, completion_status
新的异常应是相同的原始。 如果原始异常为用户异常,那么completion_status
新的异常的应是COMPLETED_YES
。
ri
- 有关正在被截获的当前请求的信息。
ForwardRequest
- 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
void send_other(ServerRequestInfo ri) throws ForwardRequest
LOCATION_FORWARD
状态的GIOP回复)。
该拦截点将在与目标调用相同的线程中执行。
这个拦截点可能会引发系统异常。 如果没有,则不会调用其他拦截器的send_other
操作。 流堆栈中的send_exception
拦截器应该有它们的send_exception
拦截点。
这个拦截点也可能会抛出一个ForwardRequest
异常。 如果Interceptor抛出此异常,连续Interceptor send_other
操作被称为与所提供的新的信息ForwardRequest
例外。
如果从拦截点引发系统异常,合规拦截器应正确遵循completion_status
语义。 completion_status
应为COMPLETED_NO
。
ri
- 有关正在被截获的当前请求的信息。
ForwardRequest
- 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。