User: jules_gosnell
Date: 02/02/13 17:03:17
Modified: jetty/src/main/org/jboss/jetty/util
AbstractTimeOutManager.java
NaiveTimeOutManager.java
Log:
a bit more work on timers etc..
comment out Mortbay Logger MBean - it's causing trouble
Revision Changes Path
1.4 +1 -4
contrib/jetty/src/main/org/jboss/jetty/util/AbstractTimeOutManager.java
Index: AbstractTimeOutManager.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/util/AbstractTimeOutManager.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractTimeOutManager.java 1 Feb 2002 19:12:03 -0000 1.3
+++ AbstractTimeOutManager.java 14 Feb 2002 01:03:16 -0000 1.4
@@ -5,7 +5,7 @@
* See terms of license at gnu.org.
*/
-// $Id: AbstractTimeOutManager.java,v 1.3 2002/02/01 19:12:03 jules_gosnell Exp $
+// $Id: AbstractTimeOutManager.java,v 1.4 2002/02/14 01:03:16 jules_gosnell Exp $
//------------------------------------------------------------------------------
@@ -19,9 +19,6 @@
public void register(Object object, long now, long maxInactiveInterval);
public void reregister(Object object, long now, long maxInactiveInterval);
public void deregister(Object object);
-
- public void start();
- public void stop();
public interface
TimeOutHelper
1.7 +72 -57
contrib/jetty/src/main/org/jboss/jetty/util/NaiveTimeOutManager.java
Index: NaiveTimeOutManager.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jetty/src/main/org/jboss/jetty/util/NaiveTimeOutManager.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- NaiveTimeOutManager.java 13 Feb 2002 01:03:06 -0000 1.6
+++ NaiveTimeOutManager.java 14 Feb 2002 01:03:17 -0000 1.7
@@ -5,7 +5,7 @@
* See terms of license at gnu.org.
*/
-// $Id: NaiveTimeOutManager.java,v 1.6 2002/02/13 01:03:06 jules_gosnell Exp $
+// $Id: NaiveTimeOutManager.java,v 1.7 2002/02/14 01:03:17 jules_gosnell Exp $
//------------------------------------------------------------------------------
@@ -16,6 +16,13 @@
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import org.jboss.logging.Logger;
+
+//------------------------------------------------------------------------------
+
+// This needn't be so Naive. If it tried to keep a handle on which was
+// the next entry to timeout it could simply sleep until that time,
+// instead of a set period. This might save some processing time...
//------------------------------------------------------------------------------
@@ -24,9 +31,12 @@
NaiveTimeOutManager
implements AbstractTimeOutManager
{
- final List _entries=new LinkedList();
- final long _interval;
- final TimeOutHelper _helper;
+ protected final Logger _log =Logger.getLogger(getClass().getName());
+ protected final List _entries=new LinkedList();
+ protected final long _interval;
+ protected final TimeOutHelper _helper;
+ protected Sweeper _sweeper;
+
public
NaiveTimeOutManager(long interval, TimeOutHelper helper)
@@ -61,6 +71,29 @@
}
}
+ class Sweeper
+ extends Thread
+ {
+ volatile boolean _running=false;
+
+ public void
+ run()
+ {
+ _log.info("background thread started: "+NaiveTimeOutManager.this);
+ while (_running)
+ {
+ try
+ {
+ sleep(_interval);
+ sweep();
+ }
+ catch (InterruptedException e)
+ {}
+ }
+ _log.info("background thread ended: "+NaiveTimeOutManager.this);
+ }
+ }
+
public synchronized void
register(Object object, long timeRegistered, long maxInactiveInterval)
{
@@ -70,31 +103,46 @@
Entry entry=new Entry(object, timeRegistered, maxInactiveInterval);
synchronized (_entries) {
+ // start sweeping if this is the first to go into the list...
+ if (_entries.size()==0)
+ {
+ _sweeper=new Sweeper(); // can we reuse this thread ? - TODO
+ _sweeper._running=true;
+ _sweeper.start();
+ }
+
_entries.add(entry);
}
}
public synchronized void
- reregister(Object object, long timeRegistered, long maxInactiveInterval)
- {
- // could be optimised - but this is simpler for the moment...
- deregister(object);
- register(object, timeRegistered, maxInactiveInterval);
- }
-
- public synchronized void
deregister(Object object)
{
Entry p=find(object);
synchronized (_entries) {
_entries.remove(p);
+
+ // stop sweeping if this is the last to come out of the list...
+ if (_entries.size()==0)
+ {
+ _sweeper._running=false;
+ _sweeper=null; // cut it loose to finish by itself - dangerous ? -
TODO
+ }
}
}
+ public synchronized void
+ reregister(Object object, long timeRegistered, long maxInactiveInterval)
+ {
+ // could be optimised - but this is simpler for the moment...
+ deregister(object);
+ register(object, timeRegistered, maxInactiveInterval);
+ }
+
// utils...
- Entry
+ protected Entry
find(Object object)
{
Iterator i=_entries.iterator();
@@ -107,52 +155,21 @@
return null;
}
- volatile boolean _loop=true;
-
- protected int _started=0;
-
- public synchronized void
- start()
- {
- if (_started<1)
- {
- new Thread() {
- public void
- run()
- {
- while (_loop)
- {
- try
- {
- sleep(_interval);
- sweep();
- }
- catch (InterruptedException e)
- {}
- }
- }
- }.start();
- }
- _started++;
- }
-
- public synchronized void
- stop()
- {
- _started--;
- if (_started<1)
- _loop=false;
- }
-
- void
+ protected void
sweep()
{
List copy;
synchronized (_entries) {copy=new LinkedList(_entries);};
- long now=System.currentTimeMillis();
+ // what happens if we take our copy, then one of the entries
+ // deregisters from the original list. We may then reregister()
+ // it with the original list if decide to alter it's timeout
+ // period... The entry will remain in the list, although it is
+ // assumed that it was removed. Because the list has an entry it
+ // will carry on waking up and running for ever - even if cut
+ // loose.
- //System.out.println("Sweeping...");
+ long now=System.currentTimeMillis();
Iterator i=copy.iterator();
while (i.hasNext())
@@ -166,11 +183,9 @@
}
catch (Exception e)
{
- System.err.println("Problem notifying: "+p._object);
- e.printStackTrace(); // TODO
+ _log.error("problem notifying: "+p._object, e);
}
}
}
- //System.out.println("Sweeping...done");
- }
+ }
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development