Java tutorial
/* * JCaptcha, the open source java framework for captcha definition and integration * Copyright (c) 2007 jcaptcha.net. All Rights Reserved. * See the LICENSE.txt file distributed with this package. */ /* * jcaptcha, the open source java framework for captcha definition and integration * copyright (c) 2007 jcaptcha.net. All Rights Reserved. * See the LICENSE.txt file distributed with this package. */ /* * jcaptcha, the open source java framework for captcha definition and integration * copyright (c) 2007 jcaptcha.net. All Rights Reserved. * See the LICENSE.txt file distributed with this package. */ package com.octo.captcha.engine.bufferedengine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import EDU.oswego.cs.dl.util.concurrent.ClockDaemon; import com.octo.captcha.engine.CaptchaEngine; import com.octo.captcha.engine.bufferedengine.buffer.CaptchaBuffer; /** * Simple implmentation of the BufferedEngineContainer with ClockDaemon * * @author Benoit Doumas * @author marc-antoine garrigue */ public class SimpleBufferedEngineContainer extends BufferedEngineContainer { private static final Log log = LogFactory.getLog(SimpleBufferedEngineContainer.class.getName()); private ClockDaemon clockDaemonFeed; private ClockDaemon clockDaemonSwap; private Long feedPeriod = new Long(10000); private Long swapPeriod = new Long(1000); //protected BeanFactory factory = null; public SimpleBufferedEngineContainer(CaptchaEngine engine, CaptchaBuffer memoryBuffer, CaptchaBuffer diskBuffer, ContainerConfiguration containerConfiguration, int feedPeriod, int swapPeriod) { super(engine, memoryBuffer, diskBuffer, containerConfiguration); this.swapPeriod = new Long(swapPeriod); this.feedPeriod = new Long(feedPeriod); startScheduler(); } /** * @see com.octo.captcha.engine.bufferedengine.BufferedEngineContainer#startScheduler() */ protected void startScheduler() { clockDaemonFeed = new ClockDaemon(); clockDaemonSwap = new ClockDaemon(); log.debug("daemons initialized"); startDaemon(); } protected void stopDaemon() { this.clockDaemonFeed.shutDown(); this.clockDaemonSwap.shutDown(); } protected void startDaemon() { clockDaemonFeed.executePeriodically(feedPeriod.longValue(), new SimpleDiskFeeder(), true); clockDaemonSwap.executePeriodically(swapPeriod.longValue(), new SimpleDiskToMemory(), true); } public class SimpleDiskFeeder implements Runnable { public void feedDisk() { feedPersistentBuffer(); } public void run() { this.feedDisk(); } } public class SimpleDiskToMemory implements Runnable { public void diskToMemory() { swapCaptchasFromPersistentToVolatileMemory(); } public void run() { this.diskToMemory(); } } }