All Downloads are FREE. Search and download functionalities are using the official Maven repository.

Ice.DispatchInterceptor Maven / Gradle / Ivy

Go to download

Ice is a comprehensive RPC framework that helps you build distributed applications with minimal effort using familiar object-oriented idioms

There is a newer version: 3.7.10
Show newest version
// **********************************************************************
//
// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************

package Ice;

/**
 * Base class that allows a server intercept incoming requests.
 * The application must derive a concrete class from DispatchInterceptor
 * that implements the {@link DispatchInterceptor#dispatch} operation. An instance of this derived
 * class can be registered with an object adapter like any other servant.
 * 

* A dispatch interceptor is useful particularly to automatically retry requests * that have failed due to a recoverable error condition. **/ public abstract class DispatchInterceptor extends ObjectImpl { /** * Called by the Ice run time to dispatch an incoming request. The implementation * of dispatch must dispatch the request to the actual servant. * * @param request The details of the incoming request. * @return For synchronous dispatch, the return value must be whatever is * returned {@link #ice_dispatch}. For asynchronous dispatch, the return * value must be DispatchAsync. * * @see Request * @see DispatchStatus **/ public abstract DispatchStatus dispatch(Request request); @Override public DispatchStatus __dispatch(IceInternal.Incoming in, Current current) { try { DispatchStatus status = dispatch(in); if(status != DispatchStatus.DispatchAsync) { // // Make sure 'in' owns the connection etc. // in.killAsync(); } return status; } catch(ResponseSentException e) { return DispatchStatus.DispatchAsync; } catch(java.lang.RuntimeException e) { try { in.killAsync(); throw e; } catch(ResponseSentException rse) { return DispatchStatus.DispatchAsync; } } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy