diff --git a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala index a8bf06bbe1..809e915333 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala @@ -12,6 +12,7 @@ import akka.ConfigurationException import akka.actor._ import akka.dispatch.MonitorableThreadFactory import akka.event.{ Logging, LoggingAdapter } +import akka.japi.Util import akka.pattern._ import akka.remote.{ DefaultFailureDetectorRegistry, FailureDetector, _ } import com.typesafe.config.{ Config, ConfigFactory } @@ -265,13 +266,23 @@ class Cluster(val system: ExtendedActorSystem) extends Extension { * An actor system can only join a cluster once. Additional attempts will be ignored. * When it has successfully joined it must be restarted to be able to join another * cluster or to join the same cluster again. - * - * JAVA API: Use akka.japi.Util.immutableSeq to convert a java.lang.Iterable - * to the type needed for the seedNodes parameter. */ def joinSeedNodes(seedNodes: immutable.Seq[Address]): Unit = clusterCore ! InternalClusterAction.JoinSeedNodes(seedNodes.toVector) + /** + * Java API + * + * Join the specified seed nodes without defining them in config. + * Especially useful from tests when Addresses are unknown before startup time. + * + * An actor system can only join a cluster once. Additional attempts will be ignored. + * When it has successfully joined it must be restarted to be able to join another + * cluster or to join the same cluster again. + */ + def joinSeedNodes(seedNodes: java.util.List[Address]): Unit = + joinSeedNodes(Util.immutableSeq(seedNodes)) + /** * Send command to issue state transition to LEAVING for the node specified by 'address'. * The member will go through the status changes [[MemberStatus]] `Leaving` (not published to diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala index e151ca9381..1bdf8ee9a1 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala @@ -3,6 +3,7 @@ */ package akka.cluster +import akka.actor.Address import com.typesafe.config.ConfigFactory import akka.remote.testkit.MultiNodeConfig import akka.remote.testkit.MultiNodeSpec @@ -45,7 +46,8 @@ abstract class SingletonClusterSpec(multiNodeConfig: SingletonClusterMultiNodeCo "become singleton cluster when started with seed-nodes" taggedAs LongRunningTest in { runOn(first) { - cluster.joinSeedNodes(Vector(first)) + val nodes: immutable.IndexedSeq[Address] = Vector(first) // + cluster.joinSeedNodes(nodes) awaitMembersUp(1) clusterView.isSingletonCluster should ===(true) } diff --git a/akka-cluster/src/test/java/akka/cluster/ClusterJavaCompileTest.java b/akka-cluster/src/test/java/akka/cluster/ClusterJavaCompileTest.java new file mode 100644 index 0000000000..6a2afefe39 --- /dev/null +++ b/akka-cluster/src/test/java/akka/cluster/ClusterJavaCompileTest.java @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2009-2015 Typesafe Inc. + */ + +package akka.cluster; + +import akka.actor.ActorSystem; +import akka.actor.Address; + +import java.util.Collections; +import java.util.List; + +// Doc code, compile only +@SuppressWarnings("ConstantConditions") +public class ClusterJavaCompileTest { + + final ActorSystem system = null; + final Cluster cluster = null; + + + public void compileJoinSeedNodesInJava() { + final List
addresses = Collections.singletonList(new Address("akka.tcp", "MySystem")); + cluster.joinSeedNodes(addresses); + } + +}