From 1715c601904a358ecc92a3a46c0bf3e633d09940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Antonsson?= Date: Sat, 15 Sep 2012 07:24:24 +0200 Subject: [PATCH 1/9] Disable OSGI for now. --- project/AkkaBuild.scala | 9 ++++----- project/plugins.sbt | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 8b9e7e35d9..3ea8a96177 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -532,18 +532,17 @@ object AkkaBuild extends Build { val zeroMQ = exports(Seq("akka.zeromq.*")) - def exports(packages: Seq[String] = Seq()) = osgiSettings ++ Seq( + def exports(packages: Seq[String] = Seq()) = Seq.empty + + def exportsReal(packages: Seq[String] = Seq()) = osgiSettings ++ Seq( OsgiKeys.importPackage := defaultImports, - OsgiKeys.exportPackage := packages, - packagedArtifact in (Compile, packageBin) <<= (artifact in (Compile, packageBin), OsgiKeys.bundle).identityMap, - artifact in (Compile, packageBin) ~= (_.copy(`type` = "bundle")) + OsgiKeys.exportPackage := packages ) def defaultImports = Seq("!sun.misc", akkaImport(), configImport(), scalaImport(), "*") def akkaImport(packageName: String = "akka.*") = "%s;version=\"[2.1,2.2)\"".format(packageName) def configImport(packageName: String = "com.typesafe.config.*") = "%s;version=\"[0.4.1,0.5)\"".format(packageName) def scalaImport(packageName: String = "scala.*") = "%s;version=\"[2.10,2.11)\"".format(packageName) - } } diff --git a/project/plugins.sbt b/project/plugins.sbt index 35c8124986..370c90be0c 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -5,7 +5,7 @@ addSbtPlugin("com.typesafe.sbt" % "sbt-multi-jvm" % "0.2.0") addSbtPlugin("com.typesafe.sbtscalariform" % "sbtscalariform" % "0.4.0") -addSbtPlugin("com.typesafe.sbtosgi" % "sbtosgi" % "0.2.0") +addSbtPlugin("com.typesafe.sbtosgi" % "sbtosgi" % "0.3.0") addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.1.3") From 5f6346926496c4b6872ba5a74966b4a25ac6ff62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Antonsson?= Date: Mon, 17 Sep 2012 12:54:08 +0200 Subject: [PATCH 2/9] Clean up akka-remote for OSGi and re-enable OSGi bundles. See #2497 --- .../cluster/ClusterActorRefProvider.scala | 2 +- .../cluster/routing/ClusterRouterConfig.scala | 2 +- .../jrouting/RouterViaProgramExample.java | 2 +- .../project/migration-guide-2.0.x-2.1.x.rst | 17 ++++- .../routing/RouterViaProgramExample.scala | 2 +- .../serialization/SerializationDocSpec.scala | 4 +- akka-remote/src/main/resources/reference.conf | 4 +- .../scala/akka/remote/RemoteDeployer.scala | 1 + .../akka/remote/netty/NettySSLSupport.scala | 2 +- .../routing/RemoteRouterConfig.scala | 3 +- .../provider/AES128CounterInetRNG.scala | 2 +- .../provider/AES128CounterSecureRNG.scala | 2 +- .../provider/AES256CounterInetRNG.scala | 2 +- .../provider/AES256CounterSecureRNG.scala | 2 +- .../security/provider/AkkaProvider.scala | 2 +- .../provider/InternetSeedGenerator.scala | 2 +- .../security/provider/SeedSize.scala | 2 +- .../DaemonMsgCreateSerializer.scala | 3 +- .../serialization/ProtobufSerializer.scala | 3 +- .../{actor => remote}/ProtobufProtocol.java | 72 ++++++++++--------- .../scala/akka/remote/RemoteRouterSpec.scala | 1 + .../DaemonMsgCreateSerializerSpec.scala | 3 +- .../ProtobufSerializerSpec.scala | 5 +- project/AkkaBuild.scala | 6 +- 24 files changed, 84 insertions(+), 62 deletions(-) rename akka-remote/src/main/scala/akka/{ => remote}/routing/RemoteRouterConfig.scala (97%) rename akka-remote/src/main/scala/akka/{ => remote}/security/provider/AES128CounterInetRNG.scala (97%) rename akka-remote/src/main/scala/akka/{ => remote}/security/provider/AES128CounterSecureRNG.scala (97%) rename akka-remote/src/main/scala/akka/{ => remote}/security/provider/AES256CounterInetRNG.scala (97%) rename akka-remote/src/main/scala/akka/{ => remote}/security/provider/AES256CounterSecureRNG.scala (97%) rename akka-remote/src/main/scala/akka/{ => remote}/security/provider/AkkaProvider.scala (97%) rename akka-remote/src/main/scala/akka/{ => remote}/security/provider/InternetSeedGenerator.scala (98%) rename akka-remote/src/main/scala/akka/{ => remote}/security/provider/SeedSize.scala (91%) rename akka-remote/src/main/scala/akka/{ => remote}/serialization/DaemonMsgCreateSerializer.scala (98%) rename akka-remote/src/main/scala/akka/{ => remote}/serialization/ProtobufSerializer.scala (95%) rename akka-remote/src/test/java/akka/{actor => remote}/ProtobufProtocol.java (86%) rename akka-remote/src/test/scala/akka/{ => remote}/serialization/DaemonMsgCreateSerializerSpec.scala (97%) rename akka-remote/src/test/scala/akka/{ => remote}/serialization/ProtobufSerializerSpec.scala (81%) diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala index bb0634876e..03d9982bd1 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala @@ -15,7 +15,7 @@ import akka.cluster.routing.ClusterRouterConfig import akka.event.EventStream import akka.remote.RemoteActorRefProvider import akka.remote.RemoteDeployer -import akka.routing.RemoteRouterConfig +import akka.remote.routing.RemoteRouterConfig import akka.cluster.routing.ClusterRouterSettings class ClusterActorRefProvider( diff --git a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala index 89622867af..9c6bb9cfa9 100644 --- a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala +++ b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala @@ -28,7 +28,7 @@ import akka.routing.Route import akka.routing.RouteeProvider import akka.routing.Router import akka.routing.RouterConfig -import akka.routing.RemoteRouterConfig +import akka.remote.routing.RemoteRouterConfig import akka.actor.RootActorPath import akka.actor.ActorCell import akka.actor.RelativeActorPath diff --git a/akka-docs/java/code/docs/jrouting/RouterViaProgramExample.java b/akka-docs/java/code/docs/jrouting/RouterViaProgramExample.java index 72843b44c6..99b924d09b 100644 --- a/akka-docs/java/code/docs/jrouting/RouterViaProgramExample.java +++ b/akka-docs/java/code/docs/jrouting/RouterViaProgramExample.java @@ -5,7 +5,7 @@ package docs.jrouting; import akka.routing.RoundRobinRouter; import akka.routing.DefaultResizer; -import akka.routing.RemoteRouterConfig; +import akka.remote.routing.RemoteRouterConfig; import akka.actor.ActorRef; import akka.actor.Props; import akka.actor.UntypedActor; diff --git a/akka-docs/project/migration-guide-2.0.x-2.1.x.rst b/akka-docs/project/migration-guide-2.0.x-2.1.x.rst index fd5629ea3b..54e9f2df5e 100644 --- a/akka-docs/project/migration-guide-2.0.x-2.1.x.rst +++ b/akka-docs/project/migration-guide-2.0.x-2.1.x.rst @@ -6,7 +6,8 @@ The 2.1 release contains several structural changes that require some simple, mechanical source-level changes in client code. Several things have -been moved to Scala standard library, such as ``Future``. +been moved to Scala standard library, such as ``Future``, and some package +names have been changed in Remoting. When migrating from 1.3.x to 2.1.x you should first follow the instructions for migrating `1.3.x to 2.0.x `_. @@ -358,4 +359,18 @@ v2.1:: else if (requestedCapacity < 0) routeeProvider.removeRoutees( -requestedCapacity, stopDelay) +Package Name Changes in Remoting +================================ +The package name of all classes in the ``akka-remote.jar`` artifact now starts with akka.remote. +This has been done to enable OSGi bundles that don't have conflicting package names. + +Change the following import statements. Please note that the serializers are often referenced from configuration. + +================================================ ======================================================= +Search Replace with +================================================ ======================================================= +``akka.routing.RemoteRouterConfig`` ``akka.remote.routing.RemoteRouterConfig`` +``akka.serialization.ProtobufSerializer`` ``akka.remote.serialization.ProtobufSerializer`` +``akka.serialization.DaemonMsgCreateSerializer`` ``akka.remote.serialization.DaemonMsgCreateSerializer`` +================================================ ======================================================= diff --git a/akka-docs/scala/code/docs/routing/RouterViaProgramExample.scala b/akka-docs/scala/code/docs/routing/RouterViaProgramExample.scala index 79219b742b..6269e7f698 100644 --- a/akka-docs/scala/code/docs/routing/RouterViaProgramExample.scala +++ b/akka-docs/scala/code/docs/routing/RouterViaProgramExample.scala @@ -6,7 +6,7 @@ package docs.routing import akka.routing.RoundRobinRouter import akka.actor.{ ActorRef, Props, Actor, ActorSystem } import akka.routing.DefaultResizer -import akka.routing.RemoteRouterConfig +import akka.remote.routing.RemoteRouterConfig case class Message1(nbr: Int) diff --git a/akka-docs/scala/code/docs/serialization/SerializationDocSpec.scala b/akka-docs/scala/code/docs/serialization/SerializationDocSpec.scala index 9b222436da..d979952887 100644 --- a/akka-docs/scala/code/docs/serialization/SerializationDocSpec.scala +++ b/akka-docs/scala/code/docs/serialization/SerializationDocSpec.scala @@ -104,7 +104,7 @@ package docs.serialization { actor { serializers { java = "akka.serialization.JavaSerializer" - proto = "akka.serialization.ProtobufSerializer" + proto = "akka.remote.serialization.ProtobufSerializer" myown = "docs.serialization.MyOwnSerializer" } } @@ -122,7 +122,7 @@ package docs.serialization { actor { serializers { java = "akka.serialization.JavaSerializer" - proto = "akka.serialization.ProtobufSerializer" + proto = "akka.remote.serialization.ProtobufSerializer" myown = "docs.serialization.MyOwnSerializer" } diff --git a/akka-remote/src/main/resources/reference.conf b/akka-remote/src/main/resources/reference.conf index 66f6b660ba..4af8f4478f 100644 --- a/akka-remote/src/main/resources/reference.conf +++ b/akka-remote/src/main/resources/reference.conf @@ -13,8 +13,8 @@ akka { actor { serializers { - proto = "akka.serialization.ProtobufSerializer" - daemon-create = "akka.serialization.DaemonMsgCreateSerializer" + proto = "akka.remote.serialization.ProtobufSerializer" + daemon-create = "akka.remote.serialization.DaemonMsgCreateSerializer" } diff --git a/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala b/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala index 16c65986ee..fbc9c7b913 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala @@ -5,6 +5,7 @@ package akka.remote import akka.actor._ import akka.routing._ +import akka.remote.routing._ import com.typesafe.config._ import akka.ConfigurationException diff --git a/akka-remote/src/main/scala/akka/remote/netty/NettySSLSupport.scala b/akka-remote/src/main/scala/akka/remote/netty/NettySSLSupport.scala index 83fdb781a7..bc4f39dca4 100644 --- a/akka-remote/src/main/scala/akka/remote/netty/NettySSLSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/netty/NettySSLSupport.scala @@ -9,7 +9,7 @@ import javax.net.ssl.{ KeyManagerFactory, TrustManager, TrustManagerFactory, SSL import akka.remote.RemoteTransportException import akka.event.LoggingAdapter import java.io.{ IOException, FileNotFoundException, FileInputStream } -import akka.security.provider.AkkaProvider +import akka.remote.security.provider.AkkaProvider import java.security._ /** diff --git a/akka-remote/src/main/scala/akka/routing/RemoteRouterConfig.scala b/akka-remote/src/main/scala/akka/remote/routing/RemoteRouterConfig.scala similarity index 97% rename from akka-remote/src/main/scala/akka/routing/RemoteRouterConfig.scala rename to akka-remote/src/main/scala/akka/remote/routing/RemoteRouterConfig.scala index 7075aa5ea7..c22ff7dfa8 100644 --- a/akka-remote/src/main/scala/akka/routing/RemoteRouterConfig.scala +++ b/akka-remote/src/main/scala/akka/remote/routing/RemoteRouterConfig.scala @@ -1,8 +1,9 @@ /** * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.routing +package akka.remote.routing +import akka.routing.{ Route, Router, RouterConfig, RouteeProvider, Resizer } import com.typesafe.config.ConfigFactory import akka.actor.ActorContext import akka.actor.ActorRef diff --git a/akka-remote/src/main/scala/akka/security/provider/AES128CounterInetRNG.scala b/akka-remote/src/main/scala/akka/remote/security/provider/AES128CounterInetRNG.scala similarity index 97% rename from akka-remote/src/main/scala/akka/security/provider/AES128CounterInetRNG.scala rename to akka-remote/src/main/scala/akka/remote/security/provider/AES128CounterInetRNG.scala index 9944f3d6d4..7019b4b1a3 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES128CounterInetRNG.scala +++ b/akka-remote/src/main/scala/akka/remote/security/provider/AES128CounterInetRNG.scala @@ -1,7 +1,7 @@ /** * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.security.provider +package akka.remote.security.provider import org.uncommons.maths.random.{ AESCounterRNG } import SeedSize.Seed128 diff --git a/akka-remote/src/main/scala/akka/security/provider/AES128CounterSecureRNG.scala b/akka-remote/src/main/scala/akka/remote/security/provider/AES128CounterSecureRNG.scala similarity index 97% rename from akka-remote/src/main/scala/akka/security/provider/AES128CounterSecureRNG.scala rename to akka-remote/src/main/scala/akka/remote/security/provider/AES128CounterSecureRNG.scala index bd422a249b..acf936d46e 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES128CounterSecureRNG.scala +++ b/akka-remote/src/main/scala/akka/remote/security/provider/AES128CounterSecureRNG.scala @@ -1,7 +1,7 @@ /** * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.security.provider +package akka.remote.security.provider import org.uncommons.maths.random.{ AESCounterRNG, SecureRandomSeedGenerator } import SeedSize.Seed128 diff --git a/akka-remote/src/main/scala/akka/security/provider/AES256CounterInetRNG.scala b/akka-remote/src/main/scala/akka/remote/security/provider/AES256CounterInetRNG.scala similarity index 97% rename from akka-remote/src/main/scala/akka/security/provider/AES256CounterInetRNG.scala rename to akka-remote/src/main/scala/akka/remote/security/provider/AES256CounterInetRNG.scala index 4c7de74990..edd6b3cab5 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES256CounterInetRNG.scala +++ b/akka-remote/src/main/scala/akka/remote/security/provider/AES256CounterInetRNG.scala @@ -1,7 +1,7 @@ /** * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.security.provider +package akka.remote.security.provider import org.uncommons.maths.random.{ AESCounterRNG } import SeedSize.Seed256 diff --git a/akka-remote/src/main/scala/akka/security/provider/AES256CounterSecureRNG.scala b/akka-remote/src/main/scala/akka/remote/security/provider/AES256CounterSecureRNG.scala similarity index 97% rename from akka-remote/src/main/scala/akka/security/provider/AES256CounterSecureRNG.scala rename to akka-remote/src/main/scala/akka/remote/security/provider/AES256CounterSecureRNG.scala index 8650cd75c4..aadb2131e3 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AES256CounterSecureRNG.scala +++ b/akka-remote/src/main/scala/akka/remote/security/provider/AES256CounterSecureRNG.scala @@ -1,7 +1,7 @@ /** * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.security.provider +package akka.remote.security.provider import org.uncommons.maths.random.{ AESCounterRNG, SecureRandomSeedGenerator } import SeedSize.Seed256 diff --git a/akka-remote/src/main/scala/akka/security/provider/AkkaProvider.scala b/akka-remote/src/main/scala/akka/remote/security/provider/AkkaProvider.scala similarity index 97% rename from akka-remote/src/main/scala/akka/security/provider/AkkaProvider.scala rename to akka-remote/src/main/scala/akka/remote/security/provider/AkkaProvider.scala index 8cbebe4190..ed32cd04d8 100644 --- a/akka-remote/src/main/scala/akka/security/provider/AkkaProvider.scala +++ b/akka-remote/src/main/scala/akka/remote/security/provider/AkkaProvider.scala @@ -1,7 +1,7 @@ /** * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.security.provider +package akka.remote.security.provider import java.security.{ PrivilegedAction, AccessController, Provider, Security } diff --git a/akka-remote/src/main/scala/akka/security/provider/InternetSeedGenerator.scala b/akka-remote/src/main/scala/akka/remote/security/provider/InternetSeedGenerator.scala similarity index 98% rename from akka-remote/src/main/scala/akka/security/provider/InternetSeedGenerator.scala rename to akka-remote/src/main/scala/akka/remote/security/provider/InternetSeedGenerator.scala index e28cbf4f17..f049a4e678 100644 --- a/akka-remote/src/main/scala/akka/security/provider/InternetSeedGenerator.scala +++ b/akka-remote/src/main/scala/akka/remote/security/provider/InternetSeedGenerator.scala @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. // ============================================================================ -package akka.security.provider +package akka.remote.security.provider import org.uncommons.maths.random.{ SeedGenerator, SeedException, SecureRandomSeedGenerator, RandomDotOrgSeedGenerator, DevRandomSeedGenerator } diff --git a/akka-remote/src/main/scala/akka/security/provider/SeedSize.scala b/akka-remote/src/main/scala/akka/remote/security/provider/SeedSize.scala similarity index 91% rename from akka-remote/src/main/scala/akka/security/provider/SeedSize.scala rename to akka-remote/src/main/scala/akka/remote/security/provider/SeedSize.scala index c8c7c0e661..a659c924bf 100644 --- a/akka-remote/src/main/scala/akka/security/provider/SeedSize.scala +++ b/akka-remote/src/main/scala/akka/remote/security/provider/SeedSize.scala @@ -2,7 +2,7 @@ * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.security.provider +package akka.remote.security.provider /** * Internal API diff --git a/akka-remote/src/main/scala/akka/serialization/DaemonMsgCreateSerializer.scala b/akka-remote/src/main/scala/akka/remote/serialization/DaemonMsgCreateSerializer.scala similarity index 98% rename from akka-remote/src/main/scala/akka/serialization/DaemonMsgCreateSerializer.scala rename to akka-remote/src/main/scala/akka/remote/serialization/DaemonMsgCreateSerializer.scala index 19aabd398f..caa0e2d9af 100644 --- a/akka-remote/src/main/scala/akka/serialization/DaemonMsgCreateSerializer.scala +++ b/akka-remote/src/main/scala/akka/remote/serialization/DaemonMsgCreateSerializer.scala @@ -2,8 +2,9 @@ * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.serialization +package akka.remote.serialization +import akka.serialization.{ Serializer, SerializationExtension } import java.io.Serializable import com.google.protobuf.ByteString import com.typesafe.config.{ Config, ConfigFactory } diff --git a/akka-remote/src/main/scala/akka/serialization/ProtobufSerializer.scala b/akka-remote/src/main/scala/akka/remote/serialization/ProtobufSerializer.scala similarity index 95% rename from akka-remote/src/main/scala/akka/serialization/ProtobufSerializer.scala rename to akka-remote/src/main/scala/akka/remote/serialization/ProtobufSerializer.scala index 77f6702a77..26bf6621ac 100644 --- a/akka-remote/src/main/scala/akka/serialization/ProtobufSerializer.scala +++ b/akka-remote/src/main/scala/akka/remote/serialization/ProtobufSerializer.scala @@ -2,8 +2,9 @@ * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.serialization +package akka.remote.serialization +import akka.serialization.{ Serializer, Serialization } import com.google.protobuf.Message import akka.actor.DynamicAccess import akka.remote.RemoteProtocol.ActorRefProtocol diff --git a/akka-remote/src/test/java/akka/actor/ProtobufProtocol.java b/akka-remote/src/test/java/akka/remote/ProtobufProtocol.java similarity index 86% rename from akka-remote/src/test/java/akka/actor/ProtobufProtocol.java rename to akka-remote/src/test/java/akka/remote/ProtobufProtocol.java index f29c9efee3..1b7f13a1da 100644 --- a/akka-remote/src/test/java/akka/actor/ProtobufProtocol.java +++ b/akka-remote/src/test/java/akka/remote/ProtobufProtocol.java @@ -1,7 +1,9 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: ProtobufProtocol.proto -package akka.actor; +package akka.remote; + +import com.google.protobuf.AbstractMessage; public final class ProtobufProtocol { private ProtobufProtocol() {} @@ -43,12 +45,12 @@ public final class ProtobufProtocol { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return akka.actor.ProtobufProtocol.internal_static_akka_actor_MyMessage_descriptor; + return ProtobufProtocol.internal_static_akka_actor_MyMessage_descriptor; } protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return akka.actor.ProtobufProtocol.internal_static_akka_actor_MyMessage_fieldAccessorTable; + return ProtobufProtocol.internal_static_akka_actor_MyMessage_fieldAccessorTable; } private int bitField0_; @@ -175,41 +177,41 @@ public final class ProtobufProtocol { return super.writeReplace(); } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom( + public static ProtobufProtocol.MyMessage parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return newBuilder().mergeFrom(data).buildParsed(); } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom( + public static ProtobufProtocol.MyMessage parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return newBuilder().mergeFrom(data, extensionRegistry) .buildParsed(); } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom(byte[] data) + public static ProtobufProtocol.MyMessage parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return newBuilder().mergeFrom(data).buildParsed(); } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom( + public static ProtobufProtocol.MyMessage parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return newBuilder().mergeFrom(data, extensionRegistry) .buildParsed(); } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom(java.io.InputStream input) + public static ProtobufProtocol.MyMessage parseFrom(java.io.InputStream input) throws java.io.IOException { return newBuilder().mergeFrom(input).buildParsed(); } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom( + public static ProtobufProtocol.MyMessage parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return newBuilder().mergeFrom(input, extensionRegistry) .buildParsed(); } - public static akka.actor.ProtobufProtocol.MyMessage parseDelimitedFrom(java.io.InputStream input) + public static ProtobufProtocol.MyMessage parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { Builder builder = newBuilder(); if (builder.mergeDelimitedFrom(input)) { @@ -218,7 +220,7 @@ public final class ProtobufProtocol { return null; } } - public static akka.actor.ProtobufProtocol.MyMessage parseDelimitedFrom( + public static ProtobufProtocol.MyMessage parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -229,12 +231,12 @@ public final class ProtobufProtocol { return null; } } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom( + public static ProtobufProtocol.MyMessage parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return newBuilder().mergeFrom(input).buildParsed(); } - public static akka.actor.ProtobufProtocol.MyMessage parseFrom( + public static ProtobufProtocol.MyMessage parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -244,7 +246,7 @@ public final class ProtobufProtocol { public static Builder newBuilder() { return Builder.create(); } public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(akka.actor.ProtobufProtocol.MyMessage prototype) { + public static Builder newBuilder(ProtobufProtocol.MyMessage prototype) { return newBuilder().mergeFrom(prototype); } public Builder toBuilder() { return newBuilder(this); } @@ -257,15 +259,15 @@ public final class ProtobufProtocol { } public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder - implements akka.actor.ProtobufProtocol.MyMessageOrBuilder { + implements ProtobufProtocol.MyMessageOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return akka.actor.ProtobufProtocol.internal_static_akka_actor_MyMessage_descriptor; + return ProtobufProtocol.internal_static_akka_actor_MyMessage_descriptor; } protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return akka.actor.ProtobufProtocol.internal_static_akka_actor_MyMessage_fieldAccessorTable; + return ProtobufProtocol.internal_static_akka_actor_MyMessage_fieldAccessorTable; } // Construct using akka.actor.ProtobufProtocol.MyMessage.newBuilder() @@ -302,33 +304,33 @@ public final class ProtobufProtocol { public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return akka.actor.ProtobufProtocol.MyMessage.getDescriptor(); + return ProtobufProtocol.MyMessage.getDescriptor(); } - public akka.actor.ProtobufProtocol.MyMessage getDefaultInstanceForType() { - return akka.actor.ProtobufProtocol.MyMessage.getDefaultInstance(); + public ProtobufProtocol.MyMessage getDefaultInstanceForType() { + return ProtobufProtocol.MyMessage.getDefaultInstance(); } - public akka.actor.ProtobufProtocol.MyMessage build() { - akka.actor.ProtobufProtocol.MyMessage result = buildPartial(); + public ProtobufProtocol.MyMessage build() { + ProtobufProtocol.MyMessage result = buildPartial(); if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + throw AbstractMessage.Builder.newUninitializedMessageException(result); } return result; } - private akka.actor.ProtobufProtocol.MyMessage buildParsed() + private ProtobufProtocol.MyMessage buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { - akka.actor.ProtobufProtocol.MyMessage result = buildPartial(); + ProtobufProtocol.MyMessage result = buildPartial(); if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); + throw AbstractMessage.Builder.newUninitializedMessageException( + result).asInvalidProtocolBufferException(); } return result; } - public akka.actor.ProtobufProtocol.MyMessage buildPartial() { - akka.actor.ProtobufProtocol.MyMessage result = new akka.actor.ProtobufProtocol.MyMessage(this); + public ProtobufProtocol.MyMessage buildPartial() { + ProtobufProtocol.MyMessage result = new ProtobufProtocol.MyMessage(this); int from_bitField0_ = bitField0_; int to_bitField0_ = 0; if (((from_bitField0_ & 0x00000001) == 0x00000001)) { @@ -349,16 +351,16 @@ public final class ProtobufProtocol { } public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof akka.actor.ProtobufProtocol.MyMessage) { - return mergeFrom((akka.actor.ProtobufProtocol.MyMessage)other); + if (other instanceof ProtobufProtocol.MyMessage) { + return mergeFrom((ProtobufProtocol.MyMessage)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(akka.actor.ProtobufProtocol.MyMessage other) { - if (other == akka.actor.ProtobufProtocol.MyMessage.getDefaultInstance()) return this; + public Builder mergeFrom(ProtobufProtocol.MyMessage other) { + if (other == ProtobufProtocol.MyMessage.getDefaultInstance()) return this; if (other.hasId()) { setId(other.getId()); } @@ -550,8 +552,8 @@ public final class ProtobufProtocol { com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_akka_actor_MyMessage_descriptor, new java.lang.String[] { "Id", "Name", "Status", }, - akka.actor.ProtobufProtocol.MyMessage.class, - akka.actor.ProtobufProtocol.MyMessage.Builder.class); + ProtobufProtocol.MyMessage.class, + ProtobufProtocol.MyMessage.Builder.class); return null; } }; diff --git a/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala index 2c44ece031..ab7fb23356 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteRouterSpec.scala @@ -6,6 +6,7 @@ package akka.remote import akka.testkit._ import akka.routing._ import akka.actor._ +import akka.remote.routing._ import com.typesafe.config._ object RemoteRouterSpec { diff --git a/akka-remote/src/test/scala/akka/serialization/DaemonMsgCreateSerializerSpec.scala b/akka-remote/src/test/scala/akka/remote/serialization/DaemonMsgCreateSerializerSpec.scala similarity index 97% rename from akka-remote/src/test/scala/akka/serialization/DaemonMsgCreateSerializerSpec.scala rename to akka-remote/src/test/scala/akka/remote/serialization/DaemonMsgCreateSerializerSpec.scala index 38a50ea886..2c80c99615 100644 --- a/akka-remote/src/test/scala/akka/serialization/DaemonMsgCreateSerializerSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/serialization/DaemonMsgCreateSerializerSpec.scala @@ -2,10 +2,11 @@ * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.serialization +package akka.remote.serialization import language.postfixOps +import akka.serialization.SerializationExtension import com.typesafe.config.ConfigFactory import akka.testkit.AkkaSpec import akka.actor.{ Actor, Address, Props, Deploy, OneForOneStrategy, SupervisorStrategy, FromClassCreator } diff --git a/akka-remote/src/test/scala/akka/serialization/ProtobufSerializerSpec.scala b/akka-remote/src/test/scala/akka/remote/serialization/ProtobufSerializerSpec.scala similarity index 81% rename from akka-remote/src/test/scala/akka/serialization/ProtobufSerializerSpec.scala rename to akka-remote/src/test/scala/akka/remote/serialization/ProtobufSerializerSpec.scala index 474ef485d7..f9fac112bd 100644 --- a/akka-remote/src/test/scala/akka/serialization/ProtobufSerializerSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/serialization/ProtobufSerializerSpec.scala @@ -2,11 +2,12 @@ * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.serialization +package akka.remote.serialization +import akka.serialization.SerializationExtension import akka.testkit.AkkaSpec import akka.remote.RemoteProtocol.MessageProtocol -import akka.actor.ProtobufProtocol.MyMessage +import akka.remote.ProtobufProtocol.MyMessage @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) class ProtobufSerializerSpec extends AkkaSpec { diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 3ea8a96177..2c0488f453 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -522,7 +522,7 @@ object AkkaBuild extends Build { val osgiAries = exports() ++ Seq(OsgiKeys.privatePackage := Seq("akka.osgi.aries.*")) - val remote = exports(Seq("akka.remote.*", "akka.routing.*", "akka.serialization.*")) + val remote = exports(Seq("akka.remote.*")) val slf4j = exports(Seq("akka.event.slf4j.*")) @@ -532,9 +532,7 @@ object AkkaBuild extends Build { val zeroMQ = exports(Seq("akka.zeromq.*")) - def exports(packages: Seq[String] = Seq()) = Seq.empty - - def exportsReal(packages: Seq[String] = Seq()) = osgiSettings ++ Seq( + def exports(packages: Seq[String] = Seq()) = osgiSettings ++ Seq( OsgiKeys.importPackage := defaultImports, OsgiKeys.exportPackage := packages ) From 7dac4d8fafb7f2c22a5255d14007c1cfc6373a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Antonsson?= Date: Mon, 17 Sep 2012 13:47:23 +0200 Subject: [PATCH 3/9] Clean up akka-file-mailbox for OSGi. #see 2497 --- .../actor/mailbox/DurableMailboxDocSpec.scala | 2 +- .../project/migration-guide-2.0.x-2.1.x.rst | 21 +++++++++++++++++-- .../{ => filebased}/FileBasedMailbox.scala | 3 ++- .../FileBasedMailboxSettings.scala | 3 ++- .../filequeue/BrokenItemException.scala | 2 +- .../{ => filebased}/filequeue/Counter.scala | 2 +- .../{ => filebased}/filequeue/Journal.scala | 2 +- .../filequeue/PersistentQueue.scala | 4 ++-- .../{ => filebased}/filequeue/QItem.scala | 2 +- .../filequeue/QueueCollection.scala | 4 ++-- .../filequeue/tools/QDumper.scala | 4 ++-- .../filequeue/tools/Util.scala | 2 +- .../FileBasedMailboxSpec.scala | 5 +++-- project/AkkaBuild.scala | 2 +- 14 files changed, 39 insertions(+), 19 deletions(-) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/FileBasedMailbox.scala (98%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/FileBasedMailboxSettings.scala (96%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/BrokenItemException.scala (94%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/Counter.scala (95%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/Journal.scala (99%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/PersistentQueue.scala (99%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/QItem.scala (97%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/QueueCollection.scala (98%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/tools/QDumper.scala (97%) rename akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/{ => filebased}/filequeue/tools/Util.scala (96%) rename akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/{ => filebased}/FileBasedMailboxSpec.scala (90%) diff --git a/akka-docs/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala b/akka-docs/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala index 1d4f714f7c..f93a213a15 100644 --- a/akka-docs/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala +++ b/akka-docs/modules/code/docs/actor/mailbox/DurableMailboxDocSpec.scala @@ -25,7 +25,7 @@ object DurableMailboxDocSpec { val config = """ //#dispatcher-config my-dispatcher { - mailbox-type = akka.actor.mailbox.FileBasedMailboxType + mailbox-type = akka.actor.mailbox.filebased.FileBasedMailboxType } //#dispatcher-config """ diff --git a/akka-docs/project/migration-guide-2.0.x-2.1.x.rst b/akka-docs/project/migration-guide-2.0.x-2.1.x.rst index 54e9f2df5e..8342636dfa 100644 --- a/akka-docs/project/migration-guide-2.0.x-2.1.x.rst +++ b/akka-docs/project/migration-guide-2.0.x-2.1.x.rst @@ -7,7 +7,7 @@ The 2.1 release contains several structural changes that require some simple, mechanical source-level changes in client code. Several things have been moved to Scala standard library, such as ``Future``, and some package -names have been changed in Remoting. +names have been changed in Remoting and Durable Mailboxes. When migrating from 1.3.x to 2.1.x you should first follow the instructions for migrating `1.3.x to 2.0.x `_. @@ -362,7 +362,7 @@ v2.1:: Package Name Changes in Remoting ================================ -The package name of all classes in the ``akka-remote.jar`` artifact now starts with akka.remote. +The package name of all classes in the ``akka-remote.jar`` artifact now starts with ``akka.remote``. This has been done to enable OSGi bundles that don't have conflicting package names. Change the following import statements. Please note that the serializers are often referenced from configuration. @@ -374,3 +374,20 @@ Search Replace with ``akka.serialization.ProtobufSerializer`` ``akka.remote.serialization.ProtobufSerializer`` ``akka.serialization.DaemonMsgCreateSerializer`` ``akka.remote.serialization.DaemonMsgCreateSerializer`` ================================================ ======================================================= + +Package Name Changes in Durable Mailboxes +========================================= + +The package name of all classes in the ``akka-file-mailbox.jar`` artifact now starts with ``akka.actor.mailbox.filebased``. +This has been done to enable OSGi bundles that don't have conflicting package names. + +Change the following import statements. Please note that the ``FileBasedMailboxType`` is often referenced from configuration. + +================================================ ========================================================= +Search Replace with +================================================ ========================================================= +``akka.actor.mailbox.FileBasedMailboxType`` ``akka.actor.mailbox.filebased.FileBasedMailboxType`` +``akka.actor.mailbox.FileBasedMailboxSettings`` ``akka.actor.mailbox.filebased.FileBasedMailboxSettings`` +``akka.actor.mailbox.FileBasedMessageQueue`` ``akka.actor.mailbox.filebased.FileBasedMessageQueue`` +``akka.actor.mailbox.filequeue.*`` ``akka.actor.mailbox.filebased.filequeue.*`` +================================================ ========================================================= diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/FileBasedMailbox.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/FileBasedMailbox.scala similarity index 98% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/FileBasedMailbox.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/FileBasedMailbox.scala index 2341f47fd5..59e5780849 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/FileBasedMailbox.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/FileBasedMailbox.scala @@ -2,8 +2,9 @@ * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.actor.mailbox +package akka.actor.mailbox.filebased +import akka.actor.mailbox._ import akka.actor.{ ActorContext, ActorRef, ActorSystem, ExtendedActorSystem } import akka.event.Logging import com.typesafe.config.Config diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/FileBasedMailboxSettings.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/FileBasedMailboxSettings.scala similarity index 96% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/FileBasedMailboxSettings.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/FileBasedMailboxSettings.scala index 551a01ed00..7ac8d0a044 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/FileBasedMailboxSettings.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/FileBasedMailboxSettings.scala @@ -1,8 +1,9 @@ /** * Copyright (C) 2009-2012 Typesafe Inc. */ -package akka.actor.mailbox +package akka.actor.mailbox.filebased +import akka.actor.mailbox._ import com.typesafe.config.Config import scala.concurrent.util.Duration import java.util.concurrent.TimeUnit.MILLISECONDS diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/BrokenItemException.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/BrokenItemException.scala similarity index 94% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/BrokenItemException.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/BrokenItemException.scala index bc96778ec6..636cbfc4aa 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/BrokenItemException.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/BrokenItemException.scala @@ -15,7 +15,7 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue +package akka.actor.mailbox.filebased.filequeue import java.io.IOException diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/Counter.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Counter.scala similarity index 95% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/Counter.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Counter.scala index 707515d345..c2de226d20 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/Counter.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Counter.scala @@ -15,7 +15,7 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue +package akka.actor.mailbox.filebased.filequeue import java.util.concurrent.atomic.AtomicLong diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/Journal.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Journal.scala similarity index 99% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/Journal.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Journal.scala index 5d5ed54ae7..6862ad9600 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/Journal.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Journal.scala @@ -15,7 +15,7 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue +package akka.actor.mailbox.filebased.filequeue import java.io._ import java.nio.{ ByteBuffer, ByteOrder } diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/PersistentQueue.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/PersistentQueue.scala similarity index 99% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/PersistentQueue.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/PersistentQueue.scala index 9b012e34f0..83d539361c 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/PersistentQueue.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/PersistentQueue.scala @@ -15,14 +15,14 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue +package akka.actor.mailbox.filebased.filequeue import java.io._ import scala.collection.mutable import akka.event.LoggingAdapter import scala.concurrent.util.Duration import java.util.concurrent.TimeUnit -import akka.actor.mailbox.FileBasedMailboxSettings +import akka.actor.mailbox.filebased.FileBasedMailboxSettings // a config value that's backed by a global setting but may be locally overridden class OverlaySetting[T](base: ⇒ T) { diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/QItem.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QItem.scala similarity index 97% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/QItem.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QItem.scala index 1a05070cb7..1d0eb543d6 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/QItem.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QItem.scala @@ -15,7 +15,7 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue +package akka.actor.mailbox.filebased.filequeue import java.nio.{ ByteBuffer, ByteOrder } diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/QueueCollection.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QueueCollection.scala similarity index 98% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/QueueCollection.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QueueCollection.scala index 568428dfc6..95550f6603 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/QueueCollection.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QueueCollection.scala @@ -15,13 +15,13 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue +package akka.actor.mailbox.filebased.filequeue import java.io.File import java.util.concurrent.CountDownLatch import scala.collection.mutable import akka.event.LoggingAdapter -import akka.actor.mailbox.FileBasedMailboxSettings +import akka.actor.mailbox.filebased.FileBasedMailboxSettings class InaccessibleQueuePath extends Exception("Inaccessible queue path: Must be a directory and writable") diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/tools/QDumper.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/tools/QDumper.scala similarity index 97% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/tools/QDumper.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/tools/QDumper.scala index 1ede4428f1..f0944d0fe7 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/tools/QDumper.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/tools/QDumper.scala @@ -15,13 +15,13 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue.tools +package akka.actor.mailbox.filebased.filequeue.tools import language.reflectiveCalls import java.io.{ FileNotFoundException, IOException } import scala.collection.mutable -import akka.actor.mailbox.filequeue._ +import akka.actor.mailbox.filebased.filequeue._ import akka.event.LoggingAdapter import akka.actor.ActorSystem diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/tools/Util.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/tools/Util.scala similarity index 96% rename from akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/tools/Util.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/tools/Util.scala index c1b9c35594..5a6f492815 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filequeue/tools/Util.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/tools/Util.scala @@ -15,7 +15,7 @@ * limitations under the License. */ -package akka.actor.mailbox.filequeue.tools +package akka.actor.mailbox.filebased.filequeue.tools object Util { val KILOBYTE = 1024L diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/FileBasedMailboxSpec.scala b/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala similarity index 90% rename from akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/FileBasedMailboxSpec.scala rename to akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala index 0e10c3c7ad..5b982523ee 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/FileBasedMailboxSpec.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/filebased/FileBasedMailboxSpec.scala @@ -1,14 +1,15 @@ -package akka.actor.mailbox +package akka.actor.mailbox.filebased import language.postfixOps +import akka.actor.mailbox._ import org.apache.commons.io.FileUtils import akka.dispatch.Mailbox object FileBasedMailboxSpec { val config = """ File-dispatcher { - mailbox-type = akka.actor.mailbox.FileBasedMailboxType + mailbox-type = akka.actor.mailbox.filebased.FileBasedMailboxType throughput = 1 file-based.directory-path = "file-based" file-based.circuit-breaker.max-failures = 5 diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 2c0488f453..da734c86a7 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -514,7 +514,7 @@ object AkkaBuild extends Build { val cluster = exports(Seq("akka.cluster.*")) - val fileMailbox = exports(Seq("akka.actor.mailbox.*")) + val fileMailbox = exports(Seq("akka.actor.mailbox.filebased.*")) val mailboxesCommon = exports(Seq("akka.actor.mailbox.*")) From 8817a38dffd60d77d0714ffe07817e2a6dc46e62 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Tue, 18 Sep 2012 10:19:40 +0200 Subject: [PATCH 4/9] Remove graphviz diagram generation in docs build, see #2505 * Plain image for the circuit breaker --- akka-docs/common/circuitbreaker.rst | 23 +------------------- akka-docs/conf.py | 2 +- akka-docs/images/circuit-breaker-states.dot | 19 ++++++++++++++++ akka-docs/images/circuit-breaker-states.png | Bin 0 -> 22126 bytes 4 files changed, 21 insertions(+), 23 deletions(-) create mode 100644 akka-docs/images/circuit-breaker-states.dot create mode 100644 akka-docs/images/circuit-breaker-states.png diff --git a/akka-docs/common/circuitbreaker.rst b/akka-docs/common/circuitbreaker.rst index bd13927c8e..ddce833178 100644 --- a/akka-docs/common/circuitbreaker.rst +++ b/akka-docs/common/circuitbreaker.rst @@ -51,28 +51,7 @@ What do they do? * Callbacks can be provided for every state entry via `onOpen`, `onClose`, and `onHalfOpen` * These are executed in the :class:`ExecutionContext` provided. -.. graphviz:: - - digraph circuit_breaker { - rankdir = "LR"; - size = "6,5"; - graph [ bgcolor = "transparent" ] - node [ fontname = "Helvetica", - fontsize = 14, - shape = circle, - color = white, - style = filled ]; - edge [ fontname = "Helvetica", fontsize = 12 ] - Closed [ fillcolor = green2 ]; - "Half-Open" [fillcolor = yellow2 ]; - Open [ fillcolor = red2 ]; - Closed -> Closed [ label = "Success" ]; - "Half-Open" -> Open [ label = "Trip Breaker" ]; - "Half-Open" -> Closed [ label = "Reset Breaker" ]; - Closed -> Open [ label = "Trip Breaker" ]; - Open -> Open [ label = "Calls failing fast" ]; - Open -> "Half-Open" [ label = "Attempt Reset" ]; - } +.. image:: ../images/circuit-breaker-states.png ======== Examples diff --git a/akka-docs/conf.py b/akka-docs/conf.py index 63afaa3bb8..8f58ba0d87 100644 --- a/akka-docs/conf.py +++ b/akka-docs/conf.py @@ -8,7 +8,7 @@ import sys, os # -- General configuration ----------------------------------------------------- sys.path.append(os.path.abspath('_sphinx/exts')) -extensions = ['sphinx.ext.todo', 'includecode', 'sphinx.ext.graphviz'] +extensions = ['sphinx.ext.todo', 'includecode'] templates_path = ['_templates'] source_suffix = '.rst' diff --git a/akka-docs/images/circuit-breaker-states.dot b/akka-docs/images/circuit-breaker-states.dot new file mode 100644 index 0000000000..be7b628029 --- /dev/null +++ b/akka-docs/images/circuit-breaker-states.dot @@ -0,0 +1,19 @@ + digraph circuit_breaker { + rankdir = "LR"; + size = "6,5"; + graph [ bgcolor = "transparent" ] + node [ fontname = "Helvetica", + fontsize = 14, + shape = circle, + color = white, + style = filled ]; + edge [ fontname = "Helvetica", fontsize = 12 ] + Closed [ fillcolor = green2 ]; + "Half-Open" [fillcolor = yellow2 ]; + Open [ fillcolor = red2 ]; + Closed -> Closed [ label = "Success" ]; + "Half-Open" -> Open [ label = "Trip Breaker" ]; + "Half-Open" -> Closed [ label = "Reset Breaker" ]; + Closed -> Open [ label = "Trip Breaker" ]; + Open -> Open [ label = "Calls failing fast" ]; + Open -> "Half-Open" [ label = "Attempt Reset" ]; \ No newline at end of file diff --git a/akka-docs/images/circuit-breaker-states.png b/akka-docs/images/circuit-breaker-states.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1d6a2d7f5a9b5c2e99ee132459e69ee06ad6fd GIT binary patch literal 22126 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 tW_TZZtKR&VLfX Date: Tue, 18 Sep 2012 12:08:28 +0200 Subject: [PATCH 5/9] #2492 - Dropping the samples from the dist, still published though. --- project/AkkaBuild.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 8b9e7e35d9..4c02878eac 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -36,7 +36,7 @@ object AkkaBuild extends Build { parallelExecution in GlobalScope := System.getProperty("akka.parallelExecution", "false").toBoolean, Publish.defaultPublishTo in ThisBuild <<= crossTarget / "repository", Unidoc.unidocExclude := Seq(samples.id), - Dist.distExclude := Seq(actorTests.id, akkaSbtPlugin.id, docs.id), + Dist.distExclude := Seq(actorTests.id, akkaSbtPlugin.id, docs.id, samples.id), initialCommands in ThisBuild := """|import language.postfixOps |import akka.actor._ From e00aa0f0ce61700dcbc8e084a091ae5940898945 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Tue, 18 Sep 2012 12:26:00 +0200 Subject: [PATCH 6/9] #2492 - Skipping publishArtifact for sample libs --- project/AkkaBuild.scala | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 4c02878eac..3a5d1ef795 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -69,7 +69,7 @@ object AkkaBuild extends Build { sphinxLatex <<= sphinxLatex in LocalProject(docs.id) map identity, sphinxPdf <<= sphinxPdf in LocalProject(docs.id) map identity ), - aggregate = Seq(actor, testkit, actorTests, dataflow, remote, remoteTests, camel, cluster, slf4j, agent, transactor, mailboxes, zeroMQ, kernel, akkaSbtPlugin, samples, osgi, osgiAries, docs) + aggregate = Seq(actor, testkit, actorTests, dataflow, remote, remoteTests, camel, cluster, slf4j, agent, transactor, mailboxes, zeroMQ, kernel, akkaSbtPlugin, osgi, osgiAries, docs) ) lazy val actor = Project( @@ -299,7 +299,8 @@ object AkkaBuild extends Build { base = file("akka-samples/akka-sample-camel"), dependencies = Seq(actor, camel), settings = defaultSettings ++ Seq( - libraryDependencies ++= Dependencies.camelSample + libraryDependencies ++= Dependencies.camelSample, + publishArtifact in Compile := false ) ) @@ -307,35 +308,35 @@ object AkkaBuild extends Build { id = "akka-sample-fsm", base = file("akka-samples/akka-sample-fsm"), dependencies = Seq(actor), - settings = defaultSettings + settings = defaultSettings ++ Seq( publishArtifact in Compile := false ) ) lazy val helloSample = Project( id = "akka-sample-hello", base = file("akka-samples/akka-sample-hello"), dependencies = Seq(actor), - settings = defaultSettings + settings = defaultSettings ++ Seq( publishArtifact in Compile := false ) ) lazy val helloKernelSample = Project( id = "akka-sample-hello-kernel", base = file("akka-samples/akka-sample-hello-kernel"), dependencies = Seq(kernel), - settings = defaultSettings + settings = defaultSettings ++ Seq( publishArtifact in Compile := false ) ) lazy val remoteSample = Project( id = "akka-sample-remote", base = file("akka-samples/akka-sample-remote"), dependencies = Seq(actor, remote, kernel), - settings = defaultSettings + settings = defaultSettings ++ Seq( publishArtifact in Compile := false ) ) lazy val clusterSample = Project( id = "akka-sample-cluster", base = file("akka-samples/akka-sample-cluster"), dependencies = Seq(cluster), - settings = defaultSettings + settings = defaultSettings ++ Seq( publishArtifact in Compile := false ) ) lazy val docs = Project( From fb8579cd2bb2b6235d3ee6bc1be2644ff04085a8 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Tue, 18 Sep 2012 12:26:55 +0200 Subject: [PATCH 7/9] #2512 - Typo in docs --- akka-docs/general/addressing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/akka-docs/general/addressing.rst b/akka-docs/general/addressing.rst index c59fba3808..34c64d96cb 100644 --- a/akka-docs/general/addressing.rst +++ b/akka-docs/general/addressing.rst @@ -210,7 +210,7 @@ Querying the Logical Actor Hierarchy ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Since the actor system forms a file-system like hierarchy, matching on paths is -possible in the same was as supported by Unix shells: you may replace (parts +possible in the same way as supported by Unix shells: you may replace (parts of) path element names with wildcards (`«*»` and `«?»`) to formulate a selection which may match zero or more actual actors. Because the result is not a single actor reference, it has a different type :class:`ActorSelection` and From fa66b4481ac89bafc35bdd87a03fd84af7c45328 Mon Sep 17 00:00:00 2001 From: Heiko Seeberger Date: Tue, 18 Sep 2012 13:14:24 +0200 Subject: [PATCH 8/9] closes #2520: Improve wording of 2.6.2 note box --- akka-docs/general/jmm.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/akka-docs/general/jmm.rst b/akka-docs/general/jmm.rst index 6d088c0c47..085a347451 100644 --- a/akka-docs/general/jmm.rst +++ b/akka-docs/general/jmm.rst @@ -45,8 +45,8 @@ To prevent visibility and reordering problems on actors, Akka guarantees the fol .. note:: - In layman's terms this means that changes to internal fields of the actor is visible when the next message - is processed by that actor. So fields in your actor does not need to be volatile or equivalent. + In layman's terms this means that changes to internal fields of the actor are visible when the next message + is processed by that actor. So fields in your actor need not be volatile or equivalent. Both rules only apply for the same actor instance and are not valid if different actors are used. From 0d91c33fcff607dfa4e309528bf11eb5e4ab8c2b Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Tue, 18 Sep 2012 15:49:02 +0200 Subject: [PATCH 9/9] #2522 - Fixing so that an explicitly system-propertied target repository is used for the nightly sbt plugin. --- project/AkkaBuild.scala | 7 +------ project/Publish.scala | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index fc508931ba..5cf2c076a0 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -275,12 +275,7 @@ object AkkaBuild extends Build { settings = defaultSettings ++ Seq( sbtPlugin := true, publishMavenStyle := false, // SBT Plugins should be published as Ivy - publishTo <<= (version) { version: String => - val scalasbt = "http://scalasbt.artifactoryonline.com/scalasbt/" - val (name, u) = if (version.contains("-SNAPSHOT")) ("sbt-plugin-snapshots", scalasbt+"sbt-plugin-snapshots") - else ("sbt-plugin-releases", scalasbt+"sbt-plugin-releases") - Some(Resolver.url(name, url(u))(Resolver.ivyStylePatterns)) - }, + publishTo <<= Publish.akkaPluginPublishTo, scalacOptions in Compile := Seq("-encoding", "UTF-8", "-deprecation", "-unchecked"), scalaVersion := "2.9.1", scalaBinaryVersion <<= scalaVersion diff --git a/project/Publish.scala b/project/Publish.scala index 3c1b3dc148..c1a315e2a5 100644 --- a/project/Publish.scala +++ b/project/Publish.scala @@ -74,6 +74,15 @@ object Publish { } } + def akkaPluginPublishTo: Initialize[Option[Resolver]] = { + (version) { version: String => + akkaPublishRepository orElse { + val name = if (version.contains("-SNAPSHOT")) "sbt-plugin-snapshots" else "sbt-plugin-releases" + Some(Resolver.url(name, url("http://scalasbt.artifactoryonline.com/scalasbt/" + name))(Resolver.ivyStylePatterns)) + } + } + } + def sonatypeRepo(version: String): Option[Resolver] = { Option(sys.props("publish.maven.central")) filter (_.toLowerCase == "true") map { _ => val nexus = "https://oss.sonatype.org/" @@ -83,15 +92,11 @@ object Publish { } - def akkaPublishRepository: Option[Resolver] = { - val property = Option(System.getProperty("akka.publish.repository")) - property map { "Akka Publish Repository" at _ } - } + def akkaPublishRepository: Option[Resolver] = + Option(System.getProperty("akka.publish.repository", null)) map { "Akka Publish Repository" at _ } - def akkaCredentials: Seq[Credentials] = { - val property = Option(System.getProperty("akka.publish.credentials")) - property map (f => Credentials(new File(f))) toSeq - } + def akkaCredentials: Seq[Credentials] = + Option(System.getProperty("akka.publish.credentials", null)) map (f => Credentials(new File(f))) toSeq // timestamped versions