You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2005/02/14 19:27:01 UTC
svn commit: r153824 - in
geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer:
ExecutorFeedingTimerTask.java ThreadPooledTimer.java
Author: djencks
Date: Mon Feb 14 10:26:54 2005
New Revision: 153824
URL: http://svn.apache.org/viewcvs?view=rev&rev=153824
Log:
don't try to actually start a timer that has already been cancelled
Modified:
geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java
geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ThreadPooledTimer.java
Modified: geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java?view=diff&r1=153823&r2=153824
==============================================================================
--- geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java (original)
+++ geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java Mon Feb 14 10:26:54 2005
@@ -39,6 +39,7 @@
private final WorkInfo workInfo;
private final ThreadPooledTimer threadPooledTimer;
+ boolean cancelled = false;
public ExecutorFeedingTimerTask(WorkInfo workInfo, ThreadPooledTimer threadPooledTimer) {
this.workInfo = workInfo;
@@ -59,14 +60,19 @@
threadPooledTimer.registerSynchronization(new CancelSynchronization(this));
} catch (RollbackException e) {
log.info(e);
- throw (IllegalStateException) new IllegalStateException("RollbackException when trying to register cacel synchronization").initCause(e);
+ throw (IllegalStateException) new IllegalStateException("RollbackException when trying to register Cancel Synchronization").initCause(e);
} catch (SystemException e) {
log.info(e);
- throw (IllegalStateException) new IllegalStateException("SystemException when trying to register cacel synchronization").initCause(e);
+ throw (IllegalStateException) new IllegalStateException("SystemException when trying to register Cancel Synchronization").initCause(e);
}
// One cancels the task at this specific time. If the transaction is
// rolled-back, one will recreate it.
+ cancelled = true;
return super.cancel();
+ }
+
+ public boolean isCancelled() {
+ return cancelled;
}
private void doCancel() {
Modified: geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ThreadPooledTimer.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ThreadPooledTimer.java?view=diff&r1=153823&r2=153824
==============================================================================
--- geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ThreadPooledTimer.java (original)
+++ geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/ThreadPooledTimer.java Mon Feb 14 10:26:54 2005
@@ -37,6 +37,8 @@
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.transaction.context.TransactionContext;
import org.apache.geronimo.transaction.context.TransactionContextManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
*
@@ -46,6 +48,8 @@
* */
public class ThreadPooledTimer implements PersistentTimer, GBeanLifecycle {
+ private static final Log log = LogFactory.getLog(ThreadPooledTimer.class);
+
private final ExecutorTaskFactory executorTaskFactory;
private final WorkerPersistence workerPersistence;
private final Executor executor;
@@ -265,7 +269,16 @@
public void afterCompletion(int status) {
if (status == Status.STATUS_COMMITTED) {
- getTimer().schedule(worker, time);
+ if (worker.isCancelled()) {
+ log.trace("Worker is already cancelled, not scheduling");
+ return;
+ }
+ try {
+ getTimer().schedule(worker, time);
+ } catch (IllegalStateException e) {
+ //TODO consider again if catching this exception is appropriate
+ log.info("Couldn't schedule worker " + e.getMessage() + "at (now) " + System.currentTimeMillis() + " for " + time.getTime());
+ }
}
}
}
@@ -287,7 +300,15 @@
public void afterCompletion(int status) {
if (status == Status.STATUS_COMMITTED) {
- getTimer().schedule(worker, time, period);
+ if (worker.isCancelled()) {
+ log.trace("Worker is already cancelled, not scheduling/period");
+ return;
+ }
+ try {
+ getTimer().schedule(worker, time, period);
+ } catch (Exception e) {
+ log.info("Couldn't schedule/period worker " + e.getMessage() + "at (now) " + System.currentTimeMillis() + " for " + time.getTime());
+ }
}
}
}
@@ -309,7 +330,15 @@
public void afterCompletion(int status) {
if (status == Status.STATUS_COMMITTED) {
- getTimer().scheduleAtFixedRate(worker, time, period);
+ if (worker.isCancelled()) {
+ log.trace("Worker is already cancelled, not scheduleAtFixedRate");
+ return;
+ }
+ try {
+ getTimer().scheduleAtFixedRate(worker, time, period);
+ } catch (Exception e) {
+ log.info("Couldn't scheduleAtFixedRate worker " + e.getMessage() + "at (now) " + System.currentTimeMillis() + " for " + time.getTime());
+ }
}
}
}