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