/**
*
*/
package org.openntf.domino.thread;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* A Daemon implementation. Must be queued to XOTS if you want to run this periodically
*
* @author Nathan T. Freeman
*
*/
// Not yet ready!
@Deprecated
public abstract class AbstractDominoDaemon<T> extends AbstractDominoRunnable {
private static final Logger log_ = Logger.getLogger(AbstractDominoDaemon.class.getName());
private static final long serialVersionUID = 1L;
private long delay_ = 100l; //default to 100ms delay cycle
private AccessControlContext acc_;
/**
*
*/
public AbstractDominoDaemon() {
}
public AbstractDominoDaemon(final AccessControlContext acc) {
acc_ = acc;
}
public AbstractDominoDaemon(final long delay, final AccessControlContext acc) {
delay_ = delay;
acc_ = acc;
}
public void setThreadDelay(final long delay) {
delay_ = delay;
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try {
while (!shouldStop()) {
try {
Object result = null;
if (acc_ != null) {
result = AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
@Override
public Object run() throws Exception {
return process();
}
}, acc_);
} else {
result = process();
}
if (result != null) {
setChanged();
notifyObservers(result);
}
Thread.sleep(delay_);
} catch (InterruptedException ie) {
stop();
} catch (PrivilegedActionException e) {
stop();
log_.log(Level.SEVERE, "Error in " + this.getClass().getName(), e);
}
}
setChanged();
notifyObservers();
deleteObservers();
} finally {
}
}
public abstract Object process();
}