package example; import java.util.Timer; import java.util.TimerTask; import java.util.logging.Logger; import javax.resource.spi.ResourceAdapter; import javax.resource.spi.ResourceAdapterInternalException; import javax.resource.spi.BootstrapContext; import javax.resource.spi.work.Work; import javax.resource.spi.work.WorkManager; import javax.resource.spi.work.WorkException; import com.caucho.jca.AbstractResourceAdapter; import com.caucho.config.types.Period; /** * Implements a resource which uses uses Work management for * separate threading. */ public class TimerResource extends AbstractResourceAdapter { private static final Logger log = Logger.getLogger(TimerResource.class.getName()); // The initial delay of the task. private long _initialDelay = 0; // The period of the task private long _period = 10000L; // The count of times the server has looped private int _count; private Timer _timer; /** * Sets the initial delay using the Resin-specific period notation: * 10s, 10m, etc. */ public void setInitialDelay(Period initialDelay) { _initialDelay = initialDelay.getPeriod(); } /** * Sets the period using the Resin-specific period notation: * 10s, 10m, etc. */ public void setPeriod(Period period) { _period = period.getPeriod(); } /** * Adds to the count. */ public void addCount() { _count++; } /** * The start method is called when the resource adapter starts, i.e. * when the web-app or host initializes. */ public void start(BootstrapContext ctx) throws ResourceAdapterInternalException { try { log.info("WorkResource[] starting"); WorkManager workManager = ctx.getWorkManager(); Work work = new WorkTask(this); TimerTask timerTask = new WorkScheduleTimerTask(workManager, work); _timer = ctx.createTimer(); _timer.schedule(timerTask, _initialDelay, _period); } catch (Exception e) { throw new ResourceAdapterInternalException(e); } } /** * Called when the resource adapter is stopped, i.e. when the * web-app or host closes down. */ public void stop() { log.info("Resource[" + _count + "] stopping"); _timer.cancel(); } /** * Returns a printable version of the resource. */ public String toString() { return "WorkResource[" + _count + "]"; } }