diff --git a/akka-actor/src/main/scala/actor/Actor.scala b/akka-actor/src/main/scala/actor/Actor.scala index d3e7699403..872997c760 100644 --- a/akka-actor/src/main/scala/actor/Actor.scala +++ b/akka-actor/src/main/scala/actor/Actor.scala @@ -410,14 +410,14 @@ trait Actor extends Logging { *

* Is called when an Actor is started by invoking 'actor.start'. */ - def init {} + def preStart {} /** * User overridable callback. *

* Is called when 'actor.stop' is invoked. */ - def shutdown {} + def postStop {} /** * User overridable callback. @@ -433,13 +433,6 @@ trait Actor extends Logging { */ def postRestart(reason: Throwable) {} - /** - * User overridable callback. - *

- * Is called during initialization. Can be used to initialize transactional state. Will be invoked within a transaction. - */ - def initTransactionalState {} - /** * Is the actor able to handle the message passed in as arguments? */ diff --git a/akka-actor/src/main/scala/actor/ActorRef.scala b/akka-actor/src/main/scala/actor/ActorRef.scala index c41408a1de..5dce8b11cd 100644 --- a/akka-actor/src/main/scala/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/actor/ActorRef.scala @@ -826,7 +826,7 @@ class LocalActorRef private[akka]( _transactionFactory = None _isRunning = false _isShutDown = true - actor.shutdown + actor.postStop ActorRegistry.unregister(this) if (isRemotingEnabled) { if(remoteAddress.isDefined) @@ -1132,8 +1132,7 @@ class LocalActorRef private[akka]( failedActor.preRestart(reason) nullOutActorRefReferencesFor(failedActor) val freshActor = newActor - freshActor.init - freshActor.initTransactionalState + freshActor.preStart actorInstance.set(freshActor) if (failedActor.isInstanceOf[Proxyable]) failedActor.asInstanceOf[Proxyable].swapProxiedActor(freshActor) @@ -1301,8 +1300,7 @@ class LocalActorRef private[akka]( } private def initializeActorInstance = { - actor.init // run actor init and initTransactionalState callbacks - actor.initTransactionalState + actor.preStart // run actor preStart Actor.log.trace("[%s] has started", toString) ActorRegistry.register(this) if (id == "N/A") id = actorClass.getName // if no name set, then use default name (class name) diff --git a/akka-actor/src/main/scala/actor/Supervisor.scala b/akka-actor/src/main/scala/actor/Supervisor.scala index 1af351a33d..f575cda299 100644 --- a/akka-actor/src/main/scala/actor/Supervisor.scala +++ b/akka-actor/src/main/scala/actor/Supervisor.scala @@ -187,7 +187,7 @@ final class SupervisorActor private[akka] ( trapExit = trapExceptions faultHandler = Some(handler) - override def shutdown(): Unit = shutdownLinkedActors + override def postStop(): Unit = shutdownLinkedActors def receive = { // FIXME add a way to respond to MaximumNumberOfRestartsWithinTimeRangeReached in declaratively configured Supervisor diff --git a/akka-actor/src/test/scala/actor/actor/Bench.scala b/akka-actor/src/test/scala/actor/actor/Bench.scala index 8e3a44f3a0..ded90edad5 100644 --- a/akka-actor/src/test/scala/actor/actor/Bench.scala +++ b/akka-actor/src/test/scala/actor/actor/Bench.scala @@ -78,7 +78,7 @@ object Chameneos { var sumMeetings = 0 var numFaded = 0 - override def init = { + override def preStart = { for (i <- 0 until numChameneos) actorOf(new Chameneo(self, colours(i % 3), i)) } diff --git a/akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala b/akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala index 5023c756e1..234a0bd25d 100644 --- a/akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala +++ b/akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala @@ -42,7 +42,7 @@ class RestartStrategySpec extends JUnitSuite { restartLatch.open } - override def shutdown = { + override def postStop = { if (restartLatch.isOpen) { secondRestartLatch.open } diff --git a/akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala b/akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala index 97f2e0df9d..8d4c8dedc1 100644 --- a/akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala +++ b/akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala @@ -53,7 +53,7 @@ object HawtDispatcherEchoServer { var accept_source:DispatchSource = _ var sessions = ListBuffer[ActorRef]() - override def init = { + override def preStart = { channel = ServerSocketChannel.open(); channel.socket().bind(new InetSocketAddress(port)); channel.configureBlocking(false); @@ -122,7 +122,7 @@ object HawtDispatcherEchoServer { var writeCounter = 0L var closed = false - override def init = { + override def preStart = { if(useReactorPattern) { // Then we will be using the reactor pattern for handling IO: @@ -154,7 +154,7 @@ object HawtDispatcherEchoServer { println("Accepted connection from: "+remote_address); } - override def shutdown = { + override def postStop = { closed = true read_source.release write_source.release diff --git a/akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala b/akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala index 44cd9aade3..7ecef80e39 100644 --- a/akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala +++ b/akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala @@ -85,7 +85,7 @@ class ThreadBasedDispatcherSpec extends JUnitSuite { } assert(handleLatch.await(5, TimeUnit.SECONDS)) assert(!threadingIssueDetected.get) - dispatcher.shutdown + dispatcher.postStop } } */ diff --git a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ConsumerActor.scala b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ConsumerActor.scala index d3f0acd1cf..0ca9046093 100644 --- a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ConsumerActor.scala +++ b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ConsumerActor.scala @@ -108,10 +108,10 @@ private[amqp] class ConsumerActor(consumerParameters: ConsumerParameters) super.preRestart(reason) } - override def shutdown = { + override def postStop = { listenerTag.foreach(tag => channel.foreach(_.basicCancel(tag))) self.shutdownLinkedActors - super.shutdown + super.postStop } override def toString = diff --git a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ExampleSession.scala b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ExampleSession.scala index f45553520d..ecb3029444 100644 --- a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ExampleSession.scala +++ b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/ExampleSession.scala @@ -46,7 +46,7 @@ object ExampleSession { printTopic("Happy hAkking :-)") - // shutdown everything the amqp tree except the main AMQP supervisor + // postStop everything the amqp tree except the main AMQP supervisor // all connections/consumers/producers will be stopped AMQP.shutdownAll diff --git a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantChannelActor.scala b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantChannelActor.scala index 5ecae4c6d3..4d642df554 100644 --- a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantChannelActor.scala +++ b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantChannelActor.scala @@ -103,5 +103,5 @@ abstract private[amqp] class FaultTolerantChannelActor( closeChannel } - override def shutdown = closeChannel + override def postStop = closeChannel } diff --git a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantConnectionActor.scala b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantConnectionActor.scala index 1e50a985be..0fd3f715b5 100644 --- a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantConnectionActor.scala +++ b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/FaultTolerantConnectionActor.scala @@ -104,9 +104,9 @@ private[amqp] class FaultTolerantConnectionActor(connectionParameters: Connectio connectionCallback.foreach(cb => if (cb.isRunning) cb ! message) } - override def shutdown = { + override def postStop = { reconnectionTimer.cancel - // make sure shutdown is called on all linked actors so they can do channel cleanup before connection is killed + // make sure postStop is called on all linked actors so they can do channel cleanup before connection is killed self.shutdownLinkedActors disconnect } diff --git a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/rpc/RpcClientActor.scala b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/rpc/RpcClientActor.scala index 5c717cb8bb..10596e393f 100644 --- a/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/rpc/RpcClientActor.scala +++ b/akka-amqp/src/main/scala/se/scalablesolutions/akka/amqp/rpc/RpcClientActor.scala @@ -40,9 +40,9 @@ class RpcClientActor[I,O]( } - override def shutdown = { + override def postStop = { rpcClient.foreach(rpc => rpc.close) - super.shutdown + super.postStop } override def toString = "AMQP.RpcClient[exchange=" +exchangeName + ", routingKey=" + routingKey+ "]" diff --git a/akka-camel/src/main/scala/Producer.scala b/akka-camel/src/main/scala/Producer.scala index 8764b91b4c..0be07e9737 100644 --- a/akka-camel/src/main/scala/Producer.scala +++ b/akka-camel/src/main/scala/Producer.scala @@ -54,10 +54,10 @@ trait ProducerSupport { this: Actor => def headersToCopy: Set[String] = headersToCopyDefault /** - * Default implementation of Actor.shutdown for freeing resources needed + * Default implementation of Actor.postStop for freeing resources needed * to actually send messages to endpointUri. */ - override def shutdown { + override def postStop { processor.stop } diff --git a/akka-http/src/main/scala/AkkaClusterBroadcastFilter.scala b/akka-http/src/main/scala/AkkaClusterBroadcastFilter.scala index 775c8b554d..7ea963872f 100644 --- a/akka-http/src/main/scala/AkkaClusterBroadcastFilter.scala +++ b/akka-http/src/main/scala/AkkaClusterBroadcastFilter.scala @@ -24,6 +24,11 @@ class AkkaClusterBroadcastFilter extends Actor with ClusterBroadcastFilter { @BeanProperty var clusterName = "" @BeanProperty var broadcaster : Broadcaster = null + def init() { + //Since this class is instantiated by Atmosphere, we need to make sure it's started + self.start + } + /** * Stops the actor */ @@ -48,7 +53,4 @@ class AkkaClusterBroadcastFilter extends Actor with ClusterBroadcastFilter { case b @ ClusterCometBroadcast(c, _) if (c == clusterName) && (broadcaster ne null) => broadcaster broadcast b case _ => } - - //Since this class is instantiated by Atmosphere, we need to make sure it's started - self.start } diff --git a/akka-http/src/main/scala/Initializer.scala b/akka-http/src/main/scala/Initializer.scala index da95a39b77..c1cd8bfc87 100644 --- a/akka-http/src/main/scala/Initializer.scala +++ b/akka-http/src/main/scala/Initializer.scala @@ -13,7 +13,7 @@ import se.scalablesolutions.akka.util.{Logging, Bootable} import javax.servlet.{ServletContextListener, ServletContextEvent} /** - * This class can be added to web.xml mappings as a listener to start and shutdown Akka. + * This class can be added to web.xml mappings as a listener to start and postStop Akka. * * * ... diff --git a/akka-jta/src/main/scala/AtomikosTransactionService.scala b/akka-jta/src/main/scala/AtomikosTransactionService.scala index 305ddb6ace..4acbb1a013 100644 --- a/akka-jta/src/main/scala/AtomikosTransactionService.scala +++ b/akka-jta/src/main/scala/AtomikosTransactionService.scala @@ -36,6 +36,6 @@ class AtomikosTransactionService extends TransactionService with TransactionProt "Could not create a new Atomikos J2EE Transaction Manager, due to: " + e.toString) } ))) - // TODO: gracefully shutdown of the TM - //txService.shutdown(false) + // TODO: gracefully postStop of the TM + //txService.postStop(false) } diff --git a/akka-kernel/src/main/scala/Kernel.scala b/akka-kernel/src/main/scala/Kernel.scala index 6489a60680..646ca34bcc 100644 --- a/akka-kernel/src/main/scala/Kernel.scala +++ b/akka-kernel/src/main/scala/Kernel.scala @@ -15,7 +15,7 @@ object Main { } /** - * The Akka Kernel, is used to start And shutdown Akka in standalone/kernel mode. + * The Akka Kernel, is used to start And postStop Akka in standalone/kernel mode. * * @author Jonas Bonér */ diff --git a/akka-remote/src/main/scala/remote/Cluster.scala b/akka-remote/src/main/scala/remote/Cluster.scala index 88807f3ba1..6e1e99f0b2 100644 --- a/akka-remote/src/main/scala/remote/Cluster.scala +++ b/akka-remote/src/main/scala/remote/Cluster.scala @@ -86,11 +86,11 @@ abstract class BasicClusterActor extends ClusterActor with Logging { @volatile private var local: Node = Node(Nil) @volatile private var remotes: Map[ADDR_T, Node] = Map() - override def init = { + override def preStart = { remotes = new HashMap[ADDR_T, Node] } - override def shutdown = { + override def postStop = { remotes = Map() } diff --git a/akka-remote/src/main/scala/remote/JGroupsClusterActor.scala b/akka-remote/src/main/scala/remote/JGroupsClusterActor.scala index 54ef3807d4..07cbf4d65b 100644 --- a/akka-remote/src/main/scala/remote/JGroupsClusterActor.scala +++ b/akka-remote/src/main/scala/remote/JGroupsClusterActor.scala @@ -54,8 +54,8 @@ class JGroupsClusterActor extends BasicClusterActor { protected def toAllNodes(msg : Array[Byte]): Unit = for (c <- channel) c.send(new JG_MSG(null, null, msg)) - override def shutdown = { - super.shutdown + override def postStop = { + super.postStop log info ("Shutting down %s", toString) isActive = false channel.foreach(Util shutdown _) diff --git a/akka-remote/src/main/scala/remote/RemoteClient.scala b/akka-remote/src/main/scala/remote/RemoteClient.scala index f61a5d63a1..62fec595d3 100644 --- a/akka-remote/src/main/scala/remote/RemoteClient.scala +++ b/akka-remote/src/main/scala/remote/RemoteClient.scala @@ -185,7 +185,7 @@ class RemoteClient private[akka] ( extends Logging with ListenerManagement { val name = "RemoteClient@" + hostname + "::" + port - //FIXME Should these be clear:ed on shutdown? + //FIXME Should these be clear:ed on postStop? private val futures = new ConcurrentHashMap[Long, CompletableFuture[_]] private val supervisors = new ConcurrentHashMap[String, ActorRef] diff --git a/akka-remote/src/main/scala/remote/RemoteServer.scala b/akka-remote/src/main/scala/remote/RemoteServer.scala index b10d8e5825..f68e602866 100644 --- a/akka-remote/src/main/scala/remote/RemoteServer.scala +++ b/akka-remote/src/main/scala/remote/RemoteServer.scala @@ -398,7 +398,7 @@ class RemoteServerHandler( applicationLoader.foreach(MessageSerializer.setClassLoader(_)) /** - * ChannelOpen overridden to store open channels for a clean shutdown of a RemoteServer. + * ChannelOpen overridden to store open channels for a clean postStop of a RemoteServer. * If a channel is closed before, it is automatically removed from the open channels group. */ override def channelOpen(ctx: ChannelHandlerContext, event: ChannelStateEvent) = openChannels.add(ctx.getChannel) diff --git a/akka-remote/src/test/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java b/akka-remote/src/test/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java index 0ab1a0aa10..3c8a60aecc 100644 --- a/akka-remote/src/test/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java +++ b/akka-remote/src/test/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java @@ -3920,7 +3920,7 @@ public final class RemoteProtocol { public boolean hasInit() { return hasInit; } public java.lang.String getInit() { return init_; } - // optional string shutdown = 5; + // optional string postStop = 5; public static final int SHUTDOWN_FIELD_NUMBER = 5; private boolean hasShutdown; private java.lang.String shutdown_ = ""; @@ -4295,7 +4295,7 @@ public final class RemoteProtocol { return this; } - // optional string shutdown = 5; + // optional string postStop = 5; public boolean hasShutdown() { return result.hasShutdown(); } diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala index 5baa799258..4ef1abf0c4 100644 --- a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala @@ -67,7 +67,7 @@ class ServerInitiatedRemoteActorSpec extends JUnitSuite { Thread.sleep(1000) } - // make sure the servers shutdown cleanly after the test has finished + // make sure the servers postStop cleanly after the test has finished @After def finished { try { diff --git a/akka-remote/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala b/akka-remote/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala index 011c656f8d..e05e4b0394 100644 --- a/akka-remote/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala +++ b/akka-remote/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala @@ -47,7 +47,7 @@ class ProtobufActorMessageSerializationSpec extends JUnitSuite { Thread.sleep(1000) } - // make sure the servers shutdown cleanly after the test has finished + // make sure the servers postStop cleanly after the test has finished @After def finished() { server.shutdown diff --git a/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala b/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala index e3fd76a344..6f70d8071a 100644 --- a/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala +++ b/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala @@ -185,7 +185,7 @@ trait ChatServer extends Actor { protected def sessionManagement: Receive protected def shutdownSessions(): Unit - override def shutdown = { + override def postStop = { log.info("Chat server is shutting down...") shutdownSessions self.unlink(storage) @@ -205,7 +205,7 @@ class ChatService extends SessionManagement with ChatManagement with RedisChatStorageFactory { - override def init = { + override def preStart = { RemoteNode.start("localhost", 9999) RemoteNode.register("chat:service", self) } diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/Pojo.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/Pojo.java index 24c0fea352..6046f2bb5d 100644 --- a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/Pojo.java +++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/Pojo.java @@ -14,7 +14,7 @@ public class Pojo extends TypedActor implements PojoInf, ApplicationContextAware private String stringFromRef; private boolean gotApplicationContext = false; - private boolean initInvoked = false; + private boolean preStartInvoked = false; public boolean gotApplicationContext() { return gotApplicationContext; @@ -41,11 +41,11 @@ public class Pojo extends TypedActor implements PojoInf, ApplicationContextAware } @Override - public void init() { - initInvoked = true; + public void preStart() { + preStartInvoked = true; } - public boolean isInitInvoked() { - return initInvoked; + public boolean isPreStartInvoked() { + return preStartInvoked; } } diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/PojoInf.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/PojoInf.java index 9ebf80e89b..0a313ceb18 100644 --- a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/PojoInf.java +++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/PojoInf.java @@ -8,6 +8,6 @@ public interface PojoInf { public String getStringFromVal(); public String getStringFromRef(); public boolean gotApplicationContext(); - public boolean isInitInvoked(); + public boolean isPreStartInvoked(); } diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java index f9d3381436..29e80d1c65 100644 --- a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java +++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java @@ -19,7 +19,7 @@ public class SampleBean extends TypedActor implements SampleBeanIntf { } @Override - public void shutdown() { + public void postStop() { down = true; } } diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/StatefulPojo.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/StatefulPojo.java index 3b4e05453b..ce85267edc 100644 --- a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/StatefulPojo.java +++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/StatefulPojo.java @@ -5,6 +5,7 @@ import se.scalablesolutions.akka.stm.TransactionalMap; import se.scalablesolutions.akka.stm.TransactionalVector; import se.scalablesolutions.akka.stm.Ref; import se.scalablesolutions.akka.actor.*; +import se.scalablesolutions.akka.stm.local.Atomic; public class StatefulPojo extends TypedActor { private TransactionalMap mapState; @@ -13,12 +14,16 @@ public class StatefulPojo extends TypedActor { private boolean isInitialized = false; @Override - public void initTransactionalState() { - if (!isInitialized) { - mapState = new TransactionalMap(); - vectorState = new TransactionalVector(); - refState = new Ref(); - isInitialized = true; + public void preStart() { + if(!isInitialized) { + isInitialized = new Atomic() { + public Boolean atomically() { + mapState = new TransactionalMap(); + vectorState = new TransactionalVector(); + refState = new Ref(); + return true; + } + }.execute(); } } diff --git a/akka-spring/src/test/scala/ActorFactoryBeanTest.scala b/akka-spring/src/test/scala/ActorFactoryBeanTest.scala index 13c6203929..0bd373a408 100644 --- a/akka-spring/src/test/scala/ActorFactoryBeanTest.scala +++ b/akka-spring/src/test/scala/ActorFactoryBeanTest.scala @@ -68,7 +68,7 @@ class ActorFactoryBeanTest extends Spec with ShouldMatchers with BeforeAndAfterA it("should create an application context and verify dependency injection for typed") { var ctx = new ClassPathXmlApplicationContext("appContext.xml"); val ta = ctx.getBean("typedActor").asInstanceOf[PojoInf]; - assert(ta.isInitInvoked) + assert(ta.isPreStartInvoked) assert(ta.getStringFromVal === "akka rocks") assert(ta.getStringFromRef === "spring rocks") assert(ta.gotApplicationContext) diff --git a/akka-typed-actor/src/main/scala/actor/TypedActor.scala b/akka-typed-actor/src/main/scala/actor/TypedActor.scala index b27f5b4b4d..d3c6a56f9f 100644 --- a/akka-typed-actor/src/main/scala/actor/TypedActor.scala +++ b/akka-typed-actor/src/main/scala/actor/TypedActor.scala @@ -41,12 +41,12 @@ import scala.reflect.BeanProperty * } * * @Override - * public void init() { + * public void preStart() { * ... // optional initialization on start * } * * @Override - * public void shutdown() { + * public void postStop() { * ... // optional cleanup on stop * } * @@ -79,11 +79,11 @@ import scala.reflect.BeanProperty * * def square(x: Int): Future[Integer] = future(x * x) * - * override def init = { + * override def preStart = { * ... // optional initialization on start * } * - * override def shutdown = { + * override def postStop = { * ... // optional cleanup on stop * } * @@ -519,11 +519,7 @@ object TypedActor extends Logging { val typedActor = if (instance.isInstanceOf[TypedActor]) instance.asInstanceOf[TypedActor] else throw new IllegalArgumentException("Actor [" + targetClass.getName + "] is not a sub class of 'TypedActor'") - typedActor.init - import se.scalablesolutions.akka.stm.local.atomic - atomic { - typedActor.initTransactionalState - } + typedActor.preStart typedActor } diff --git a/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java index 1b95517c22..cb002b0a9e 100644 --- a/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java +++ b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java @@ -10,7 +10,7 @@ public class NestedTransactionalTypedActorImpl extends TypedTransactor implement private boolean isInitialized = false; @Override - public void init() { + public void preStart() { if (!isInitialized) { mapState = new TransactionalMap(); vectorState = new TransactionalVector(); diff --git a/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java index 12985c72ce..1e567014d9 100644 --- a/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java +++ b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java @@ -38,7 +38,7 @@ public class SamplePojoImpl extends TypedActor implements SamplePojo { } @Override - public void shutdown() { + public void postStop() { _down = true; latch.countDown(); } diff --git a/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java index 9b32f5d329..45bda4a675 100644 --- a/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java +++ b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java @@ -2,6 +2,8 @@ package se.scalablesolutions.akka.actor; import se.scalablesolutions.akka.actor.*; import se.scalablesolutions.akka.stm.*; +import se.scalablesolutions.akka.stm.local.*; +import se.scalablesolutions.akka.stm.local.Atomic; public class TransactionalTypedActorImpl extends TypedTransactor implements TransactionalTypedActor { private TransactionalMap mapState; @@ -10,12 +12,16 @@ public class TransactionalTypedActorImpl extends TypedTransactor implements Tran private boolean isInitialized = false; @Override - public void initTransactionalState() { + public void preStart() { if (!isInitialized) { - mapState = new TransactionalMap(); - vectorState = new TransactionalVector(); - refState = new Ref(); - isInitialized = true; + isInitialized = new Atomic() { + public Boolean atomically() { + mapState = new TransactionalMap(); + vectorState = new TransactionalVector(); + refState = new Ref(); + return true; + } + }.execute(); } } diff --git a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala index 10fc40493b..9a21af06da 100644 --- a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala +++ b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala @@ -95,7 +95,7 @@ class TypedActorLifecycleSpec extends Spec with ShouldMatchers with BeforeAndAft } /* - it("should shutdown non-supervised, annotated typed actor on TypedActor.stop") { + it("should postStop non-supervised, annotated typed actor on TypedActor.stop") { val obj = TypedActor.newInstance(classOf[SamplePojoAnnotated]) assert(AspectInitRegistry.initFor(obj) ne null) assert("hello akka" === obj.greet("akka")) @@ -112,7 +112,7 @@ class TypedActorLifecycleSpec extends Spec with ShouldMatchers with BeforeAndAft } } - it("should shutdown non-supervised, annotated typed actor on ActorRegistry.shutdownAll") { + it("should postStop non-supervised, annotated typed actor on ActorRegistry.shutdownAll") { val obj = TypedActor.newInstance(classOf[SamplePojoAnnotated]) assert(AspectInitRegistry.initFor(obj) ne null) assert("hello akka" === obj.greet("akka")) @@ -147,7 +147,7 @@ class TypedActorLifecycleSpec extends Spec with ShouldMatchers with BeforeAndAft } } - it("should shutdown supervised, annotated typed actor on failure") { + it("should postStop supervised, annotated typed actor on failure") { val obj = conf2.getInstance[SamplePojoAnnotated](classOf[SamplePojoAnnotated]) val cdl = obj.newCountdownLatch(1) assert(AspectInitRegistry.initFor(obj) ne null)