/* * JBoss, Home of Professional Open Source * Copyright 2009 Red Hat Inc. and/or its affiliates and other * contributors as indicated by the @author tags. All rights reserved. * See the copyright.txt in the distribution for a full listing of * individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.infinispan.loaders.decorators; import org.infinispan.config.ConfigurationBeanVisitor; import org.infinispan.config.ConfigurationDoc; import org.infinispan.config.ConfigurationDocRef; import org.infinispan.config.Dynamic; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; /** * Configuration for the async cache loader. If enabled, this provides you with asynchronous writes * to the cache store, giving you 'write-behind' caching. * * @author Manik Surtani * @author Vladimir Blagojevic * @since 4.0 * * @see <a href="../../../../config.html#ce_loader_async">Configuration reference</a> */ @XmlAccessorType(XmlAccessType.PUBLIC_MEMBER) @ConfigurationDoc(name="async",parentName="loader") public class AsyncStoreConfig extends AbstractDecoratorConfigurationBean { /** The serialVersionUID */ private static final long serialVersionUID = -8596800049019004961L; @ConfigurationDocRef(bean=AsyncStoreConfig.class,targetElement="setEnabled") protected Boolean enabled = false; @ConfigurationDocRef(bean=AsyncStoreConfig.class,targetElement="setThreadPoolSize") protected Integer threadPoolSize = 1; @Dynamic @ConfigurationDocRef(bean=AsyncStoreConfig.class,targetElement="setFlushLockTimeout") protected Long flushLockTimeout = 5000L; // By default a bit under the default cache stop timeout @Dynamic @ConfigurationDocRef(bean=AsyncStoreConfig.class,targetElement="setShutdownTimeout") protected Long shutdownTimeout = 25000L; @ConfigurationDocRef(bean=AsyncStoreConfig.class,targetElement="setModificationQueueSize") protected Integer modificationQueueSize = 1024; @XmlAttribute public Boolean isEnabled() { return enabled; } /** * If true, all modifications to this cache store happen asynchronously, on a separate thread. * * @param enabled * @deprecated The visibility of this method will be reduced in favour of more fluent writer method calls. */ @Deprecated public void setEnabled(Boolean enabled) { testImmutability("enabled"); this.enabled = enabled; } @XmlAttribute public Integer getThreadPoolSize() { return threadPoolSize; } /** * Size of the thread pool whose threads are responsible for applying the modifications. * * @param threadPoolSize * @deprecated The visibility of this method will be reduced. Use {@link #threadPoolSize(Integer)} instead. */ @Deprecated public void setThreadPoolSize(Integer threadPoolSize) { testImmutability("threadPoolSize"); this.threadPoolSize = threadPoolSize; } /** * Size of the thread pool whose threads are responsible for applying the modifications. * * @param threadPoolSize */ public AsyncStoreConfig threadPoolSize(Integer threadPoolSize) { testImmutability("threadPoolSize"); this.threadPoolSize = threadPoolSize; return this; } @XmlAttribute public Long getFlushLockTimeout() { return flushLockTimeout; } /** * Timeout to acquire the lock which guards the state to be flushed to the cache store * periodically. * * @param stateLockTimeout * @deprecated The visibility of this method will be reduced. Use {@link #flushLockTimeout(Long)} instead. */ @Deprecated public AsyncStoreConfig setFlushLockTimeout(Long stateLockTimeout) { testImmutability("flushLockTimeout"); this.flushLockTimeout = stateLockTimeout; return this; } /** * Timeout to acquire the lock which guards the state to be flushed to the cache store * periodically. * * @param stateLockTimeout */ public AsyncStoreConfig flushLockTimeout(Long stateLockTimeout) { testImmutability("flushLockTimeout"); this.flushLockTimeout = stateLockTimeout; return this; } @XmlAttribute public Long getShutdownTimeout() { return shutdownTimeout; } /** * Timeout to stop the cache store. When the store is stopped it's possible that some * modifications still need to be applied; you likely want to set a very large timeout to make * sure to not loose data * * @param shutdownTimeout * @deprecated The visibility of this method will be reduced. Use {@link #shutdownTimeout(Long)} instead. */ @Deprecated public void setShutdownTimeout(Long shutdownTimeout) { testImmutability("shutdownTimeout"); this.shutdownTimeout = shutdownTimeout; } /** * Timeout to stop the cache store. When the store is stopped it's possible that some * modifications still need to be applied; you likely want to set a very large timeout to make * sure to not loose data * * @param shutdownTimeout */ public AsyncStoreConfig shutdownTimeout(Long shutdownTimeout) { testImmutability("shutdownTimeout"); this.shutdownTimeout = shutdownTimeout; return this; } @XmlAttribute public Integer getModificationQueueSize() { return modificationQueueSize; } public AsyncStoreConfig modificationQueueSize(Integer modificationQueueSize) { testImmutability("modificationQueueSize"); this.modificationQueueSize = modificationQueueSize; return this; } /** * Sets the size of the modification queue for the async store. If updates are made at a rate that is faster than * the underlying cache store can process this queue, then the async store behaves like a synchronous store for * that period, blocking until the queue can accept more elements. * * @param modificationQueueSize The size of the modification queue */ @Deprecated public void setModificationQueueSize(Integer modificationQueueSize) { testImmutability("modificationQueueSize"); this.modificationQueueSize = modificationQueueSize; } @Override public AsyncStoreConfig clone() { return (AsyncStoreConfig) super.clone(); } @Override public void accept(ConfigurationBeanVisitor v) { v.visitAsyncStoreConfig(this); } }