User: jules_gosnell
Date: 02/01/14 14:25:18
Modified: jetty/src/main/org/jboss/jetty/session
CoarseDistributedStore.java
DistributedHttpSession.java
DistributedHttpSessionManager.java
Added: jetty/src/main/org/jboss/jetty/session
AbstractDistributedStore.java ClusteredStore.java
Log:
another step closer to working DistributedHttpSession. It now passes Watchdog with
only 2 errors
- the same as standalone Jetty.
Update jars from Jetty cvs - I need a fix for the Session stuff to work
Revision Changes Path
1.3 +11 -20
contrib/jetty/src/main/org/jboss/jetty/session/CoarseDistributedStore.java
Index: CoarseDistributedStore.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/session/CoarseDistributedStore.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CoarseDistributedStore.java 2002/01/13 21:30:13 1.2
+++ CoarseDistributedStore.java 2002/01/14 22:25:18 1.3
@@ -5,7 +5,7 @@
* See terms of license at gnu.org.
*/
-// $Id: CoarseDistributedStore.java,v 1.2 2002/01/13 21:30:13 jules_gosnell Exp $
+// $Id: CoarseDistributedStore.java,v 1.3 2002/01/14 22:25:18 jules_gosnell Exp $
//----------------------------------------
@@ -28,23 +28,6 @@
//----------------------------------------
/**
- * An abstraction of a manager for the distributed store of HttpSessions
- *
- * @author <a href="mailto:jules_gosnell@@yahoo.com">Jules Gosnell</a>
- * @version 1.0
- * @since 1.0
- */
-interface AbstractStore
-{
- public String nextId();
- public AbstractHttpSessionData make();
- public AbstractHttpSessionData get(String id);
- public void set(String id, AbstractHttpSessionData data);
-}
-
-//----------------------------------------
-
-/**
* An implementation of a manager of a CMP based distributed store of HttpSessions
*
* @author <a href="mailto:jules_gosnell@@yahoo.com">Jules Gosnell</a>
@@ -52,7 +35,8 @@
* @since 1.0
* @see AbstractStore
*/
-class EJBDistributedStore
+public class
+ CoarseDistributedStore
implements AbstractStore
{
Logger _log = Logger.getLogger(getClass().getName());
@@ -60,7 +44,8 @@
CoarseHttpSessionHome _home;
String _name="ejb/jetty/CoarseHttpSession"; // TODO - parameterise
- EJBDistributedStore()
+ public
+ CoarseDistributedStore()
{
try
{
@@ -150,4 +135,10 @@
}
return ""+System.currentTimeMillis()+"-"+id;
}
+
+ public boolean
+ isValid()
+ {
+ return (_home!=null);
+ }
}
1.3 +3 -8
contrib/jetty/src/main/org/jboss/jetty/session/DistributedHttpSession.java
Index: DistributedHttpSession.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/session/DistributedHttpSession.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DistributedHttpSession.java 2002/01/13 21:30:14 1.2
+++ DistributedHttpSession.java 2002/01/14 22:25:18 1.3
@@ -236,6 +236,8 @@
invalidate()
throws IllegalStateException
{
+ if (!isValid()) throw new IllegalStateException();
+
_isValid=false;
_manager.destroyHttpSession(this);
}
@@ -309,14 +311,9 @@
// perhaps this test should have been 'equals()' - but I
// figure that would be too expensive... - TODO
- Object tmp=value; // assume an attribute was added
-
// notify the old value if necessary
if (oldValue!=null)
- {
notifyValueUnbound(name, oldValue);
- tmp=oldValue; // actually - an attribute was replaced
- }
// notify the new value if necessary
notifyValueBound(name, value);
@@ -340,7 +337,7 @@
{
if (!isValid()) throw new IllegalStateException();
- Object oldValue=null;
+ Object oldValue;
synchronized (_attributes) {
oldValue=_attributes.remove(name);
}
@@ -516,8 +513,6 @@
data.setMaxInactiveInterval(getMaxInactiveInterval());
data.setAttributesWerePassivated(notifyAttributes);
_manager.getStore().set(getId(), data);
-
- _log.info("Session passivated: "+getId());
}
}
1.3 +37 -28
contrib/jetty/src/main/org/jboss/jetty/session/DistributedHttpSessionManager.java
Index: DistributedHttpSessionManager.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/session/DistributedHttpSessionManager.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DistributedHttpSessionManager.java 2002/01/13 21:30:14 1.2
+++ DistributedHttpSessionManager.java 2002/01/14 22:25:18 1.3
@@ -5,7 +5,7 @@
* See terms of license at gnu.org.
*/
-// $Id: DistributedHttpSessionManager.java,v 1.2 2002/01/13 21:30:14 jules_gosnell
Exp $
+// $Id: DistributedHttpSessionManager.java,v 1.3 2002/01/14 22:25:18 jules_gosnell
Exp $
// TODO
@@ -48,7 +48,7 @@
timeOut(Object object)
{
DistributedHttpSession session=(DistributedHttpSession)object;
- // _log.info("session ("+session.getId()+") timed out - cleaning up");
+ System.out.println("session ("+session.getId()+") timed out - cleaning up");
session.getManager().destroyHttpSession(session);
}
}
@@ -67,7 +67,7 @@
//------------------------------------------------------------------------------
/**
*
- * @version $Id: DistributedHttpSessionManager.java,v 1.2 2002/01/13 21:30:14
jules_gosnell Exp $
+ * @version $Id: DistributedHttpSessionManager.java,v 1.3 2002/01/14 22:25:18
jules_gosnell Exp $
* @author [EMAIL PROTECTED]
*/
//----------------------------------------
@@ -75,18 +75,17 @@
public class DistributedHttpSessionManager
implements org.mortbay.jetty.servlet.SessionManager
{
- static AbstractStore _store =new
EJBDistributedStore(); // hardwired for the moment - TODO
static AbstractTimeOutManager _scavenger =new
NaiveTimeOutManager(5*1000, new MyTimeOutNotifier(), new MyTimeOutTester());
-
static { _scavenger.start(); }
+ final AbstractStore _store =new
CoarseDistributedStore();
final Logger _log;
final JBossWebApplicationContext _context;
final ServletHandler _handler;
final List _sessionListeners =new ArrayList();
final List _sessionAttributeListeners =new ArrayList();
final Map _sessions =new HashMap();
- final boolean _isDistributed =true;
+ volatile boolean _isDistributed =false;
volatile boolean _isStarted =false; // TODO
volatile int _dftMaxIdleSecs =30; // negative
means never timeout...
@@ -102,6 +101,14 @@
}
//----------------------------------------
+
+ public void
+ setDistributed(boolean isDistributed)
+ {
+ _isDistributed=isDistributed;
+ }
+
+ //----------------------------------------
// factory
public HttpSession
@@ -133,10 +140,8 @@
{
getScavenger().deregister(session);
removeSession(session);
- if (_store!=null)
- session.passivate();
-
- _log.info("passivated DistributedHttpSession: "+session.getId());
+ session.passivate();
+ _log.info("passivated HttpSession: "+session.getId());
}
public HttpSession
@@ -148,17 +153,18 @@
session = getSession(id);
// 2. check distributed store
- if (session==null && _store!=null)
+ if (session==null && _isDistributed && _store.isValid())
{
AbstractHttpSessionData data=_store.get(id);
- if (data!=null)
+ _log.info("activated HttpSession data: "+id);
+ if (data!=null)
{
session=new DistributedHttpSession(this, id, data);
putSession(id,session);
notifySessionCreated(session);
getScavenger().register(session, System.currentTimeMillis(),
session.getMaxInactiveInterval()*1000);
- _log.info("activated DistributedHttpSession: "+id);
+ _log.info("activated HttpSession: "+id);
}
}
@@ -215,7 +221,7 @@
for (Iterator i = sessions.iterator(); i.hasNext(); )
{
DistributedHttpSession session=(DistributedHttpSession)i.next();
- if (_isDistributed)
+ if (_isDistributed && _store.isValid())
passivateHttpSession(session);
else
destroyHttpSession(session);
@@ -298,12 +304,13 @@
void
notifyAttributeAdded(HttpSession session, String key, Object value)
{
- if (_sessionAttributeListeners.size()>0)
+ int n=_sessionAttributeListeners.size();
+ if (n>0)
{
HttpSessionBindingEvent event =
new HttpSessionBindingEvent(session, key, value);
- for(int i=0;i<_sessionAttributeListeners.size();i++)
+ for(int i=0;i<n;i++)
((HttpSessionAttributeListener)
_sessionAttributeListeners.get(i)).attributeAdded(event);
}
@@ -312,12 +319,13 @@
void
notifyAttributeReplaced(HttpSession session, String key, Object value)
{
- if (_sessionAttributeListeners.size()>0)
+ int n=_sessionAttributeListeners.size();
+ if (n>0)
{
HttpSessionBindingEvent event =
new HttpSessionBindingEvent(session, key, value);
- for(int i=0;i<_sessionAttributeListeners.size();i++)
+ for(int i=0;i<n;i++)
((HttpSessionAttributeListener)
_sessionAttributeListeners.get(i)).attributeReplaced(event);
}
@@ -326,12 +334,13 @@
void
notifyAttributeRemoved(HttpSession session, String key, Object value)
{
- if (_sessionAttributeListeners.size()>0)
+ int n=_sessionAttributeListeners.size();
+ if (n>0)
{
HttpSessionBindingEvent event =
new HttpSessionBindingEvent(session, key, value);
- for(int i=0;i<_sessionAttributeListeners.size();i++)
+ for(int i=0;i<n;i++)
((HttpSessionAttributeListener)
_sessionAttributeListeners.get(i)).attributeRemoved(event);
}
@@ -340,26 +349,26 @@
void
notifySessionCreated(HttpSession session)
{
- if (_sessionListeners.size()>0)
+ int n=_sessionListeners.size();
+ if (n>0)
{
HttpSessionEvent event = new HttpSessionEvent(session);
- for(int i=0;i<_sessionListeners.size();i++)
- ((HttpSessionListener)_sessionListeners.get(i))
- .sessionCreated(event);
+ for(int i=0;i<n;i++)
+ ((HttpSessionListener)_sessionListeners.get(i)) .sessionCreated(event);
}
}
void
notifySessionDestroyed(HttpSession session)
{
- if (_sessionListeners.size()>0)
+ int n=_sessionListeners.size();
+ if (n>0)
{
HttpSessionEvent event = new HttpSessionEvent(session);
- for(int i=0;i<_sessionListeners.size();i++)
- ((HttpSessionListener)_sessionListeners.get(i))
- .sessionDestroyed(event);
+ for(int i=0;i<n;i++)
+ ((HttpSessionListener)_sessionListeners.get(i)).sessionDestroyed(event);
}
}
}
1.1
contrib/jetty/src/main/org/jboss/jetty/session/AbstractDistributedStore.java
Index: AbstractDistributedStore.java
===================================================================
/*
* jBoss, the OpenSource EJB server
*
* Distributable under GPL license.
* See terms of license at gnu.org.
*/
// $Id: AbstractDistributedStore.java,v 1.1 2002/01/14 22:25:18 jules_gosnell Exp $
//----------------------------------------
package org.jboss.jetty.session;
//----------------------------------------
/**
* An abstraction of a manager for the distributed store of HttpSessions
*
* @author <a href="mailto:jules_gosnell@@yahoo.com">Jules Gosnell</a>
* @version 1.0
* @since 1.0
*/
interface AbstractStore
{
public String nextId();
public AbstractHttpSessionData make();
public AbstractHttpSessionData get(String id);
public void set(String id, AbstractHttpSessionData data);
//public void remove(String id);
public boolean isValid();
}
1.1
contrib/jetty/src/main/org/jboss/jetty/session/ClusteredStore.java
Index: ClusteredStore.java
===================================================================
/*
* jBoss, the OpenSource EJB server
*
* Distributable under GPL license.
* See terms of license at gnu.org.
*/
// $Id: ClusteredStore.java,v 1.1 2002/01/14 22:25:18 jules_gosnell Exp $
//----------------------------------------
package org.jboss.jetty.session;
//----------------------------------------
/**
* An abstraction of a manager for the distributed store of HttpSessions
*
* @author <a href="mailto:jules_gosnell@@yahoo.com">Jules Gosnell</a>
* @version 1.0
* @since 1.0
*/
abstract class
ClusteredStore
{
// ClusteredHTTPSessionServiceMBean _mbean;
public
ClusteredStore()
{
// lookup JMX service
}
public String
nextId()
{
// return _mbean.getSessionId();
return null;
}
public AbstractHttpSessionData
make()
{
// return new WHAT ?
return null;
}
public AbstractHttpSessionData
get(String id)
{
// try
// {
// return (AbstractHttpSessionData)_mbean.getHttpSession(id);
// }
// catch (Exception e)
// {
// }
return null;
}
public void
set(String id, AbstractHttpSessionData data)
{
// try
// {
// _mbean.setHttpSession(id, data);
// }
// catch (Exception e)
// {
// }
}
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development