diff --git a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala index 4f6ea37148..1e669114ce 100644 --- a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala +++ b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala @@ -12,6 +12,7 @@ import org.springframework.beans.BeanWrapper import org.springframework.beans.BeanUtils import org.springframework.util.ReflectionUtils import org.springframework.util.StringUtils +import org.springframework.context.{ApplicationContext,ApplicationContextAware} import org.springframework.beans.factory.BeanFactory import org.springframework.beans.factory.config.AbstractFactoryBean import se.scalablesolutions.akka.actor.ActiveObject @@ -26,7 +27,7 @@ import se.scalablesolutions.akka.util.Logging * @author michaelkober * @author Johan Rask */ -class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging { +class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging with ApplicationContextAware { import StringReflect._ import AkkaSpringConfigurationTags._ @@ -42,6 +43,7 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging { @BeanProperty var dispatcher: DispatcherProperties = _ @BeanProperty var scope:String = VAL_SCOPE_SINGLETON @BeanProperty var property:PropertyEntries = _ + @BeanProperty var applicationContext:ApplicationContext = _ /* * @see org.springframework.beans.factory.FactoryBean#getObjectType() @@ -78,7 +80,11 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging { private def setProperties(ref:AnyRef) : AnyRef = { log.debug("Processing properties and dependencies for target class %s",target) val beanWrapper = new BeanWrapperImpl(ref); - for(entry <- property.entryList) { + if(ref.isInstanceOf[ApplicationContextAware]) { + log.debug("Setting application context") + beanWrapper.setPropertyValue("applicationContext",applicationContext) + } + for(entry <- property.entryList) { val propertyDescriptor = BeanUtils.getPropertyDescriptor(ref.getClass,entry.name) val method = propertyDescriptor.getWriteMethod(); 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 37953173ec..7e29f5588d 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 @@ -1,6 +1,15 @@ package se.scalablesolutions.akka.spring; -public class SampleBean { +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationContext; + +public class SampleBean implements ApplicationContextAware { + + public boolean gotApplicationContext = false; + + public void setApplicationContext(ApplicationContext context) { + gotApplicationContext = true; + } public String foo(String s) { return "hello " + s; diff --git a/akka-spring/src/test/resources/appContext.xml b/akka-spring/src/test/resources/appContext.xml index 5648fa2fdf..2da3ae0c00 100644 --- a/akka-spring/src/test/resources/appContext.xml +++ b/akka-spring/src/test/resources/appContext.xml @@ -15,7 +15,9 @@ - + + + \ No newline at end of file diff --git a/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala b/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala index f1c11d0eee..39544804da 100644 --- a/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala +++ b/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala @@ -69,6 +69,10 @@ class ActiveObjectFactoryBeanTest extends Spec with ShouldMatchers { var ctx = new ClassPathXmlApplicationContext("appContext.xml"); val target:ResourceEditor = ctx.getBean("bean").asInstanceOf[ResourceEditor] assert(target.getSource === "someString") + + val sampleBean = ctx.getBean("sample").asInstanceOf[SampleBean]; + Thread.sleep(300) + assert(sampleBean.gotApplicationContext) } } }