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, namevoid 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指示请求的重试应发生在异常中给定的新对象。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.