Module  java.corba

Interface ServerRequestInterceptorOperations

  • All Superinterfaces:
    InterceptorOperations
    All Known Subinterfaces:
    ServerRequestInterceptor


    public interface ServerRequestInterceptorOperations
    extends InterceptorOperations
    服务器端请求拦截器。

    请求拦截器旨在通过特定点的ORB截取请求/回复序列的流程,以便服务可以查询请求信息并操纵客户端和服务器之间传播的服务上下文。 请求拦截器的主要用途是使ORB服务能够在客户端和服务器之间传输上下文信息。 请求拦截器有两种类型:客户端和服务器端。

    要编写服务器端Interceptor,请实现ServerRequestInterceptor接口。

    另请参见:
    ServerRequestInfo
    • 方法详细信息

      • 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_requestarguments内调用了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指示请求的重试应发生在异常中给定的新对象。