diff --git a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ClusterSharding.scala b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ClusterSharding.scala index 7bd2e59b0d..1abd8ba95d 100755 --- a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ClusterSharding.scala +++ b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ClusterSharding.scala @@ -479,15 +479,17 @@ class ClusterSharding(system: ExtendedActorSystem) extends Extension { * The entity type must be registered with the [[#start]] or [[#startProxy]] method before it * can be used here. Messages to the entity is always sent via the `ShardRegion`. */ - def shardRegion(typeName: String): ActorRef = regions.get(typeName) match { - case null ⇒ - regions.get(typeName) match { - case null ⇒ - throw new IllegalArgumentException( - s"Shard type [$typeName] must be started first") - case ref ⇒ ref - } - case ref ⇒ ref + def shardRegion(typeName: String): ActorRef = { + regions.get(typeName) match { + case null ⇒ + proxies.get(proxyName(typeName, None)) match { + case null ⇒ + throw new IllegalArgumentException( + s"Shard type [$typeName] must be started first") + case ref ⇒ ref + } + case ref ⇒ ref + } } /** @@ -650,7 +652,7 @@ private[akka] class ClusterShardingGuardian extends Actor { try { val encName = URLEncoder.encode(s"${typeName}Proxy", ByteString.UTF_8) val cName = coordinatorSingletonManagerName(encName) - val cPath = coordinatorPath(encName) + val cPath = coordinatorPath(URLEncoder.encode(typeName, ByteString.UTF_8)) // it must be possible to start several proxies, one per data center val actorName = dataCenter match { case None ⇒ encName diff --git a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala index f9d8aad224..20051cdba8 100644 --- a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala +++ b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardRegion.scala @@ -27,7 +27,6 @@ import akka.cluster.ClusterSettings.DataCenter * @see [[ClusterSharding$ ClusterSharding extension]] */ object ShardRegion { - /** * INTERNAL API * Factory method for the [[akka.actor.Props]] of the [[ShardRegion]] actor. diff --git a/akka-cluster-sharding/src/multi-jvm/scala/akka/cluster/sharding/MultiDcClusterShardingSpec.scala b/akka-cluster-sharding/src/multi-jvm/scala/akka/cluster/sharding/MultiDcClusterShardingSpec.scala index 3542f64312..72bfcbb312 100644 --- a/akka-cluster-sharding/src/multi-jvm/scala/akka/cluster/sharding/MultiDcClusterShardingSpec.scala +++ b/akka-cluster-sharding/src/multi-jvm/scala/akka/cluster/sharding/MultiDcClusterShardingSpec.scala @@ -195,7 +195,6 @@ abstract class MultiDcClusterShardingSpec extends MultiNodeSpec(MultiDcClusterSh dataCenter = None, // by default use own DC extractEntityId = extractEntityId, extractShardId = extractShardId) - proxy ! GetCount("5") expectMsg(1) }