diff --git a/pekko-sample-distributed-workers-scala/README.md b/pekko-sample-distributed-workers-scala/README.md index 3df0d8b1..72331cd2 100644 --- a/pekko-sample-distributed-workers-scala/README.md +++ b/pekko-sample-distributed-workers-scala/README.md @@ -254,13 +254,13 @@ As long as one of the four nodes is alive the cluster will keep working. You can You can start more cluster front-end nodes using port numbers between 3000-3999: ```bash -sbt "runMain worker.Main 3002 +sbt "runMain worker.Main 3002" ``` Any port outside these ranges creates a worker node, for which you can also play around with the number of worker actors on using the second parameter. ```bash -sbt "runMain worker.Main 5009 4 +sbt "runMain worker.Main 5009 4" ``` ## The journal diff --git a/pekko-sample-distributed-workers-scala/build.sbt b/pekko-sample-distributed-workers-scala/build.sbt index d652b042..45c2c7f2 100644 --- a/pekko-sample-distributed-workers-scala/build.sbt +++ b/pekko-sample-distributed-workers-scala/build.sbt @@ -17,9 +17,9 @@ libraryDependencies ++= Seq( "org.apache.pekko" %% "pekko-serialization-jackson" % pekkoVersion, "org.apache.pekko" %% "pekko-persistence-cassandra" % cassandraPluginVersion, // this allows us to start cassandra from the sample - "org.apache.pekko" %% "pekko-persistence-cassandra-launcher" % cassandraPluginVersion, + "org.testcontainers" % "testcontainers-cassandra" % "2.0.1", "ch.qos.logback" % "logback-classic" % logbackVersion, // test dependencies "org.apache.pekko" %% "pekko-actor-testkit-typed" % pekkoVersion % Test, "org.scalatest" %% "scalatest" % "3.2.19" % Test, - "commons-io" % "commons-io" % "2.11.0" % Test) + "commons-io" % "commons-io" % "2.20.0" % Test) diff --git a/pekko-sample-distributed-workers-scala/src/main/scala/worker/Main.scala b/pekko-sample-distributed-workers-scala/src/main/scala/worker/Main.scala index 03002fd9..9b2e27a9 100644 --- a/pekko-sample-distributed-workers-scala/src/main/scala/worker/Main.scala +++ b/pekko-sample-distributed-workers-scala/src/main/scala/worker/Main.scala @@ -6,7 +6,6 @@ import org.apache.pekko.actor.typed.ActorSystem import org.apache.pekko.actor.typed.eventstream.EventStream import org.apache.pekko.actor.typed.scaladsl.{ ActorContext, Behaviors } import org.apache.pekko.cluster.typed.{ Cluster, SelfUp, Subscribe } -import org.apache.pekko.persistence.cassandra.testkit.CassandraLauncher import com.typesafe.config.{ Config, ConfigFactory } object Main { @@ -93,16 +92,15 @@ object Main { * in a real application a pre-existing Apache Cassandra cluster should be used. */ def startCassandraDatabase(): Unit = { - val databaseDirectory = new File("target/cassandra-db") - CassandraLauncher.start( - databaseDirectory, - CassandraLauncher.DefaultTestConfigResource, - clean = false, - port = 9042) + import org.testcontainers.cassandra.CassandraContainer + import org.testcontainers.utility.DockerImageName + val container = new CassandraContainer(DockerImageName.parse("cassandra:5.0.5")) + // defaults to port 9042 + container.start() // shut the cassandra instance down when the JVM stops sys.addShutdownHook { - CassandraLauncher.stop() + container.stop() } } diff --git a/pekko-sample-persistence-dc-java/pom.xml b/pekko-sample-persistence-dc-java/pom.xml index 91eb20a8..5106cc17 100644 --- a/pekko-sample-persistence-dc-java/pom.xml +++ b/pekko-sample-persistence-dc-java/pom.xml @@ -67,9 +67,9 @@ ${pekko-persistence-cassandra.version} - org.apache.pekko - pekko-persistence-cassandra-launcher_${scala.binary.version} - ${pekko-persistence-cassandra.version} + org.testcontainers + testcontainers-cassandra + 2.0.1 org.apache.pekko diff --git a/pekko-sample-persistence-dc-java/src/main/java/sample/persistence/res/MainApp.java b/pekko-sample-persistence-dc-java/src/main/java/sample/persistence/res/MainApp.java index 4577f15d..eebb3540 100644 --- a/pekko-sample-persistence-dc-java/src/main/java/sample/persistence/res/MainApp.java +++ b/pekko-sample-persistence-dc-java/src/main/java/sample/persistence/res/MainApp.java @@ -14,8 +14,9 @@ import org.apache.pekko.cluster.sharding.typed.ReplicatedShardingExtension; import org.apache.pekko.cluster.typed.Cluster; import org.apache.pekko.management.javadsl.PekkoManagement; -import org.apache.pekko.persistence.cassandra.testkit.CassandraLauncher; import org.apache.pekko.persistence.typed.ReplicaId; +import org.testcontainers.cassandra.CassandraContainer; +import org.testcontainers.utility.DockerImageName; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import sample.persistence.res.counter.ThumbsUpCounter; @@ -81,12 +82,13 @@ private static Config config(int port, String dc) { * in a real application a pre-existing Cassandra cluster should be used. */ private static void startCassandraDatabase() { - File databaseDirectory = new File("target/cassandra-db"); - CassandraLauncher.start( - databaseDirectory, - CassandraLauncher.DefaultTestConfigResource(), - false, - 9042); + final CassandraContainer container = new CassandraContainer( + DockerImageName.parse("cassandra:5.0.5")); + // defaults to port 9042 + container.start(); + + // shut the cassandra instance down when the JVM stops + Runtime.getRuntime().addShutdownHook(new Thread(() -> container.stop())); } } diff --git a/pekko-sample-persistence-dc-scala/build.sbt b/pekko-sample-persistence-dc-scala/build.sbt index 5f93e064..09fafc6c 100644 --- a/pekko-sample-persistence-dc-scala/build.sbt +++ b/pekko-sample-persistence-dc-scala/build.sbt @@ -20,16 +20,11 @@ libraryDependencies ++= Seq( "org.apache.pekko" %% "pekko-management" % pekkoClusterManagementVersion, "org.apache.pekko" %% "pekko-management-cluster-http" % pekkoClusterManagementVersion, "org.apache.pekko" %% "pekko-persistence-cassandra" % cassandraPluginVersion, - "org.apache.pekko" %% "pekko-persistence-cassandra-launcher" % cassandraPluginVersion, + "org.testcontainers" % "testcontainers-cassandra" % "2.0.1", "ch.qos.logback" % "logback-classic" % logbackVersion, "org.apache.pekko" %% "pekko-persistence-testkit" % pekkoVersion % Test, "org.scalatest" %% "scalatest" % "3.2.19" % Test) -// transitive dependency of akka 2.5x that is brought in by addons but evicted -dependencyOverrides += "org.apache.pekko" %% "pekko-protobuf" % pekkoVersion -dependencyOverrides += "org.apache.pekko" %% "pekko-cluster-tools" % pekkoVersion -dependencyOverrides += "org.apache.pekko" %% "pekko-coordination" % pekkoVersion - licenses := Seq(("CC0", url("http://creativecommons.org/publicdomain/zero/1.0"))) // Startup aliases for the cassandra server and for two seed nodes one for eu-west and another for eu-central diff --git a/pekko-sample-persistence-dc-scala/src/main/scala/sample/persistence/res/MainApp.scala b/pekko-sample-persistence-dc-scala/src/main/scala/sample/persistence/res/MainApp.scala index cd780411..cfda199a 100644 --- a/pekko-sample-persistence-dc-scala/src/main/scala/sample/persistence/res/MainApp.scala +++ b/pekko-sample-persistence-dc-scala/src/main/scala/sample/persistence/res/MainApp.scala @@ -8,7 +8,6 @@ import org.apache.pekko.actor.typed.scaladsl.Behaviors import org.apache.pekko.cluster.sharding.typed.{ ReplicatedSharding, ReplicatedShardingExtension } import org.apache.pekko.http.scaladsl.Http import org.apache.pekko.management.scaladsl.PekkoManagement -import org.apache.pekko.persistence.cassandra.testkit.CassandraLauncher import org.apache.pekko.persistence.typed.ReplicaId import com.typesafe.config.{ Config, ConfigFactory } import sample.persistence.res.bank.BankAccount @@ -88,12 +87,16 @@ object MainApp { * in a real application a pre-existing Cassandra cluster should be used. */ def startCassandraDatabase(): Unit = { - val databaseDirectory = new File("target/cassandra-db") - CassandraLauncher.start( - databaseDirectory, - CassandraLauncher.DefaultTestConfigResource, - clean = false, - port = 9042) + import org.testcontainers.cassandra.CassandraContainer + import org.testcontainers.utility.DockerImageName + val container = new CassandraContainer(DockerImageName.parse("cassandra:5.0.5")) + // defaults to port 9042 + container.start() + + // shut the cassandra instance down when the JVM stops + sys.addShutdownHook { + container.stop() + } } }