#2746 - document provider.getDefaultAddress

This commit is contained in:
Roland 2012-11-28 14:56:53 +01:00
parent 370eeb00a4
commit cda2c2b62a
4 changed files with 6 additions and 40 deletions

View file

@ -138,12 +138,7 @@ public class SerializationDocTestBase {
} }
public Address getAddress() { public Address getAddress() {
final ActorRefProvider provider = system.provider(); return system.provider().getDefaultAddress();
if (provider instanceof RemoteActorRefProvider) {
return ((RemoteActorRefProvider) provider).transport().address();
} else {
throw new UnsupportedOperationException("need RemoteActorRefProvider");
}
} }
} }

View file

@ -149,16 +149,12 @@ concrete address handy you can create a dummy one for the right protocol using
``new Address(protocol, "", "", 0)`` (assuming that the actual transport used is as ``new Address(protocol, "", "", 0)`` (assuming that the actual transport used is as
lenient as Akkas RemoteActorRefProvider). lenient as Akkas RemoteActorRefProvider).
There is a possible simplification available if you are just using the default There is also a default remote address which is the one used by cluster support
:class:`NettyRemoteTransport` with the :meth:`RemoteActorRefProvider`, which is (and typical systems have just this one); you can get it like this:
enabled by the fact that this combination has just a single remote address:
.. includecode:: code/docs/serialization/SerializationDocTestBase.java .. includecode:: code/docs/serialization/SerializationDocTestBase.java
:include: external-address-default :include: external-address-default
This solution has to be adapted once other providers are used (like the planned
extensions for clustering).
Deep serialization of Actors Deep serialization of Actors
---------------------------- ----------------------------

View file

@ -2,19 +2,6 @@
* Copyright (C) 2009-2012 Typesafe Inc. <http://www.typesafe.com> * Copyright (C) 2009-2012 Typesafe Inc. <http://www.typesafe.com>
*/ */
//#extract-transport
package object akka {
// needs to be inside the akka package because accessing unsupported API !
def transportOf(system: actor.ExtendedActorSystem): remote.RemoteTransport =
system.provider match {
case r: remote.RemoteActorRefProvider r.transport
case _
throw new UnsupportedOperationException(
"this method requires the RemoteActorRefProvider to be configured")
}
}
//#extract-transport
package docs.serialization { package docs.serialization {
import org.scalatest.matchers.MustMatchers import org.scalatest.matchers.MustMatchers
@ -216,7 +203,7 @@ package docs.serialization {
object ExternalAddress extends ExtensionKey[ExternalAddressExt] object ExternalAddress extends ExtensionKey[ExternalAddressExt]
class ExternalAddressExt(system: ExtendedActorSystem) extends Extension { class ExternalAddressExt(system: ExtendedActorSystem) extends Extension {
def addressForAkka: Address = akka.transportOf(system).address def addressForAkka: Address = system.provider.getDefaultAddress
} }
def serializeAkkaDefault(ref: ActorRef): String = def serializeAkkaDefault(ref: ActorRef): String =

View file

@ -138,24 +138,12 @@ concrete address handy you can create a dummy one for the right protocol using
``Address(protocol, "", "", 0)`` (assuming that the actual transport used is as ``Address(protocol, "", "", 0)`` (assuming that the actual transport used is as
lenient as Akkas RemoteActorRefProvider). lenient as Akkas RemoteActorRefProvider).
There is a possible simplification available if you are just using the default There is also a default remote address which is the one used by cluster support
:class:`NettyRemoteTransport` with the :meth:`RemoteActorRefProvider`, which is (and typical systems have just this one); you can get it like this:
enabled by the fact that this combination has just a single remote address.
This approach relies on internal API, which means that it is not guaranteed to
be supported in future versions. To make this caveat more obvious, some bridge
code in the ``akka`` package is required to make it work:
.. includecode:: code/docs/serialization/SerializationDocSpec.scala
:include: extract-transport
And with this, the address extraction goes like this:
.. includecode:: code/docs/serialization/SerializationDocSpec.scala .. includecode:: code/docs/serialization/SerializationDocSpec.scala
:include: external-address-default :include: external-address-default
This solution has to be adapted once other providers are used (like the planned
extensions for clustering).
Deep serialization of Actors Deep serialization of Actors
---------------------------- ----------------------------