/* * Copyright 2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.springframework.data.gemfire.config.annotation; import java.util.Map; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.type.AnnotationMetadata; import org.springframework.data.gemfire.CacheFactoryBean; /** * Spring {@link Configuration} class used to configure, construct and initialize * a GemFire peer {@link org.apache.geode.cache.Cache} instance in a Spring application context. * * @author John Blum * @see org.springframework.context.annotation.Bean * @see org.springframework.context.annotation.Configuration * @see org.springframework.data.gemfire.config.annotation.AbstractCacheConfiguration * @see org.apache.geode.cache.Cache * @since 1.9.0 */ @Configuration @SuppressWarnings("unused") public class PeerCacheConfiguration extends AbstractCacheConfiguration { protected static final boolean DEFAULT_ENABLE_AUTO_RECONNECT = false; protected static final boolean DEFAULT_USE_CLUSTER_CONFIGURATION = false; protected static final String DEFAULT_NAME = "SpringBasedPeerCacheApplication"; private boolean enableAutoReconnect = DEFAULT_ENABLE_AUTO_RECONNECT; private boolean useClusterConfiguration = DEFAULT_USE_CLUSTER_CONFIGURATION; private Integer lockLease; private Integer lockTimeout; private Integer messageSyncInterval; private Integer searchTimeout; @Bean public CacheFactoryBean gemfireCache() { CacheFactoryBean gemfireCache = constructCacheFactoryBean(); gemfireCache.setEnableAutoReconnect(enableAutoReconnect()); gemfireCache.setLockLease(lockLease()); gemfireCache.setLockTimeout(lockTimeout()); gemfireCache.setMessageSyncInterval(messageSyncInterval()); gemfireCache.setSearchTimeout(searchTimeout()); gemfireCache.setUseBeanFactoryLocator(useBeanFactoryLocator()); gemfireCache.setUseClusterConfiguration(useClusterConfiguration()); return gemfireCache; } /** * {@inheritDoc} */ @Override @SuppressWarnings("unchecked") protected <T extends CacheFactoryBean> T newCacheFactoryBean() { return (T) new CacheFactoryBean(); } /** * Configures GemFire peer {@link org.apache.geode.cache.Cache} specific settings. * * @param importMetadata {@link AnnotationMetadata} containing peer cache meta-data used to configure * the GemFire peer {@link org.apache.geode.cache.Cache}. * @see org.springframework.core.type.AnnotationMetadata * @see #isCacheServerOrPeerCacheApplication(AnnotationMetadata) */ @Override protected void configureCache(AnnotationMetadata importMetadata) { super.configureCache(importMetadata); if (isCacheServerOrPeerCacheApplication(importMetadata)) { Map<String, Object> peerCacheApplicationAttributes = importMetadata.getAnnotationAttributes(getAnnotationTypeName()); setEnableAutoReconnect(Boolean.TRUE.equals(peerCacheApplicationAttributes.get("enableAutoReconnect"))); setLockLease((Integer) peerCacheApplicationAttributes.get("lockLease")); setLockTimeout((Integer) peerCacheApplicationAttributes.get("lockTimeout")); setMessageSyncInterval((Integer) peerCacheApplicationAttributes.get("messageSyncInterval")); setSearchTimeout((Integer) peerCacheApplicationAttributes.get("searchTimeout")); setUseClusterConfiguration(Boolean.TRUE.equals(peerCacheApplicationAttributes.get("useClusterConfiguration"))); String locators = (String) peerCacheApplicationAttributes.get("locators"); if (hasValue(locators)) { setLocators(locators); } } } /** * {@inheritDoc} */ @Override protected Class getAnnotationType() { return PeerCacheApplication.class; } /* (non-Javadoc) */ void setEnableAutoReconnect(boolean enableAutoReconnect) { this.enableAutoReconnect = enableAutoReconnect; } protected boolean enableAutoReconnect() { return this.enableAutoReconnect; } /* (non-Javadoc) */ void setLockLease(Integer lockLease) { this.lockLease = lockLease; } protected Integer lockLease() { return this.lockLease; } /* (non-Javadoc) */ void setLockTimeout(Integer lockTimeout) { this.lockTimeout = lockTimeout; } protected Integer lockTimeout() { return this.lockTimeout; } /* (non-Javadoc) */ void setMessageSyncInterval(Integer messageSyncInterval) { this.messageSyncInterval = messageSyncInterval; } protected Integer messageSyncInterval() { return this.messageSyncInterval; } /* (non-Javadoc) */ void setSearchTimeout(Integer searchTimeout) { this.searchTimeout = searchTimeout; } protected Integer searchTimeout() { return this.searchTimeout; } /* (non-Javadoc) */ void setUseClusterConfiguration(boolean useClusterConfiguration) { this.useClusterConfiguration = useClusterConfiguration; } protected boolean useClusterConfiguration() { return this.useClusterConfiguration; } @Override public String toString() { return DEFAULT_NAME; } }