escape the potencial NPE for beanClassLoader in Cassandra(Admin)Template

This commit is contained in:
Alex Shvid
2013-11-16 17:15:30 -08:00
parent f04b96e015
commit 5b8c301baf
3 changed files with 45 additions and 6 deletions

View File

@@ -18,6 +18,7 @@ package org.springframework.data.cassandra.config;
import java.util.HashSet;
import java.util.Set;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
@@ -26,6 +27,8 @@ import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.data.annotation.Persistent;
import org.springframework.data.cassandra.convert.CassandraConverter;
import org.springframework.data.cassandra.convert.MappingCassandraConverter;
import org.springframework.data.cassandra.core.CassandraAdminOperations;
import org.springframework.data.cassandra.core.CassandraAdminTemplate;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.core.Keyspace;
@@ -46,7 +49,13 @@ import com.datastax.driver.core.Session;
* @author Alex Shvid
*/
@Configuration
public abstract class AbstractCassandraConfiguration {
public abstract class AbstractCassandraConfiguration implements BeanClassLoaderAware {
/**
* Used by CassandraTemplate and CassandraAdminTemplate
*/
private ClassLoader beanClassLoader;
/**
* Return the name of the keyspace to connect to.
@@ -118,7 +127,22 @@ public abstract class AbstractCassandraConfiguration {
*/
@Bean
public CassandraOperations cassandraTemplate() throws Exception {
return new CassandraTemplate(keyspace());
CassandraTemplate template = new CassandraTemplate(keyspace());
template.setBeanClassLoader(beanClassLoader);
return template;
}
/**
* Creates a {@link CassandraAdminTemplate}.
*
* @return
* @throws Exception
*/
@Bean
public CassandraAdminOperations cassandraAdminTemplate() throws Exception {
CassandraAdminTemplate adminTemplate = new CassandraAdminTemplate(keyspace());
adminTemplate.setBeanClassLoader(beanClassLoader);
return adminTemplate;
}
/**
@@ -170,4 +194,12 @@ public abstract class AbstractCassandraConfiguration {
return initialEntitySet;
}
/**
* Bean ClassLoader Aware for CassandraTemplate/CassandraAdminTemplate
*/
public void setBeanClassLoader(ClassLoader classLoader) {
this.beanClassLoader = classLoader;
}
}

View File

@@ -5,6 +5,7 @@ import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.dao.support.PersistenceExceptionTranslator;
@@ -23,7 +24,7 @@ import com.datastax.driver.core.TableMetadata;
/**
* Default implementation of {@link CassandraAdminOperations}.
*/
public class CassandraAdminTemplate implements CassandraAdminOperations {
public class CassandraAdminTemplate implements CassandraAdminOperations, BeanClassLoaderAware {
private static Logger log = LoggerFactory.getLogger(CassandraAdminTemplate.class);
@@ -239,4 +240,9 @@ public class CassandraAdminTemplate implements CassandraAdminOperations {
}
return entity.getTable();
}
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.beanClassLoader = classLoader;
}
}

View File

@@ -27,6 +27,7 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
@@ -58,7 +59,7 @@ import com.datastax.driver.core.querybuilder.Batch;
* @author Alex Shvid
* @author David Webb
*/
public class CassandraTemplate implements CassandraOperations {
public class CassandraTemplate implements CassandraOperations, BeanClassLoaderAware {
/**
* Simple {@link RowCallback} that will transform {@link Row} into the given target type using the given
@@ -79,8 +80,8 @@ public class CassandraTemplate implements CassandraOperations {
}
@Override
public T doWith(Row object) {
T source = reader.read(type, object);
public T doWith(Row row) {
T source = reader.read(type, row);
return source;
}
}