1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.geronimo.clustering; 18 19 import java.util.Map; 20 21 /** 22 * Represents a clustered session. 23 * <p> 24 * A Session is created by a SessionManager and is uniquely identified by its sessionId. More accurately, this 25 * sessionId is unique within the set of SessionManagers from which this Session has been sourced. If two Sessions 26 * have the same sessionId, then a client can be sure that they have been created from two distinct set of 27 * SessionManagers. 28 * <p> 29 * A Session provides Map like contracts to manipulate state information. State information must be Serializable as 30 * it may be marshalled automatically by the underpinning local SessionManager. At any given point of time, a Session 31 * is uniquely "instantiated" once cluster wide. Also, cluster wide accesses to a given Session are 32 * ensured to be serialized by the set of SessionManagers from which the Session has been sourced. The interposition 33 * of a ClusteredInvocation between a client and the Session this client would like to access enforces unique 34 * instantiation and access serialization cluster wide for a given Session. 35 * 36 * @version $Rev$ $Date$ 37 */ 38 public interface Session { 39 40 /** 41 * Gets the sessionId. 42 * 43 * @return sessionId. 44 */ 45 String getSessionId(); 46 47 /** 48 * Map like contract to manipulate state information. 49 */ 50 Object addState(String key, Object value); 51 52 /** 53 * Map like contract to manipulate state information. 54 */ 55 Object getState(String key); 56 57 /** 58 * Map like contract to manipulate state information. 59 */ 60 Object removeState(String key); 61 62 /** 63 * Map like contract to manipulate state information. 64 * <p> 65 * The returned Map is mutable and is backed by the session. 66 */ 67 Map getState(); 68 69 /** 70 * Releases the session. 71 * <p> 72 * When a Session is released, it is released from the underlying set of SessionManagers. In other words, its 73 * sessionId is unknown and its state is permanently lost. After the release of a Session, the behavior of 74 * the other methods is undefined. 75 */ 76 void release(); 77 78 } 79