You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gd...@apache.org on 2006/12/18 15:07:45 UTC
svn commit: r488272 - in /geronimo/server/trunk: ./
modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/
modules/geronimo-clustering/src/main/java/org/apache/geronimo/clustering/
modules/geronimo-jetty6-builder/src/main/j...
Author: gdamour
Date: Mon Dec 18 06:07:44 2006
New Revision: 488272
URL: http://svn.apache.org/viewvc?view=rev&rev=488272
Log:
* Move to 2.0M3-SNAPSHOT version of WADI dependencies;
* Migrate BasicWADISessionManager to new WADI API;
* Move GBean definition of the session timeout before the clustering
configuration such that clustering builders can retrieve this
session timeout;
* Add Session.onEndAccess contract. This is a notification of the
session performed by clients when they are done with their
data accesses. Implementations can implement this method to queue a
replication; and
* Honor David J.'s TODOs in ClusteredSessionManager.
This fixes GERONIMO-2669 fix o.a.g.j.ClusteredSessionManager to match
changes in Jetty AbstractSessionManager
Modified:
geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/BasicWADISessionManager.java
geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/WADISessionAdaptor.java
geronimo/server/trunk/modules/geronimo-clustering/src/main/java/org/apache/geronimo/clustering/Session.java
geronimo/server/trunk/modules/geronimo-jetty6-builder/src/main/java/org/apache/geronimo/jetty6/deployment/JettyModuleBuilder.java
geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/AbstractClusteredPreHandler.java
geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/ClusteredSessionManager.java
geronimo/server/trunk/pom.xml
Modified: geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/BasicWADISessionManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/BasicWADISessionManager.java?view=diff&rev=488272&r1=488271&r2=488272
==============================================================================
--- geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/BasicWADISessionManager.java (original)
+++ geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/BasicWADISessionManager.java Mon Dec 18 06:07:44 2006
@@ -16,13 +16,7 @@
*/
package org.apache.geronimo.clustering.wadi;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -35,55 +29,27 @@
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
-import org.codehaus.wadi.Collapser;
import org.codehaus.wadi.Contextualiser;
import org.codehaus.wadi.Emoter;
import org.codehaus.wadi.Evicter;
import org.codehaus.wadi.Immoter;
import org.codehaus.wadi.Invocation;
import org.codehaus.wadi.InvocationException;
-import org.codehaus.wadi.Manager;
-import org.codehaus.wadi.ManagerConfig;
import org.codehaus.wadi.Motable;
import org.codehaus.wadi.PoolableInvocationWrapperPool;
import org.codehaus.wadi.SessionPool;
-import org.codehaus.wadi.Streamer;
+import org.codehaus.wadi.core.ConcurrentMotableMap;
import org.codehaus.wadi.group.Dispatcher;
-import org.codehaus.wadi.impl.AbsoluteEvicter;
-import org.codehaus.wadi.impl.ClusterContextualiser;
import org.codehaus.wadi.impl.ClusteredManager;
-import org.codehaus.wadi.impl.DummyContextualiser;
-import org.codehaus.wadi.impl.HashingCollapser;
-import org.codehaus.wadi.impl.HybridRelocater;
import org.codehaus.wadi.impl.MemoryContextualiser;
-import org.codehaus.wadi.impl.SerialContextualiserFrontingMemory;
-import org.codehaus.wadi.impl.SimpleSessionPool;
-import org.codehaus.wadi.impl.SimpleStreamer;
-import org.codehaus.wadi.impl.SimpleValuePool;
-import org.codehaus.wadi.impl.StatelessContextualiser;
-import org.codehaus.wadi.replication.contextualizer.ReplicaAwareContextualiser;
-import org.codehaus.wadi.replication.manager.ReplicaterAdapterFactory;
-import org.codehaus.wadi.replication.manager.ReplicationManager;
+import org.codehaus.wadi.impl.StackContext;
import org.codehaus.wadi.replication.manager.ReplicationManagerFactory;
-import org.codehaus.wadi.replication.manager.basic.SessionReplicationManager;
-import org.codehaus.wadi.replication.storage.ReplicaStorage;
import org.codehaus.wadi.replication.storage.ReplicaStorageFactory;
import org.codehaus.wadi.replication.strategy.BackingStrategyFactory;
-import org.codehaus.wadi.servicespace.ServiceRegistry;
+import org.codehaus.wadi.servicespace.ServiceSpace;
import org.codehaus.wadi.servicespace.ServiceSpaceName;
-import org.codehaus.wadi.servicespace.basic.BasicServiceSpace;
import org.codehaus.wadi.web.WebSession;
-import org.codehaus.wadi.web.WebSessionPool;
-import org.codehaus.wadi.web.impl.AtomicallyReplicableSessionFactory;
-import org.codehaus.wadi.web.impl.DistributableAttributesFactory;
-import org.codehaus.wadi.web.impl.DistributableValueFactory;
-import org.codehaus.wadi.web.impl.DummyRouter;
-import org.codehaus.wadi.web.impl.DummyStatefulHttpServletRequestWrapperPool;
-import org.codehaus.wadi.web.impl.StandardHttpProxy;
-import org.codehaus.wadi.web.impl.StandardSessionWrapperFactory;
-import org.codehaus.wadi.web.impl.WebSessionToSessionPoolAdapter;
-import EDU.oswego.cs.dl.util.concurrent.Sync;
import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -101,7 +67,7 @@
private final CopyOnWriteArrayList listeners;
private ClusteredManager manager;
- private BasicServiceSpace serviceSpace;
+ private ServiceSpace serviceSpace;
public BasicWADISessionManager(WADISessionManagerConfigInfo configInfo,
ReplicationManagerFactory repManagerFactory,
@@ -119,69 +85,28 @@
public void doStart() throws Exception {
Dispatcher underlyingDisp = dispatcherHolder.getDispatcher();
-
- serviceSpace = new BasicServiceSpace(new ServiceSpaceName(configInfo.getServiceSpaceURI()), underlyingDisp);
-
- boolean strictOrdering = true;
- Streamer streamer = new SimpleStreamer();
- Collapser collapser = new HashingCollapser(1024, 10000);
- Map mmap = Collections.synchronizedMap(new HashMap());
- WebSessionPool sessionPool = new SimpleSessionPool(new AtomicallyReplicableSessionFactory());
-
- // end of contextualiser stack
- Contextualiser contextualiser = new DummyContextualiser();
-
- // replica aware contextualiser
- ReplicationManager replicationManager = repManagerFactory.factory(serviceSpace, backingStrategyFactory);
- ReplicationManager sessionRepManager = new SessionReplicationManager(replicationManager, sessionPool);
- contextualiser = new ReplicaAwareContextualiser(contextualiser, sessionRepManager);
-
- // cluster aware contextualiser
- contextualiser = new ClusterContextualiser(contextualiser, collapser, new HybridRelocater(5000, 5000, true));
-
- contextualiser = new StatelessContextualiser(contextualiser, Pattern.compile("GET|POST", 2), true,
- Pattern.compile(".*\\.(JPG|JPEG|GIF|PNG|ICO|HTML|HTM)", 2), false);
-
- // in-memory contextualiser
- Evicter mevicter = new AbsoluteEvicter(configInfo.getSweepInterval(), strictOrdering,
- configInfo.getSessionTimeoutSeconds());
- SessionPool contextPool = new WebSessionToSessionPoolAdapter(sessionPool);
- PoolableInvocationWrapperPool requestPool = new DummyStatefulHttpServletRequestWrapperPool();
- contextualiser = new MotionTracker(contextualiser, mevicter, mmap, streamer, contextPool, requestPool);
-
- contextualiser = new SerialContextualiserFrontingMemory(contextualiser, collapser);
-
- // Manager
- manager = new ClusteredManager(sessionPool,
- new DistributableAttributesFactory(),
- new SimpleValuePool(new DistributableValueFactory()),
- new StandardSessionWrapperFactory(),
- null,
- contextualiser,
- mmap,
- new DummyRouter(),
- false,
- streamer,
- true,
- new ReplicaterAdapterFactory(replicationManager, sessionPool),
- new StandardHttpProxy("jsessionid"),
- serviceSpace,
- configInfo.getNumPartitions(),
- collapser);
-
- manager.init(new ManagerConfig() {
- public void callback(Manager manager) {
- }
-
- public ServletContext getServletContext() {
- return null;
+
+ ServiceSpaceName serviceSpaceName = new ServiceSpaceName(configInfo.getServiceSpaceURI());
+ StackContext stackContext = new StackContext(serviceSpaceName,
+ underlyingDisp,
+ configInfo.getSessionTimeoutSeconds(),
+ configInfo.getNumPartitions(),
+ configInfo.getSweepInterval(),
+ repManagerFactory,
+ repStorageFactory,
+ backingStrategyFactory) {
+ @Override
+ protected MemoryContextualiser newMemoryContextualiser(Contextualiser next,
+ ConcurrentMotableMap mmap,
+ Evicter mevicter,
+ PoolableInvocationWrapperPool requestPool) {
+ return new MotionTracker(next, mevicter, mmap, contextPool, requestPool);
}
- });
+ };
+ stackContext.build();
- ServiceRegistry serviceRegistry = serviceSpace.getServiceRegistry();
- serviceRegistry.register(ReplicaStorage.NAME, repStorageFactory.factory(serviceSpace));
- serviceRegistry.register(ReplicationManager.NAME, replicationManager);
- serviceRegistry.register(ClusteredManager.NAME, manager);
+ serviceSpace = stackContext.getServiceSpace();
+ manager = stackContext.getManager();
serviceSpace.start();
}
@@ -241,12 +166,14 @@
private class MotionTracker extends MemoryContextualiser {
private final Immoter immoter;
-
private final Emoter emoter;
- public MotionTracker(Contextualiser next, Evicter evicter, Map map, Streamer streamer, SessionPool pool,
+ public MotionTracker(Contextualiser next,
+ Evicter evicter,
+ ConcurrentMotableMap map,
+ SessionPool pool,
PoolableInvocationWrapperPool requestPool) {
- super(next, evicter, map, streamer, pool, requestPool);
+ super(next, evicter, map, pool, requestPool);
Immoter immoterDelegate = super.getImmoter();
immoter = new InboundSessionTracker(immoterDelegate);
@@ -279,22 +206,10 @@
public OutboundSessionTracker(Emoter delegate) {
this.delegate = delegate;
}
-
- public void commit(String arg0, Motable arg1) {
- notifyOutboundSessionMigration((WebSession) arg1);
- delegate.commit(arg0, arg1);
- }
-
- public String getInfo() {
- return delegate.getInfo();
- }
-
- public boolean prepare(String arg0, Motable arg1, Motable arg2) {
- return delegate.prepare(arg0, arg1, arg2);
- }
-
- public void rollback(String arg0, Motable arg1) {
- delegate.rollback(arg0, arg1);
+
+ public boolean emote(Motable emotable, Motable immotable) {
+ notifyOutboundSessionMigration((WebSession) emotable);
+ return delegate.emote(emotable, immotable);
}
}
@@ -303,31 +218,24 @@
public InboundSessionTracker(Immoter delegate) {
this.delegate = delegate;
+
}
- public void commit(String arg0, Motable arg1) {
- notifyInboundSessionMigration((WebSession) arg1);
- delegate.commit(arg0, arg1);
- }
-
- public boolean contextualise(Invocation arg0, String arg1, Motable arg2, Sync arg3) throws InvocationException {
- return delegate.contextualise(arg0, arg1, arg2, arg3);
- }
-
- public String getInfo() {
- return delegate.getInfo();
- }
-
- public Motable nextMotable(String arg0, Motable arg1) {
- return delegate.nextMotable(arg0, arg1);
+ public boolean immote(Motable emotable, Motable immotable) {
+ boolean success = delegate.immote(emotable, immotable);
+ if (success) {
+ notifyInboundSessionMigration((WebSession) immotable);
+ }
+ return success;
}
-
- public boolean prepare(String arg0, Motable arg1, Motable arg2) {
- return delegate.prepare(arg0, arg1, arg2);
+
+
+ public boolean contextualise(Invocation arg0, String arg1, Motable arg2) throws InvocationException {
+ return delegate.contextualise(arg0, arg1, arg2);
}
- public void rollback(String arg0, Motable arg1) {
- delegate.rollback(arg0, arg1);
+ public Motable newMotable() {
+ return delegate.newMotable();
}
}
Modified: geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/WADISessionAdaptor.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/WADISessionAdaptor.java?view=diff&rev=488272&r1=488271&r2=488272
==============================================================================
--- geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/WADISessionAdaptor.java (original)
+++ geronimo/server/trunk/modules/geronimo-clustering-wadi/src/main/java/org/apache/geronimo/clustering/wadi/WADISessionAdaptor.java Mon Dec 18 06:07:44 2006
@@ -38,7 +38,7 @@
}
public String getSessionId() {
- return session.getId();
+ return session.getName();
}
public void release() {
@@ -63,6 +63,10 @@
public Map getState() {
return state;
+ }
+
+ public void onEndAccess() {
+ session.onEndProcessing();
}
private class StateMap implements Map {
Modified: geronimo/server/trunk/modules/geronimo-clustering/src/main/java/org/apache/geronimo/clustering/Session.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-clustering/src/main/java/org/apache/geronimo/clustering/Session.java?view=diff&rev=488272&r1=488271&r2=488272
==============================================================================
--- geronimo/server/trunk/modules/geronimo-clustering/src/main/java/org/apache/geronimo/clustering/Session.java (original)
+++ geronimo/server/trunk/modules/geronimo-clustering/src/main/java/org/apache/geronimo/clustering/Session.java Mon Dec 18 06:07:44 2006
@@ -75,4 +75,11 @@
*/
void release();
+ /**
+ * Notifies the session that state accesses are now completed.
+ * <p>
+ * When state accesses end, the underlying local SessionManager may decide to replicate synchronously or
+ * asynchronously the current state to remote SessionManagers.
+ */
+ void onEndAccess();
}
Modified: geronimo/server/trunk/modules/geronimo-jetty6-builder/src/main/java/org/apache/geronimo/jetty6/deployment/JettyModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6-builder/src/main/java/org/apache/geronimo/jetty6/deployment/JettyModuleBuilder.java?view=diff&rev=488272&r1=488271&r2=488272
==============================================================================
--- geronimo/server/trunk/modules/geronimo-jetty6-builder/src/main/java/org/apache/geronimo/jetty6/deployment/JettyModuleBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-jetty6-builder/src/main/java/org/apache/geronimo/jetty6/deployment/JettyModuleBuilder.java Mon Dec 18 06:07:44 2006
@@ -404,6 +404,11 @@
// configure listeners.
configureListeners(webApp, webModuleData);
+ webModuleData.setAttribute(JettyWebAppContext.GBEAN_ATTR_SESSION_TIMEOUT,
+ (webApp.getSessionConfigArray().length == 1 && webApp.getSessionConfigArray(0).getSessionTimeout() != null) ?
+ new Integer(webApp.getSessionConfigArray(0).getSessionTimeout().getBigIntegerValue().intValue() * 60) :
+ defaultSessionTimeoutSeconds);
+
Boolean distributable = webApp.getDistributableArray().length == 1 ? Boolean.TRUE : Boolean.FALSE;
webModuleData.setAttribute("distributable", distributable);
if (Boolean.TRUE == distributable) {
@@ -416,11 +421,6 @@
} else {
configureNoClustering(moduleContext, webModuleData);
}
-
- webModuleData.setAttribute("sessionTimeoutSeconds",
- (webApp.getSessionConfigArray().length == 1 && webApp.getSessionConfigArray(0).getSessionTimeout() != null) ?
- new Integer(webApp.getSessionConfigArray(0).getSessionTimeout().getBigIntegerValue().intValue() * 60) :
- defaultSessionTimeoutSeconds);
// configure mime mappings.
configureMimeMappings(webApp, webModuleData);
Modified: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/AbstractClusteredPreHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/AbstractClusteredPreHandler.java?view=diff&rev=488272&r1=488271&r2=488272
==============================================================================
--- geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/AbstractClusteredPreHandler.java (original)
+++ geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/AbstractClusteredPreHandler.java Mon Dec 18 06:07:44 2006
@@ -18,14 +18,13 @@
import java.io.IOException;
+import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.ServletException;
import org.apache.geronimo.clustering.ClusteredInvocation;
import org.apache.geronimo.clustering.ClusteredInvocationException;
import org.apache.geronimo.jetty6.AbstractPreHandler;
-import org.mortbay.jetty.Handler;
import org.mortbay.jetty.HttpException;
/**
@@ -35,11 +34,6 @@
public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
throws IOException, ServletException {
-// if (dispatch != Handler.REQUEST) {
-// next.handle(target, request, response, dispatch);
-// return;
-// }
-//
ClusteredInvocation invocation = newClusteredInvocation(target, request, response, dispatch);
try {
invocation.invoke();
@@ -70,10 +64,6 @@
this.request = request;
this.response = response;
this.dispatch = dispatch;
- //TODO figure out if the normal SessionHandler will set the requestedSessionId correctly.
- //My (djencks) guess is yes it will.
-// GeronimoServletHttpRequest servletHttpRequest = (GeronimoServletHttpRequest) request.getWrapper();
-// servletHttpRequest.setRequestedSessionId(pathParams);
}
protected void invokeLocally() throws ClusteredInvocationException {
Modified: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/ClusteredSessionManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/ClusteredSessionManager.java?view=diff&rev=488272&r1=488271&r2=488272
==============================================================================
--- geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/ClusteredSessionManager.java (original)
+++ geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/cluster/ClusteredSessionManager.java Mon Dec 18 06:07:44 2006
@@ -20,6 +20,7 @@
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
import org.apache.geronimo.clustering.SessionAlreadyExistException;
import org.apache.geronimo.clustering.SessionListener;
@@ -43,7 +44,7 @@
workerName = workerName.replaceAll(" ", "");
HashSessionIdManager sessionIdManager = new HashSessionIdManager();
sessionIdManager.setWorkerName(workerName);
- setMetaManager(sessionIdManager);
+ setIdManager(sessionIdManager);
sessionManager.registerListener(new MigrationListener());
@@ -57,16 +58,21 @@
}
@Override
+ public void complete(HttpSession session) {
+ ClusteredSession clusteredSession = (ClusteredSession) session;
+ clusteredSession.session.onEndAccess();
+ }
+
+ @Override
protected void addSession(Session session) {
- //todo gianni fixme
+ ClusteredSession clusteredSession = (ClusteredSession) session;
synchronized (idToSession) {
- idToSession.put(session.getId(), (ClusteredSession) session);
+ idToSession.put(clusteredSession.getClusterId(), clusteredSession);
}
}
@Override
protected void removeSession(String idInCluster) {
- //todo gianni fixme
synchronized (idToSession) {
idToSession.remove(idInCluster);
}
@@ -74,7 +80,6 @@
@Override
protected Session getSession(String idInCluster) {
- //todo gianni fixme
synchronized (idToSession) {
return idToSession.get(idInCluster);
}
@@ -82,38 +87,33 @@
@Override
public int getSessions() {
- //todo gianni fixme
synchronized (idToSession) {
return idToSession.size();
}
}
-
- /**
- * @deprecated. Need to review if it is needed.
- */
@Override
public Map getSessionMap() {
- //todo gianni fixme
- return idToSession;
+ throw new AssertionError("getSessionMap is never used.");
}
@Override
protected void invalidateSessions() {
- //todo gianni fixme
+ synchronized (idToSession) {
+ idToSession.clear();
+ }
}
-
private class MigrationListener implements SessionListener {
public void notifyInboundSessionMigration(org.apache.geronimo.clustering.Session session) {
- addSession(new ClusteredSession(session), false);
+ addSession(new MigratedClusteredSession(session), false);
}
public void notifyOutboundSessionMigration(org.apache.geronimo.clustering.Session session) {
ClusteredSession clusteredSession;
synchronized (idToSession) {
- clusteredSession = (ClusteredSession) idToSession.remove(session.getSessionId());
+ clusteredSession = idToSession.remove(session.getSessionId());
}
if (null == clusteredSession) {
throw new AssertionError("Session [" + session + "] is undefined");
@@ -128,26 +128,64 @@
protected ClusteredSession(HttpServletRequest request) {
super(request);
try {
- this.session = sessionManager.createSession(getId());
+ this.session = sessionManager.createSession(getClusterId());
} catch (SessionAlreadyExistException e) {
throw (IllegalStateException) new IllegalStateException().initCause(e);
}
synchronized (idToSession) {
- idToSession.put(getId(), this);
+ idToSession.put(getClusterId(), this);
}
+ forceDefinitionOfSessionValues();
}
protected ClusteredSession(org.apache.geronimo.clustering.Session session) {
super(session.getSessionId());
this.session = session;
- synchronized (idToSession) {
- idToSession.put(getId(), this);
- }
+ forceDefinitionOfSessionValues();
}
@Override
protected Map newAttributeMap() {
return session.getState();
+ }
+
+ @Override
+ protected String getClusterId() {
+ return super.getClusterId();
+ }
+
+ @Override
+ public void invalidate() throws IllegalStateException {
+ super.invalidate();
+ session.release();
+ }
+
+ private void forceDefinitionOfSessionValues() {
+ String TOKEN = "GeronimoIntegration_forceDefinitionOfSessionValues";
+ setAttribute(TOKEN, TOKEN);
+ removeAttribute(TOKEN);
+ }
+ }
+
+ public class MigratedClusteredSession extends ClusteredSession {
+ private final String clusterId;
+
+ protected MigratedClusteredSession(org.apache.geronimo.clustering.Session session) {
+ super(session);
+ clusterId = session.getSessionId();
+ synchronized (idToSession) {
+ idToSession.put(clusterId, this);
+ }
+ }
+
+ /**
+ * Implementation note: we need to override this method as the constructor Session(String) has a bug:
+ * it should also set _clusterId. W/o this override, this Session is bound to the null key during inbound
+ * session migration.
+ */
+ @Override
+ protected String getClusterId() {
+ return clusterId;
}
}
Modified: geronimo/server/trunk/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/pom.xml?view=diff&rev=488272&r1=488271&r2=488272
==============================================================================
--- geronimo/server/trunk/pom.xml (original)
+++ geronimo/server/trunk/pom.xml Mon Dec 18 06:07:44 2006
@@ -882,19 +882,19 @@
<dependency>
<groupId>org.codehaus.wadi</groupId>
<artifactId>wadi-core</artifactId>
- <version>2.0M2</version>
+ <version>2.0M3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.codehaus.wadi</groupId>
<artifactId>wadi-group</artifactId>
- <version>2.0M2</version>
+ <version>2.0M3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.codehaus.wadi</groupId>
<artifactId>wadi-tribes</artifactId>
- <version>2.0M2</version>
+ <version>2.0M3-SNAPSHOT</version>
</dependency>
<dependency>