diff --git a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
index bc4286cec1..5b7a62a0b5 100644
--- a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
+++ b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
@@ -48,6 +48,20 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging w
@BeanProperty var scope:String = VAL_SCOPE_SINGLETON
@BeanProperty var property:PropertyEntries = _
@BeanProperty var applicationContext:ApplicationContext = _
+
+ // Holds info about if deps has been set or not. Depends on
+ // if interface is specified or not. We must set deps on
+ // target instance if interface is specified
+ var hasSetDependecies = false
+
+
+ override def isSingleton:Boolean = {
+ if(scope.equals(VAL_SCOPE_SINGLETON)) {
+ true
+ } else {
+ false
+ }
+ }
/*
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
@@ -63,11 +77,6 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging w
* @see org.springframework.beans.factory.config.AbstractFactoryBean#createInstance()
*/
def createInstance: AnyRef = {
- if(scope.equals(VAL_SCOPE_SINGLETON)) {
- setSingleton(true)
- } else {
- setSingleton(false)
- }
var argumentList = ""
if (isRemote) argumentList += "r"
if (hasInterface) argumentList += "i"
@@ -86,7 +95,11 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging w
super.destroy
}
- private def setProperties(ref:AnyRef) : AnyRef = {
+ private def setProperties(ref:AnyRef) : AnyRef = {
+ if(hasSetDependecies) {
+ return ref
+ }
+
log.debug("Processing properties and dependencies for target class %s",target)
val beanWrapper = new BeanWrapperImpl(ref);
if(ref.isInstanceOf[ApplicationContextAware]) {
@@ -109,6 +122,8 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging w
throw new AkkaBeansException("Either property@ref or property@value must be set on property element")
}
}
+ //un-set so next bean can be managed
+ hasSetDependecies = false
ref
}
@@ -139,10 +154,12 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging w
if (transactional) config.makeTransactionRequired
config
}
-
- private[akka] def aNewInstance[T <: AnyRef](clazz: Class[T]) : T = {
- clazz.newInstance().asInstanceOf[T]
- }
+ def aNewInstance[T <: AnyRef](clazz: Class[T]) : T = {
+ var ref = clazz.newInstance().asInstanceOf[T]
+ setProperties(ref)
+ hasSetDependecies = true
+ ref
+}
private[akka] def isRemote = (host != null) && (!host.isEmpty)
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
new file mode 100644
index 0000000000..42e1e393e7
--- /dev/null
+++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/Pojo.java
@@ -0,0 +1,27 @@
+package se.scalablesolutions.akka.spring;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+public class Pojo implements PojoInf,ApplicationContextAware {
+
+ private String string;
+
+ private boolean gotApplicationContext = false;
+
+ public boolean gotApplicationContext() {
+ return gotApplicationContext;
+ }
+ public void setApplicationContext(ApplicationContext context) {
+ gotApplicationContext = true;
+ }
+
+ public void setString(String s) {
+ string = s;
+ }
+
+ public String getString() {
+ return string;
+ }
+
+ }
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
new file mode 100644
index 0000000000..db31841f17
--- /dev/null
+++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/PojoInf.java
@@ -0,0 +1,8 @@
+package se.scalablesolutions.akka.spring;
+
+public interface PojoInf {
+
+ public String getString();
+ public boolean gotApplicationContext();
+
+ }
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 ce8cf1fd70..e8adaa38e7 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,23 +1,13 @@
package se.scalablesolutions.akka.spring;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.ApplicationContext;
-
import se.scalablesolutions.akka.actor.annotation.shutdown;
-public class SampleBean implements ApplicationContextAware {
+public class SampleBean {
public boolean down;
- public boolean gotApplicationContext;
-
public SampleBean() {
down = false;
- gotApplicationContext = false;
- }
-
- public void setApplicationContext(ApplicationContext context) {
- gotApplicationContext = true;
}
public String foo(String s) {
diff --git a/akka-spring/src/test/resources/appContext.xml b/akka-spring/src/test/resources/appContext.xml
index b299b3e363..e9a651b735 100644
--- a/akka-spring/src/test/resources/appContext.xml
+++ b/akka-spring/src/test/resources/appContext.xml
@@ -22,4 +22,12 @@
-
+
+
+
+
+
diff --git a/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala b/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala
index e0db33e8f1..5055fb6184 100644
--- a/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala
+++ b/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala
@@ -65,14 +65,15 @@ class ActiveObjectFactoryBeanTest extends Spec with ShouldMatchers {
assert(target.getSource === entry.value)
}
- it("should create an application context and inject a string dependency") {
+ it("should create an application context and verify dependency injection") {
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)
+
+ val pojoInf = ctx.getBean("pojoInf").asInstanceOf[PojoInf];
+ println("pojoInf = " + pojoInf.getString)
+ assert(pojoInf.getString == "akka rocks")
+ assert(pojoInf.gotApplicationContext)
}
it("should stop the created active object when scope is singleton and the context is closed") {