10000 basic spring java config-based CassandraRepository now working · forumjava/spring-data-cassandra@56eee40 · GitHub
[go: up one dir, main page]

Skip to content

Commit 56eee40

Browse files
committed
basic spring java config-based CassandraRepository now working
1 parent df096bf commit 56eee40

File tree

38 files changed

+302
-475
lines changed

38 files changed

+302
-475
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.springframework.cassandra.config;
2+
3+
/**
4+
* Simple data structure to be used when setting the replication factor for a given data center.
5+
*/
6+
public class DataCenterReplication {
7+
8+
public static DataCenterReplication[] dcrs(DataCenterReplication... dcrs) {
9+
return dcrs;
10+
}
11+
12+
public static DataCenterReplication dcr(String dataCenter, long replicationFactor) {
13+
return new DataCenterReplication(dataCenter, replicationFactor);
14+
}
15+
16+
public String dataCenter;
17+
public long replicationFactor;
18+
19+
public DataCenterReplication(String dataCenter, long replicationFactor) {
20+
this.dataCenter = dataCenter;
21+
this.replicationFactor = replicationFactor;
22+
}
23+
}

spring-cassandra/src/main/java/org/springframework/cassandra/config/KeyspaceActionSpecificationFactoryBean.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ private CreateKeyspaceSpecification generateCreateKeyspaceSpecification() {
109109
int i = 0;
110110
for (String datacenter : networkTopologyDataCenters) {
111111
replicationStrategyMap.put(new DefaultOption(datacenter, Long.class, true, false, false),
112-
networkTopologyReplicationFactors.get(i));
113-
i++;
112+
networkTopologyReplicationFactors.get(i++));
114113
}
115114
}
116115

spring-cassandra/src/main/java/org/springframework/cassandra/config/KeyspaceAttributes.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,6 @@ public static Map<Option, Object> newNetworkReplication(DataCenterReplication...
7474
return builder.build();
7575
}
7676

77-
/**
78-
* Simple data structure to be used when setting the replication factor for a given data center.
79-
*/
80-
public static class DataCenterReplication {
81-
public String dataCenter;
82-
public long replicationFactor;
83-
84-
public DataCenterReplication(String dataCenter, long replicationFactor) {
85-
this.dataCenter = dataCenter;
86-
this.replicationFactor = replicationFactor;
87-
}
88-
}
89-
9077
private ReplicationStrategy replicationStrategy = DEFAULT_REPLICATION_STRATEGY;
9178
private long replicationFactor = DEFAULT_REPLICATION_FACTOR;
9279
private boolean durableWrites = DEFAULT_DURABLE_WRITES;
Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44
import java.util.List;
55

66
import org.springframework.cassandra.config.CassandraClusterFactoryBean;
7-
import org.springframework.cassandra.config.CassandraSessionFactoryBean;
87
import org.springframework.cassandra.config.CompressionType;
98
import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
109
import org.springframework.cassandra.core.keyspace.DropKeyspaceSpecification;
1110
import org.springframework.context.annotation.Bean;
1211
import org.springframework.context.annotation.Configuration;
1312

