blob: e21aa37a60a34de42e33f8522faffbe464a883b0 [file] [log] [blame]
/* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.etch.util.core.io;
/**
* Out-of-band query, control, and notification interface for sessions.
*/
public interface Session
{
/**
* Gets a configuration or operational value from the handler. The
* request is passed up the chain of sessions until some session
* recognizes the query, whereupon it returns the requested value.
*
* @param query an object representing a query, which could be as
* simple as a string, integer, or enum, or more complex such as
* a class with instance variables for query terms.
*
* @return the requested value, or null if not defined.
*
* @throws UnsupportedOperationException if the query is not recognized
* by any session (which is to say, if the last session in the session
* chain does not recognize it, it should throw this exception). Typically
* this would be a service's client or server implementation.
*
* @throws Exception
*/
public Object sessionQuery( Object query ) throws Exception;
/**
* Sets a configuration or operational value in the session. The
* request is passed up the chain of sessions until some session
* recognizes the control, whereupon it stores the specified value
* and returns.
*
* @param control an object representing a control, which could be as
* simple as a string, integer, or enum, or more complex such as
* a class with instance variables for control terms.
*
* @param value the value to set.
*
* @throws IllegalArgumentException if the value is not the right
* type or if the value is inappropriate.
*
* @throws UnsupportedOperationException if the control is not recognized
* by any session (which is to say, if the last session in the session
* chain does not recognize it, it should throw this exception). Typically
* this would be a service's client or server implementation.
*
* @throws Exception
*/
public void sessionControl( Object control, Object value ) throws Exception;
/**
* Notifies the chain of sessions of the specified event. Unlike query
* and control operations above, events are always passed up to the
* top to allow all sessions to notice them.
*
* @param event a class which represents the event, possibly with
* parameters. The simplest event could be a string, integer,
* or enum, but any class instance will do (as long as some session
* in the chain expects it).
*
* @throws Exception
*/
public void sessionNotify( Object event ) throws Exception;
///////////////////////
// Well-known events //
///////////////////////
/**
* Session event reporting the transport is up.
*/
public final static String UP = "UP";
/**
* Session event reporting the transport is down.
*/
public final static String DOWN = "DOWN";
}