#304 Fixed Support for ApplicationContextAware in akka-spring
This commit is contained in:
parent
da275f45dd
commit
2deb9faf3d
4 changed files with 25 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ import org.springframework.beans.BeanWrapper
|
||||||
import org.springframework.beans.BeanUtils
|
import org.springframework.beans.BeanUtils
|
||||||
import org.springframework.util.ReflectionUtils
|
import org.springframework.util.ReflectionUtils
|
||||||
import org.springframework.util.StringUtils
|
import org.springframework.util.StringUtils
|
||||||
|
import org.springframework.context.{ApplicationContext,ApplicationContextAware}
|
||||||
import org.springframework.beans.factory.BeanFactory
|
import org.springframework.beans.factory.BeanFactory
|
||||||
import org.springframework.beans.factory.config.AbstractFactoryBean
|
import org.springframework.beans.factory.config.AbstractFactoryBean
|
||||||
import se.scalablesolutions.akka.actor.ActiveObject
|
import se.scalablesolutions.akka.actor.ActiveObject
|
||||||
|
|
@ -26,7 +27,7 @@ import se.scalablesolutions.akka.util.Logging
|
||||||
* @author michaelkober
|
* @author michaelkober
|
||||||
* @author <a href="johan.rask@jayway.com">Johan Rask</a>
|
* @author <a href="johan.rask@jayway.com">Johan Rask</a>
|
||||||
*/
|
*/
|
||||||
class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging {
|
class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging with ApplicationContextAware {
|
||||||
import StringReflect._
|
import StringReflect._
|
||||||
import AkkaSpringConfigurationTags._
|
import AkkaSpringConfigurationTags._
|
||||||
|
|
||||||
|
|
@ -42,6 +43,7 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging {
|
||||||
@BeanProperty var dispatcher: DispatcherProperties = _
|
@BeanProperty var dispatcher: DispatcherProperties = _
|
||||||
@BeanProperty var scope:String = VAL_SCOPE_SINGLETON
|
@BeanProperty var scope:String = VAL_SCOPE_SINGLETON
|
||||||
@BeanProperty var property:PropertyEntries = _
|
@BeanProperty var property:PropertyEntries = _
|
||||||
|
@BeanProperty var applicationContext:ApplicationContext = _
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
|
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
|
||||||
|
|
@ -78,6 +80,10 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging {
|
||||||
private def setProperties(ref:AnyRef) : AnyRef = {
|
private def setProperties(ref:AnyRef) : AnyRef = {
|
||||||
log.debug("Processing properties and dependencies for target class %s",target)
|
log.debug("Processing properties and dependencies for target class %s",target)
|
||||||
val beanWrapper = new BeanWrapperImpl(ref);
|
val beanWrapper = new BeanWrapperImpl(ref);
|
||||||
|
if(ref.isInstanceOf[ApplicationContextAware]) {
|
||||||
|
log.debug("Setting application context")
|
||||||
|
beanWrapper.setPropertyValue("applicationContext",applicationContext)
|
||||||
|
}
|
||||||
for(entry <- property.entryList) {
|
for(entry <- property.entryList) {
|
||||||
val propertyDescriptor = BeanUtils.getPropertyDescriptor(ref.getClass,entry.name)
|
val propertyDescriptor = BeanUtils.getPropertyDescriptor(ref.getClass,entry.name)
|
||||||
val method = propertyDescriptor.getWriteMethod();
|
val method = propertyDescriptor.getWriteMethod();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,15 @@
|
||||||
package se.scalablesolutions.akka.spring;
|
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) {
|
public String foo(String s) {
|
||||||
return "hello " + s;
|
return "hello " + s;
|
||||||
|
|
|
||||||
|
|
@ -18,4 +18,6 @@
|
||||||
<bean id="string" class="java.lang.String">
|
<bean id="string" class="java.lang.String">
|
||||||
<constructor-arg value="someString"/>
|
<constructor-arg value="someString"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<akka:active-object id="sample" target="se.scalablesolutions.akka.spring.SampleBean" timeout="1000" />
|
||||||
</beans>
|
</beans>
|
||||||
|
|
@ -69,6 +69,10 @@ class ActiveObjectFactoryBeanTest extends Spec with ShouldMatchers {
|
||||||
var ctx = new ClassPathXmlApplicationContext("appContext.xml");
|
var ctx = new ClassPathXmlApplicationContext("appContext.xml");
|
||||||
val target:ResourceEditor = ctx.getBean("bean").asInstanceOf[ResourceEditor]
|
val target:ResourceEditor = ctx.getBean("bean").asInstanceOf[ResourceEditor]
|
||||||
assert(target.getSource === "someString")
|
assert(target.getSource === "someString")
|
||||||
|
|
||||||
|
val sampleBean = ctx.getBean("sample").asInstanceOf[SampleBean];
|
||||||
|
Thread.sleep(300)
|
||||||
|
assert(sampleBean.gotApplicationContext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue