/*
* JBoss, Home of Professional Open Source
* Copyright 2010 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.cassandra;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import net.dataforte.cassandra.pool.PoolProperties;
import org.infinispan.loaders.CacheLoaderException;
import org.infinispan.loaders.LockSupportCacheStoreConfig;
import org.infinispan.loaders.keymappers.DefaultTwoWayKey2StringMapper;
import org.infinispan.util.FileLookupFactory;
import org.infinispan.util.Util;
/**
* Configures {@link CassandraCacheStore}.
*/
public class CassandraCacheStoreConfig extends LockSupportCacheStoreConfig {
/**
* @configRef desc="The Cassandra keyspace"
*/
String keySpace = "Infinispan";
/**
* @configRef desc="The Cassandra column family for entries"
*/
String entryColumnFamily = "InfinispanEntries";
/**
* @configRef desc="The Cassandra column family for expirations"
*/
String expirationColumnFamily = "InfinispanExpiration";
/**
* @configRef desc="Whether the keySpace is shared between multiple caches"
*/
boolean sharedKeyspace = false;
/**
* @configRef desc="Which Cassandra consistency level to use when reading"
*/
String readConsistencyLevel = "ONE";
/**
* @configRef desc="Which Cassandra consistency level to use when writing"
*/
String writeConsistencyLevel = "ONE";
/**
* @configRef desc=
* "An optional properties file for configuring the underlying cassandra connection pool"
*/
String configurationPropertiesFile;
/**
* @configRef desc=
* "The keymapper for converting keys to strings (uses the DefaultTwoWayKey2Stringmapper by default)"
*/
String keyMapper = DefaultTwoWayKey2StringMapper.class.getName();
/**
* @configRef desc=
* "Whether to automatically create the keyspace with the appropriate column families (true by default)"
*/
boolean autoCreateKeyspace = true;
protected PoolProperties poolProperties;
public CassandraCacheStoreConfig() {
setCacheLoaderClassName(CassandraCacheStore.class.getName());
poolProperties = new PoolProperties();
}
public String getKeySpace() {
return keySpace;
}
public void setKeySpace(String keySpace) {
this.keySpace = keySpace;
}
public String getEntryColumnFamily() {
return entryColumnFamily;
}
public void setEntryColumnFamily(String entryColumnFamily) {
this.entryColumnFamily = entryColumnFamily;
}
public String getExpirationColumnFamily() {
return expirationColumnFamily;
}
public void setExpirationColumnFamily(String expirationColumnFamily) {
this.expirationColumnFamily = expirationColumnFamily;
}
public boolean isSharedKeyspace() {
return sharedKeyspace;
}
public void setSharedKeyspace(boolean sharedKeyspace) {
this.sharedKeyspace = sharedKeyspace;
}
public String getReadConsistencyLevel() {
return readConsistencyLevel;
}
public void setReadConsistencyLevel(String readConsistencyLevel) {
this.readConsistencyLevel = readConsistencyLevel;
}
public String getWriteConsistencyLevel() {
return writeConsistencyLevel;
}
public void setWriteConsistencyLevel(String writeConsistencyLevel) {
this.writeConsistencyLevel = writeConsistencyLevel;
}
public PoolProperties getPoolProperties() {
return poolProperties;
}
public void setHost(String host) {
poolProperties.setHost(host);
}
public String getHost() {
return poolProperties.getHost();
}
public void setPort(int port) {
poolProperties.setPort(port);
}
public int getPort() {
return poolProperties.getPort();
}
public boolean isFramed() {
return poolProperties.isFramed();
}
public String getPassword() {
return poolProperties.getPassword();
}
public String getUsername() {
return poolProperties.getUsername();
}
public void setFramed(boolean framed) {
poolProperties.setFramed(framed);
}
public void setPassword(String password) {
poolProperties.setPassword(password);
}
public void setUsername(String username) {
poolProperties.setUsername(username);
}
public void setDatasourceJndiLocation(String location) {
poolProperties.setDataSourceJNDI(location);
}
public String getDatasourceJndiLocation() {
return poolProperties.getDataSourceJNDI();
}
public String getConfigurationPropertiesFile() {
return configurationPropertiesFile;
}
public void setConfigurationPropertiesFile(String configurationPropertiesFile)
throws CacheLoaderException {
this.configurationPropertiesFile = configurationPropertiesFile;
readConfigurationProperties();
}
private void readConfigurationProperties() throws CacheLoaderException {
if (configurationPropertiesFile == null || configurationPropertiesFile.trim().length() == 0)
return;
InputStream i = FileLookupFactory.newInstance().lookupFile(configurationPropertiesFile, getClassLoader());
if (i != null) {
Properties p = new Properties();
try {
p.load(i);
} catch (IOException ioe) {
throw new CacheLoaderException("Unable to read environment properties file "
+ configurationPropertiesFile, ioe);
} finally {
Util.close(i);
}
// Apply all properties to the PoolProperties object
for (String propertyName : p.stringPropertyNames()) {
poolProperties.set(propertyName, p.getProperty(propertyName));
}
}
}
public String getKeyMapper() {
return keyMapper;
}
public void setKeyMapper(String keyMapper) {
this.keyMapper = keyMapper;
}
public boolean isAutoCreateKeyspace() {
return autoCreateKeyspace;
}
public void setAutoCreateKeyspace(boolean autoCreateKeyspace) {
this.autoCreateKeyspace = autoCreateKeyspace;
}
}