1413
import com.datastax.driver.core.AuthProvider;
15-
import com.datastax.driver.core.Cluster;
1614
import com.datastax.driver.core.PoolingOptions;
1715
import com.datastax.driver.core.SocketOptions;
1816
import com.datastax.driver.core.policies.LoadBalancingPolicy;
@@ -26,9 +24,7 @@
2624
* @author Matthew T. Adams
2725
*/
2826
@Configuration
29-
public abstract class AbstractCassandraConfiguration {
30-
31-
protected abstract String getKeyspaceName();
27+
public abstract class AbstractClusterConfiguration {
3228

3329
@Bean
3430
public CassandraClusterFactoryBean cluster() throws Exception {
@@ -52,18 +48,6 @@ public CassandraClusterFactoryBean cluster() throws Exception {
5248
return bean;
5349
}
5450

55-
@Bean
56-
public CassandraSessionFactoryBean session() throws Exception {
57-
58-
Cluster cluster = cluster().getObject();
59-
60-
CassandraSessionFactoryBean bean = new CassandraSessionFactoryBean();
61-
bean.setCluster(cluster);
62-
bean.setKeyspaceName(getKeyspaceName());
63-
64-
return bean;
65-
}
66-
6751
protected List<String> getStartupScripts() {
6852
return Collections.emptyList();
6953
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.springframework.cassandra.config.java;
2+
3+
import org.springframework.cassandra.config.CassandraSessionFactoryBean;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
7+
import com.datastax.driver.core.Cluster;
8+
9+
/**
10+
* Base class for Spring Cassandra configuration that can handle creating namespaces, execute arbitrary CQL on startup &
11+
* shutdown, and optionally drop namespaces.
12+
*
13+
* @author Matthew T. Adams
14+
*/
15+
@Configuration
16+
public abstract class AbstractSessionConfiguration extends AbstractClusterConfiguration {
17+
18+
protected abstract String getKeyspaceName();
19+
20+
@Bean
21+
public CassandraSessionFactoryBean session() throws Exception {
22+
23+
Cluster cluster = cluster().getObject();
24+
25+
CassandraSessionFactoryBean bean = new CassandraSessionFactoryBean();
26+
bean.setCluster(cluster);
27+
bean.setKeyspaceName(getKeyspaceName());
28+
29+
return bean;
30+
}
31+
}

spring-cassandra/src/main/java/org/springframework/cassandra/core/CassandraUncategorizedDataAccessException.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
*/
2626
public class CassandraUncategorizedDataAccessException extends UncategorizedDataAccessException {
2727

28+
private static final long serialVersionUID = -155082875466458401L;
29+
2830
/**
2931
* Create the Exception
3032
*

spring-cassandra/src/main/java/org/springframework/cassandra/core/keyspace/CreateKeyspaceSpecification.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.springframework.cassandra.core.keyspace;
22

3+
import org.springframework.cassandra.config.DataCenterReplication;
4+
import org.springframework.cassandra.core.keyspace.KeyspaceOption.ReplicationStrategy;
5+
import org.springframework.cassandra.core.util.MapBuilder;
6+
37
public class CreateKeyspaceSpecification extends KeyspaceSpecification<CreateKeyspaceSpecification> {
48

59
private boolean ifNotExists = false;
@@ -35,6 +39,33 @@ public static CreateKeyspaceSpecification createKeyspace() {
3539
return new CreateKeyspaceSpecification();
3640
}
3741

42+
public CreateKeyspaceSpecification withSimpleReplication() {
43+
return withSimpleReplication(1);
44+
}
45+
46+
public CreateKeyspaceSpecification withSimpleReplication(long replicationFactor) {
47+
return with(
48+
KeyspaceOption.REPLICATION,
49+
MapBuilder
50+
.map(Option.class, Object.class)
51+
.entry(new DefaultOption("class", String.class, true, false, true),
52+
ReplicationStrategy.SIMPLE_STRATEGY.getValue())
53+
.entry(new DefaultOption("replication_factor", Long.class, true, false, false), replicationFactor).build());
54+
}
55+
56+
public CreateKeyspaceSpecification withNetworkReplication(DataCenterReplication... dcrs) {
57+
58+
MapBuilder<Option, Object> builder = MapBuilder.map(Option.class, Object.class).entry(
59+
new DefaultOption("class", String.class, true, false, true),
60+
ReplicationStrategy.NETWORK_TOPOLOGY_STRATEGY.getValue());
61+
62+
for (DataCenterReplication dcr : dcrs) {
63+
builder.entry(new DefaultOption(dcr.dataCenter, Long.class, true, false, false), dcr.replicationFactor);
64+
}
65+
66+
return with(KeyspaceOption.REPLICATION, builder.build());
67+
}
68+
3869
@Override
3970
public CreateKeyspaceSpecification name(String name) {
4071
return (CreateKeyspaceSpecification) super.name(name);

spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ public class AbstractEmbeddedCassandraIntegrationTest {
2323

2424
static Logger log = LoggerFactory.getLogger(AbstractEmbeddedCassandraIntegrationTest.class);
2525

26-
protected static final BuildProperties PROPS = new BuildProperties();
27-
protected static final String CASSANDRA_CONFIG = "spring-cassandra.yaml";
28-
protected static final String CASSANDRA_HOST = "localhost";
29-
protected static final int CASSANDRA_NATIVE_PORT = PROPS.getCassandraPort();
26+
protected static String CASSANDRA_CONFIG = "spring-cassandra.yaml";
27+
protected static String CASSANDRA_HOST = "localhost";
28+
29+
protected static BuildProperties PROPS = new BuildProperties();
30+
protected static int CASSANDRA_NATIVE_PORT = PROPS.getCassandraPort();
3031

3132
/**
3233
* The session connected to the system keyspace.

spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/AbstractKeyspaceCreatingConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package org.springframework.cassandra.test.integration.config.java;
22

33
import org.springframework.cassandra.config.CassandraSessionFactoryBean;
4-
import org.springframework.cassandra.config.java.AbstractCassandraConfiguration;
4+
import org.springframework.cassandra.config.java.AbstractSessionConfiguration;
55
import org.springframework.context.annotation.Configuration;
66
import org.springframework.util.StringUtils;
77

88
import com.datastax.driver.core.KeyspaceMetadata;
99
import com.datastax.driver.core.Session;
1010

1111
@Configuration
12-
public abstract class AbstractKeyspaceCreatingConfiguration extends AbstractCassandraConfiguration {
12+
public abstract class AbstractKeyspaceCreatingConfiguration extends AbstractSessionConfiguration {
1313

1414
@Override
1515
public CassandraSessionFactoryBean session() throws Exception {

spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/support/AbstractTestJavaConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package org.springframework.cassandra.test.integration.support;
22

3-
import org.springframework.cassandra.config.java.AbstractCassandraConfiguration;
3+
import org.springframework.cassandra.config.java.AbstractSessionConfiguration;
44
import org.springframework.context.annotation.Configuration;
55

66
@Configuration
7-
public abstract class AbstractTestJavaConfig extends AbstractCassandraConfiguration {
7+
public abstract class AbstractTestJavaConfig extends AbstractSessionConfiguration {
88

99
public static BuildProperties PROPS = new BuildProperties();
1010
public static final int PORT = PROPS.getCassandraPort();

0 commit comments

Comments
 (0)
0