01: /**
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * 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: */package org.apache.geronimo.clustering;
17:
18: import java.util.Map;
19:
20: /**
21: * Represents a clustered session.
22: * <p>
23: * A Session is created by a SessionManager and is uniquely identified by its sessionId. More accurately, this
24: * sessionId is unique within the set of SessionManagers from which this Session has been sourced. If two Sessions
25: * have the same sessionId, then a client can be sure that they have been created from two distinct set of
26: * SessionManagers.
27: * <p>
28: * A Session provides Map like contracts to manipulate state information. State information must be Serializable as
29: * it may be marshalled automatically by the underpinning local SessionManager. At any given point of time, a Session
30: * is uniquely "instantiated" once cluster wide. Also, cluster wide accesses to a given Session are
31: * ensured to be serialized by the set of SessionManagers from which the Session has been sourced. The interposition
32: * of a ClusteredInvocation between a client and the Session this client would like to access enforces unique
33: * instantiation and access serialization cluster wide for a given Session.
34: *
35: * @version $Rev$ $Date$
36: */
37: public interface Session {
38:
39: /**
40: * Gets the sessionId.
41: *
42: * @return sessionId.
43: */
44: String getSessionId();
45:
46: /**
47: * Map like contract to manipulate state information.
48: */
49: Object addState(String key, Object value);
50:
51: /**
52: * Map like contract to manipulate state information.
53: */
54: Object getState(String key);
55:
56: /**
57: * Map like contract to manipulate state information.
58: */
59: Object removeState(String key);
60:
61: /**
62: * Map like contract to manipulate state information.
63: * <p>
64: * The returned Map is mutable and is backed by the session.
65: */
66: Map getState();
67:
68: /**
69: * Releases the session.
70: * <p>
71: * When a Session is released, it is released from the underlying set of SessionManagers. In other words, its
72: * sessionId is unknown and its state is permanently lost. After the release of a Session, the behavior of
73: * the other methods is undefined.
74: */
75: void release();
76:
77: /**
78: * Notifies the session that state accesses are now completed.
79: * <p>
80: * When state accesses end, the underlying local SessionManager may decide to replicate synchronously or
81: * asynchronously the current state to remote SessionManagers.
82: */
83: void onEndAccess();
84: }
|