diff --git a/pom.xml b/pom.xml index 6bdacde5f..c471c15ae 100644 --- a/pom.xml +++ b/pom.xml @@ -85,8 +85,7 @@ localhost embedded - 19042 - + 19042 19160 17001 17000 @@ -240,8 +239,8 @@ org.apache.maven.plugins maven-failsafe-plugin + -Xms1g -Xmx1500m -Xss256k -Dcassandra.version=${cassandra.version} 1 - -Xms1g -Xmx1500m -Xss256k true false @@ -345,26 +344,22 @@ external-cassandra - external - 9042 - + 9042 9160 - 7000 7001 + 7000 testcontainers-cassandra - testcontainers - 0 - + 0 0 - 0 0 + 0 diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/CassandraDelegate.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/CassandraDelegate.java index 714761d1e..a6f5f37ed 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/CassandraDelegate.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/CassandraDelegate.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.testcontainers.containers.CassandraContainer; import org.springframework.data.cassandra.core.cql.SessionCallback; @@ -58,6 +60,8 @@ class CassandraDelegate { private static CassandraContainer container; + private static final Logger log = LoggerFactory.getLogger(CassandraDelegate.class); + private static ResourceHolder resourceHolder; private final long startupTimeout; @@ -269,11 +273,14 @@ class CassandraDelegate { if (container == null) { - container = getCassandraDockerImageName().map(CassandraContainer::new) + container = getCassandraDockerImageName() + .map(CassandraContainer::new) .orElseGet(CassandraContainer::new); container.start(); + log.info("Running with Cassandra Docker Testcontainer Image Name [{}]", container.getDockerImageName()); + this.properties.setCassandraHost(container.getContainerIpAddress()); this.properties.setCassandraPort(container.getFirstMappedPort()); this.properties.update(); @@ -282,11 +289,16 @@ class CassandraDelegate { private Optional getCassandraDockerImageName() { - return Optional.ofNullable(System.getenv("CASSANDRA_VERSION")) - .filter(StringUtils::hasText) + return resolveCassandraVersion() .map(cassandraVersion -> String.format("cassandra:%s", cassandraVersion)); } + private Optional resolveCassandraVersion() { + + return Optional.ofNullable(System.getProperty("cassandra.version", System.getenv("CASSANDRA_VERSION"))) + .filter(StringUtils::hasText); + } + private synchronized void initializeConnection() { this.cassandraPort = resolvePort(); diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/EmbeddedCassandraServerHelper.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/EmbeddedCassandraServerHelper.java index 1c7c7cabb..4e7df4d12 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/EmbeddedCassandraServerHelper.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/EmbeddedCassandraServerHelper.java @@ -15,14 +15,17 @@ */ package org.springframework.data.cassandra.test.util; -import static java.util.concurrent.TimeUnit.*; +import static java.util.concurrent.TimeUnit.MILLISECONDS; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.Arrays; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -47,10 +50,12 @@ import org.springframework.util.FileSystemUtils; @SuppressWarnings("unused") class EmbeddedCassandraServerHelper { + public static final long DEFAULT_STARTUP_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(20); + private static final Log LOG = LogFactory.getLog(EmbeddedCassandraServerHelper.class); - public static final long DEFAULT_STARTUP_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(20); private static final String DEFAULT_TMP_DIR = "target/embeddedCassandra"; + private static final String LOCALHOST = "localhost"; private static final AtomicReference sync = new AtomicReference<>(); private static final AtomicReference cassandraRef = new AtomicReference<>(); @@ -72,7 +77,20 @@ class EmbeddedCassandraServerHelper { * @return the cassandra host */ public static String getHost() { - return DatabaseDescriptor.getRpcAddress().getHostName(); + + return Optional.ofNullable(DatabaseDescriptor.getRpcAddress()) + .map(InetAddress::getHostName) + .orElseGet(EmbeddedCassandraServerHelper::getLocalhost); + } + + private static String getLocalhost() { + + try { + return InetAddress.getLocalHost().getHostName(); + } + catch (UnknownHostException ignore) { + return LOCALHOST; + } } /** @@ -155,7 +173,7 @@ class EmbeddedCassandraServerHelper { checkConfigNameForRestart(file.getAbsolutePath()); - LOG.debug("Starting cassandra..."); + LOG.info(String.format("Starting Embedded Cassandra [v%s]...", System.getProperty("cassandra.version"))); LOG.debug("Initialization needed"); System.setProperty("cassandra.config", "file:" + file.getAbsolutePath()); diff --git a/spring-data-cassandra/src/test/kotlin/org/springframework/data/cassandra/core/Person.kt b/spring-data-cassandra/src/test/kotlin/org/springframework/data/cassandra/core/Person.kt new file mode 100644 index 000000000..401cab26f --- /dev/null +++ b/spring-data-cassandra/src/test/kotlin/org/springframework/data/cassandra/core/Person.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2021 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 + * + * https://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.cassandra.core + +import org.springframework.data.cassandra.core.mapping.* +import java.time.LocalDate +import java.util.* + +@Table("person") +data class Person( + @PrimaryKey("person_id") + val personId: UUID, + @field:Column("first_name") + val firstName: String, + @field:Column("last_name") + val lastName: String, + @field:Column("date_of_birth") + val dateOfBirth: LocalDate, + @field:Column("last_updated_at") + val lastUpdatedAt: LocalDate +) + + +fun main() { + + + val cctx = CassandraMappingContext() + + val pe = cctx.getRequiredPersistentEntity(Person::class.java) + + pe.doWithProperties { persistentProperty: CassandraPersistentProperty -> println(persistentProperty.columnName) } + + +} diff --git a/spring-data-cassandra/src/test/resources/logback.xml b/spring-data-cassandra/src/test/resources/logback.xml index f746e4e57..edee41cf0 100644 --- a/spring-data-cassandra/src/test/resources/logback.xml +++ b/spring-data-cassandra/src/test/resources/logback.xml @@ -10,6 +10,8 @@ + +