Module  java.corba

Interface ClientRequestInterceptorOperations

  • All Superinterfaces:
    InterceptorOperations
    All Known Subinterfaces:
    ClientRequestInterceptor


    public interface ClientRequestInterceptorOperations
    extends InterceptorOperations
    客户端请求拦截器。

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

    要写一个客户端拦截器,实现ClientRequestInterceptor接口。

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

      • send_request

        void send_request​(ClientRequestInfo ri)
                   throws ForwardRequest
        允许拦截器在请求发送到服务器之前查询请求信息并修改服务上下文。

        这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的send_request操作。 流量堆栈上的拦截器被弹出,并且调用它们的receive_exception拦截点。 这个拦截点也可能会引发一个ForwardRequest异常。 如果拦截器抛出此异常,则不会调用其他拦截器的send_request操作。 流量堆栈上的拦截器被弹出,并且调用它们的receive_other拦截点。

        如果从拦截点引发系统异常,合规拦截器应适当地遵循completion_status语义。 completion_status应为COMPLETED_NO

        参数
        ri - 有关正在被截获的当前请求的信息。
        异常
        ForwardRequest - 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
      • send_poll

        void send_poll​(ClientRequestInfo ri)
        允许拦截器在时间无关调用(TII)轮询获取回复序列期间查询信息。

        使用TII,应用程序可以轮询对由轮询客户端或其他客户端先前发送的请求的响应。 通过send_poll拦截点向拦截器报告此轮询,通过receive_replyreceive_exception拦截点返回响应。 如果在轮询超时到期之前响应不可用,则抛出系统异常TIMEOUT ,并且此异常会调用receive_exception

        这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的send_poll操作。 流量堆栈上的拦截器被弹出,它们的receive_exception拦截点被调用。

        如果从拦截点发出系统异常, completion_status拦截器应正确遵循completion_status语义。 completion_status为COMPLETED_NO

        参数
        ri - 有关正在被截获的当前请求的信息。
        异常
        TIMEOUT - 如果在轮询超时到期之前响应不可用,则抛出
      • receive_reply

        void receive_reply​(ClientRequestInfo ri)
        允许拦截器在从服务器返回并在将控制权返回给客户端之前查询答复上的信息。

        这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的receive_reply操作。 流栈中剩余的拦截器应有receive_exception拦截点。

        如果从拦截点发出系统异常, completion_status拦截器应正确遵循completion_status语义。 completion_status应为COMPLETED_YES

        参数
        ri - 有关正在被截获的当前请求的信息。
      • receive_exception

        void receive_exception​(ClientRequestInfo ri)
                        throws ForwardRequest
        向拦截器指示发生异常。 允许拦截器在引发到客户端之前查询异常的信息。

        这个拦截点可能会引发系统异常。 这样做可以改变这个异常,这个异常从Flow Stack接收到的连续拦截器在receive_exception上被接收。 抛出到客户端的异常将是Interceptor抛出的最后一个异常,或者如果没有Interceptor更改异常则是原始异常。

        这个拦截点也可能会引发ForwardRequest异常。 如果拦截器抛出异常,则不会调用其他拦截器的receive_exception操作。 流栈中剩余的拦截器被弹出,并且调用它们的receive_other拦截点。

        如果completion_status的异常不是COMPLETED_NO ,那么这个拦截点是不适当的,抛出一个ForwardRequest异常。 该请求最多一次的语义将丢失。

        如果从拦截点发出系统异常,合规拦截器应正确遵循completion_status语义。 如果原始异常是系统异常,新异常的completion_status应与原始异常相同。 如果原始异常是用户异常,则新异常的completion_status应为COMPLETED_YES

        在某些情况下,根据有效的策略,例外(如COMM_FAILURE )可能会导致请求重试。 虽然此重试是关于拦截器的新请求,但是原始请求和重试之间存在一个相关点:由于控制尚未返回给客户端,原始请求和重试请求的PortableInterceptor.Current是相同的。

        参数
        ri - 有关正在被截获的当前请求的信息。
        异常
        ForwardRequest - 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。
      • receive_other

        void receive_other​(ClientRequestInfo ri)
                    throws ForwardRequest
        允许拦截器在请求导致除了正常回复或异常之外的其他内容时查询可用的信息。 例如,请求可能导致重试(例如,接收到LOCATION_FORWARD状态的GIOP回复); 或者在异步调用中,回复不会立即跟随请求,但是控制应返回给客户端,并且调用结束截取点。

        对于重试,根据有效的策略,当指示重试时,新请求可能会也可能不会遵循。 如果一个新的请求没有遵循,而这个请求是一个新的请求,对于拦截器,原始请求和重试之间有一点相关:因为控制没有返回到客户端,所以请求范围为PortableInterceptor.Current原始请求和重试请求是一样的。

        这个拦截点可能会引发系统异常。 如果是,则不会调用其他拦截器的receive_other操作。 流栈中剩余的拦截器被弹出,并且调用它们的receive_exception拦截点。

        这个拦截点也可能会引发一个ForwardRequest异常。 如果拦截器抛出异常,则使用ForwardRequest异常提供的新信息调用连续的拦截器receive_other操作。

        如果从拦截点引起系统异常,则符合标准的拦截器应正确遵循completion_status语义。 completion_status应为COMPLETED_NO 如果目标调用已经完成,则不会调用此拦截点。

        参数
        ri - 有关正在被截获的当前请求的信息。
        异常
        ForwardRequest - 如果抛出,向ORB指示请求的重试应发生在异常中给定的新对象。