escape the potencial NPE for beanClassLoader in Cassandra(Admin)Template
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user