From 71ec0bdcfb3234740f4c3bfeb4643b7fde723367 Mon Sep 17 00:00:00 2001 From: Michael Kober Date: Mon, 16 Aug 2010 14:32:31 +0200 Subject: [PATCH] fixed properties for untyped actors --- .../src/main/scala/ActorFactoryBean.scala | 4 +- .../akka/spring/foo/PingActor.java | 38 ++++++++++++++++++- akka-spring/src/test/resources/appContext.xml | 7 ++++ .../src/test/scala/ActorFactoryBeanTest.scala | 28 ++++++++++++-- 4 files changed, 71 insertions(+), 6 deletions(-) diff --git a/akka-spring/src/main/scala/ActorFactoryBean.scala b/akka-spring/src/main/scala/ActorFactoryBean.scala index f01f8a4880..11d5274a70 100644 --- a/akka-spring/src/main/scala/ActorFactoryBean.scala +++ b/akka-spring/src/main/scala/ActorFactoryBean.scala @@ -80,7 +80,9 @@ class ActorFactoryBean extends AbstractFactoryBean[AnyRef] with Logging with App case TYPED_ACTOR_TAG => val typedActor = createTypedInstance() setProperties(AspectInitRegistry.initFor(typedActor).targetInstance) typedActor - case UNTYPED_ACTOR_TAG => createUntypedInstance() + case UNTYPED_ACTOR_TAG => val untypedActor = createUntypedInstance() + setProperties(untypedActor.actor) + untypedActor case _ => throw new IllegalArgumentException("Unknown actor type") } ref diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/PingActor.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/PingActor.java index 98291788e1..e447b26a28 100644 --- a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/PingActor.java +++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/foo/PingActor.java @@ -3,10 +3,45 @@ package se.scalablesolutions.akka.spring.foo; import se.scalablesolutions.akka.actor.UntypedActor; import se.scalablesolutions.akka.actor.ActorRef; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + + /** * test class */ -public class PingActor extends UntypedActor { +public class PingActor extends UntypedActor implements ApplicationContextAware { + + private String stringFromVal; + private String stringFromRef; + + private boolean gotApplicationContext = false; + + + public void setApplicationContext(ApplicationContext context) { + gotApplicationContext = true; + } + + public boolean gotApplicationContext() { + return gotApplicationContext; + } + + public String getStringFromVal() { + return stringFromVal; + } + + public void setStringFromVal(String s) { + stringFromVal = s; + } + + public String getStringFromRef() { + return stringFromRef; + } + + public void setStringFromRef(String s) { + stringFromRef = s; + } + private String longRunning() { try { @@ -31,3 +66,4 @@ public class PingActor extends UntypedActor { } + diff --git a/akka-spring/src/test/resources/appContext.xml b/akka-spring/src/test/resources/appContext.xml index 29dc5dbd87..02ea1c6733 100644 --- a/akka-spring/src/test/resources/appContext.xml +++ b/akka-spring/src/test/resources/appContext.xml @@ -30,6 +30,13 @@ + + + + + diff --git a/akka-spring/src/test/scala/ActorFactoryBeanTest.scala b/akka-spring/src/test/scala/ActorFactoryBeanTest.scala index 112f34f0c7..f765cc3307 100644 --- a/akka-spring/src/test/scala/ActorFactoryBeanTest.scala +++ b/akka-spring/src/test/scala/ActorFactoryBeanTest.scala @@ -3,7 +3,8 @@ */ package se.scalablesolutions.akka.spring -import se.scalablesolutions.akka.actor.ActorRegistry; +import se.scalablesolutions.akka.actor.{ActorRegistry, ActorRef} +import se.scalablesolutions.akka.spring.foo.PingActor import org.junit.runner.RunWith import org.springframework.context.support.ClassPathXmlApplicationContext @@ -64,17 +65,36 @@ class ActorFactoryBeanTest extends Spec with ShouldMatchers with BeforeAndAfterA assert(target.getStringFromVal === entry.value) } - it("should create an application context and verify dependency injection") { + it("should create an application context and verify dependency injection for tryped") { var ctx = new ClassPathXmlApplicationContext("appContext.xml"); val ta = ctx.getBean("typedActor").asInstanceOf[PojoInf]; assert(ta.isInitInvoked) - assert(ta.getStringFromVal == "akka rocks") - assert(ta.getStringFromRef == "spring rocks") + assert(ta.getStringFromVal === "akka rocks") + assert(ta.getStringFromRef === "spring rocks") assert(ta.gotApplicationContext) ctx.close } + it("should create an application context and verify dependency injection for untyped actors") { + var ctx = new ClassPathXmlApplicationContext("appContext.xml") + val uta = ctx.getBean("untypedActor").asInstanceOf[ActorRef] + val ping = uta.actor.asInstanceOf[PingActor] + assert(ping.getStringFromVal === "akka rocks") + assert(ping.getStringFromRef === "spring rocks") + assert(ping.gotApplicationContext) + ctx.close + } + it("should stop the created typed actor when scope is singleton and the context is closed") { + var ctx = new ClassPathXmlApplicationContext("appContext.xml"); + val target = ctx.getBean("untypedActor").asInstanceOf[ActorRef] + target.start + assert(target.isRunning) + ctx.close + assert(!target.isRunning) + } + + it("should stop the created untyped actor when scope is singleton and the context is closed") { var ctx = new ClassPathXmlApplicationContext("appContext.xml"); val target = ctx.getBean("bean-singleton").asInstanceOf[SampleBeanIntf] assert(!target.down)