001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.ha.hasessionstate.interfaces;
023:
024: import org.jboss.ha.hasessionstate.interfaces.PackagedSession;
025: import org.jboss.ha.framework.interfaces.HAPartition;
026:
027: /**
028: * Interface for services providing clustered state session availability
029: *
030: * @see org.jboss.ha.hasessionstate.server.HASessionStateImpl
031: *
032: * @author <a href="mailto:sacha.labourey@cogito-info.ch">Sacha Labourey</a>
033: * @version $Revision: 57188 $
034: *
035: * <p><b>Revisions:</b><br>
036: */
037:
038: public interface HASessionState {
039:
040: public void init() throws Exception;
041:
042: public void start() throws Exception;
043:
044: /**
045: * Information that can be used to clean a cache for example. It indicates that
046: * another node has touched a session that we were previously owning.
047: *
048: */
049: public interface HASessionStateListener {
050: public void sessionExternallyModified(PackagedSession session);
051: }
052:
053: /**
054: * Subscribe to receive notifications when objects gets modified on another node.
055: *
056: */
057: public void subscribe(String appName,
058: HASessionStateListener listener);
059:
060: public void unsubscribe(String appName,
061: HASessionStateListener listener);
062:
063: public HAPartition getCurrentHAPartition();
064:
065: /**
066: * Return the name of this node as used in the computations
067: */
068: public String getNodeName();
069:
070: /**
071: * Share a new session state in the sub-partition of this cluster
072: * @param appName Application name for which is state is shared
073: * @param keyId Key identifier of the state
074: */
075: public void createSession(String appName, Object keyId);
076:
077: /**
078: * Modifies a state already shared
079: * @param appName Application name hosting this state
080: * @param keyId Key identifier of the state to modify
081: * @param state New state
082: */
083: public void setState(String appName, Object keyId, byte[] state)
084: throws java.rmi.RemoteException;
085:
086: /**
087: * Get a particular state
088: * @param appName Application hosting the state
089: * @param keyId Key identifier of the state
090: * @return The state value
091: */
092: public PackagedSession getState(String appName, Object keyId);
093:
094: /**
095: * Get a state and, if it is not already the case, takes its ownership (a state is
096: * always owned by a node)
097: * @param appName Application hosting the state
098: * @param keyId Key identifier of the state
099: * @throws java.rmi.RemoteException Thrown if an exception occurs while getting the ownership of the state
100: * @return The state value
101: */
102: public PackagedSession getStateWithOwnership(String appName,
103: Object keyId) throws java.rmi.RemoteException;
104:
105: /**
106: * Take ownership of a state. Each state is owned by a node.
107: * @param appName Application hosting the state
108: * @param keyId Key identifier of the state
109: * @throws java.rmi.RemoteException Trown if a communication exception occurs while asking other node to get the ownership
110: */
111: public void takeOwnership(String appName, Object keyId)
112: throws java.rmi.RemoteException;
113:
114: /**
115: * Remove a session from the sub-partition
116: * @param appName Application hosting the state
117: * @param keyId Key identifier of the state
118: */
119: public void removeSession(String appName, Object keyId);
120:
121: }
|