diff --git a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoBase.java b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoBase.java
index 7a9b5c95cc..f0f0b8ee4d 100644
--- a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoBase.java
+++ b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoBase.java
@@ -1,10 +1,6 @@
package se.scalablesolutions.akka.camel;
-import org.apache.camel.Body;
-import org.apache.camel.Header;
-
-import se.scalablesolutions.akka.actor.annotation.consume;
-import se.scalablesolutions.akka.actor.*;
+import se.scalablesolutions.akka.actor.TypedActor;
/**
* @author Martin Krasser
@@ -15,21 +11,18 @@ public class PojoBase extends TypedActor implements PojoBaseIntf {
return "m1base: " + b + " " + h;
}
- @consume("direct:m2base")
- public String m2(@Body String b, @Header("test") String h) {
+ public String m2(String b, String h) {
return "m2base: " + b + " " + h;
}
- @consume("direct:m3base")
- public String m3(@Body String b, @Header("test") String h) {
+ public String m3(String b, String h) {
return "m3base: " + b + " " + h;
}
- @consume("direct:m4base")
- public String m4(@Body String b, @Header("test") String h) {
+ public String m4(String b, String h) {
return "m4base: " + b + " " + h;
}
- public void m5(@Body String b, @Header("test") String h) {
+ public void m5(String b, String h) {
}
}
diff --git a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoImpl.java b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoImpl.java
index 8866acf573..f8ade8ac97 100644
--- a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoImpl.java
+++ b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoImpl.java
@@ -1,10 +1,6 @@
package se.scalablesolutions.akka.camel;
-import org.apache.camel.Body;
-import org.apache.camel.Header;
-
-import se.scalablesolutions.akka.actor.annotation.consume;
-import se.scalablesolutions.akka.actor.*;
+import se.scalablesolutions.akka.actor.TypedActor;
/**
* @author Martin Krasser
@@ -15,8 +11,7 @@ public class PojoImpl extends TypedActor implements PojoIntf {
return "m1impl: " + b + " " + h;
}
- @consume("direct:m2impl")
- public String m2(@Body String b, @Header("test") String h) {
+ public String m2(String b, String h) {
return "m2impl: " + b + " " + h;
}
}
diff --git a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoRemote.java b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoRemote.java
index 61ea4d7a17..3ea8b05180 100644
--- a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoRemote.java
+++ b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoRemote.java
@@ -1,14 +1,12 @@
package se.scalablesolutions.akka.camel;
-import se.scalablesolutions.akka.actor.annotation.consume;
-import se.scalablesolutions.akka.actor.*;
+import se.scalablesolutions.akka.actor.TypedActor;
/**
* @author Martin Krasser
*/
public class PojoRemote extends TypedActor implements PojoRemoteIntf {
- @consume("direct:remote-active-object")
public String foo(String s) {
return String.format("remote typed actor: %s", s);
}
diff --git a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSingle.java b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSingle.java
index d4cbe1aabe..7d4f6be5da 100644
--- a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSingle.java
+++ b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSingle.java
@@ -1,14 +1,12 @@
package se.scalablesolutions.akka.camel;
-import se.scalablesolutions.akka.actor.annotation.consume;
-import se.scalablesolutions.akka.actor.*;
+import se.scalablesolutions.akka.actor.TypedActor;
/**
* @author Martin Krasser
*/
public class PojoSingle extends TypedActor implements PojoSingleIntf {
- @consume("direct:foo")
public void foo(String b) {
}
diff --git a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSub.java b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSub.java
index 24caf37348..a7e592ef01 100644
--- a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSub.java
+++ b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/PojoSub.java
@@ -1,16 +1,11 @@
package se.scalablesolutions.akka.camel;
-import org.apache.camel.Body;
-import org.apache.camel.Header;
-
-import se.scalablesolutions.akka.actor.annotation.consume;
-import se.scalablesolutions.akka.actor.*;
+import se.scalablesolutions.akka.actor.TypedActor;
public class PojoSub extends PojoBase implements PojoSubIntf {
@Override
- @consume("direct:m1sub")
- public String m1(@Body String b, @Header("test") String h) {
+ public String m1(String b, String h) {
return "m1sub: " + b + " " + h;
}
@@ -20,8 +15,7 @@ public class PojoSub extends PojoBase implements PojoSubIntf {
}
@Override
- @consume("direct:m3sub")
- public String m3(@Body String b, @Header("test") String h) {
+ public String m3(String b, String h) {
return "m3sub: " + b + " " + h;
}
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo2Impl.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo2Impl.java
deleted file mode 100644
index eeca816d1b..0000000000
--- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo2Impl.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package sample.camel;
-
-import org.apache.camel.Body;
-import org.apache.camel.Header;
-
-import se.scalablesolutions.akka.actor.TypedActor;
-import se.scalablesolutions.akka.actor.annotation.consume;
-
-/**
- * @author Martin Krasser
- */
-public class ConsumerPojo2Impl extends TypedActor implements ConsumerPojo2 {
-
- @consume("direct:default")
- public String foo(String body) {
- return String.format("default: %s", body);
- }
-}
\ No newline at end of file
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer1.java
similarity index 91%
rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1.java
rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer1.java
index d099816161..f05d96c953 100644
--- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1.java
+++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer1.java
@@ -8,7 +8,7 @@ import se.scalablesolutions.akka.actor.annotation.consume;
/**
* @author Martin Krasser
*/
-public interface ConsumerPojo1 {
+public interface TypedConsumer1 {
@consume("file:data/input/pojo")
public void foo(String body);
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1Impl.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer1Impl.java
similarity index 66%
rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1Impl.java
rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer1Impl.java
index 8f3ca9625d..dc4014fb1f 100644
--- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1Impl.java
+++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer1Impl.java
@@ -3,21 +3,18 @@ package sample.camel;
import org.apache.camel.Body;
import org.apache.camel.Header;
-import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.TypedActor;
/**
* @author Martin Krasser
*/
-public class ConsumerPojo1Impl extends TypedActor implements ConsumerPojo1 {
+public class TypedConsumer1Impl extends TypedActor implements TypedConsumer1 {
- @consume("file:data/input/pojo")
public void foo(String body) {
System.out.println("Received message:");
System.out.println(body);
}
- @consume("jetty:http://0.0.0.0:8877/camel/pojo")
public String bar(@Body String body, @Header("name") String header) {
return String.format("body=%s header=%s", body, header);
}
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo2.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer2.java
similarity index 87%
rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo2.java
rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer2.java
index c0ef7a6798..1fed5ac4ce 100644
--- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo2.java
+++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer2.java
@@ -7,7 +7,7 @@ import se.scalablesolutions.akka.actor.annotation.consume;
/**
* @author Martin Krasser
*/
-public interface ConsumerPojo2 {
+public interface TypedConsumer2 {
@consume("direct:default")
public String foo(String body);
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer2Impl.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer2Impl.java
new file mode 100644
index 0000000000..8a5fe1e4c9
--- /dev/null
+++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedConsumer2Impl.java
@@ -0,0 +1,13 @@
+package sample.camel;
+
+import se.scalablesolutions.akka.actor.TypedActor;
+
+/**
+ * @author Martin Krasser
+ */
+public class TypedConsumer2Impl extends TypedActor implements TypedConsumer2 {
+
+ public String foo(String body) {
+ return String.format("default: %s", body);
+ }
+}
\ No newline at end of file
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer1.java
similarity index 89%
rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1.java
rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer1.java
index 929a82b65d..23fa7e2181 100644
--- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1.java
+++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer1.java
@@ -8,7 +8,7 @@ import se.scalablesolutions.akka.actor.annotation.consume;
/**
* @author Martin Krasser
*/
-public interface RemoteConsumerPojo1 {
+public interface TypedRemoteConsumer1 {
@consume("jetty:http://localhost:6644/camel/remote-active-object-1")
public String foo(@Body String body, @Header("name") String header);
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1Impl.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer1Impl.java
similarity index 59%
rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1Impl.java
rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer1Impl.java
index 858afcdbeb..1cc32b3e07 100644
--- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1Impl.java
+++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer1Impl.java
@@ -3,15 +3,13 @@ package sample.camel;
import org.apache.camel.Body;
import org.apache.camel.Header;
-import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.TypedActor;
/**
* @author Martin Krasser
*/
-public class RemoteConsumerPojo1Impl extends TypedActor implements RemoteConsumerPojo1 {
+public class TypedRemoteConsumer1Impl extends TypedActor implements TypedRemoteConsumer1 {
- @consume("jetty:http://localhost:6644/camel/remote-active-object-1")
public String foo(@Body String body, @Header("name") String header) {
return String.format("remote1: body=%s header=%s", body, header);
}
diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo2.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer2.java
similarity index 91%
rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo2.java
rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer2.java
index e982fe5025..ef824acce2 100644
--- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo2.java
+++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/TypedRemoteConsumer2.java
@@ -7,7 +7,7 @@ import se.scalablesolutions.akka.actor.annotation.consume;
/**
* @author Martin Krasser
*/
-public class RemoteConsumerPojo2 {
+public class TypedRemoteConsumer2 {
@consume("jetty:http://localhost:6644/camel/remote-active-object-2")
public String foo(@Body String body, @Header("name") String header) {
diff --git a/akka-samples/akka-sample-camel/src/main/resources/context-standalone.xml b/akka-samples/akka-sample-camel/src/main/resources/context-standalone.xml
index 36645a936d..6dc8cfd564 100644
--- a/akka-samples/akka-sample-camel/src/main/resources/context-standalone.xml
+++ b/akka-samples/akka-sample-camel/src/main/resources/context-standalone.xml
@@ -20,6 +20,6 @@ http://camel.apache.org/schema/spring/camel-spring.xsd">
-
+
diff --git a/akka-samples/akka-sample-camel/src/main/scala/Boot.scala b/akka-samples/akka-sample-camel/src/main/scala/Boot.scala
index 3b733fa988..98c7c34b7e 100644
--- a/akka-samples/akka-sample-camel/src/main/scala/Boot.scala
+++ b/akka-samples/akka-sample-camel/src/main/scala/Boot.scala
@@ -89,7 +89,7 @@ class Boot {
// Active object example
// -----------------------------------------------------------------------
- TypedActor.newInstance(classOf[ConsumerPojo1], classOf[ConsumerPojo1Impl])
+ TypedActor.newInstance(classOf[TypedConsumer1], classOf[TypedConsumer1Impl])
}
/**
diff --git a/akka-samples/akka-sample-camel/src/main/scala/ClientApplication.scala b/akka-samples/akka-sample-camel/src/main/scala/ClientApplication.scala
index 5be24f1c8f..95f9703f5b 100644
--- a/akka-samples/akka-sample-camel/src/main/scala/ClientApplication.scala
+++ b/akka-samples/akka-sample-camel/src/main/scala/ClientApplication.scala
@@ -18,8 +18,8 @@ object ClientApplication {
val actor1 = actorOf[RemoteActor1]
val actor2 = RemoteClient.actorFor("remote2", "localhost", 7777)
- val actobj1 = TypedActor.newRemoteInstance(classOf[RemoteConsumerPojo1], classOf[RemoteConsumerPojo1Impl], "localhost", 7777)
- //val actobj2 = TODO: create reference to server-managed typed actor (RemoteConsumerPojo2)
+ val actobj1 = TypedActor.newRemoteInstance(classOf[TypedRemoteConsumer1], classOf[TypedRemoteConsumer1Impl], "localhost", 7777)
+ //val actobj2 = TODO: create reference to server-managed typed actor (TypedRemoteConsumer2)
actor1.start
diff --git a/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala b/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala
index 6584651f68..17a0c343d3 100644
--- a/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala
+++ b/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala
@@ -18,7 +18,7 @@ object StandaloneApplication {
// 'externally' register typed actors
val registry = new SimpleRegistry
- registry.put("pojo1", TypedActor.newInstance(classOf[BeanIntf], classOf[BeanImpl]))
+ registry.put("sample", TypedActor.newInstance(classOf[BeanIntf], classOf[BeanImpl]))
// customize CamelContext
CamelContextManager.init(new DefaultCamelContext(registry))
@@ -28,17 +28,19 @@ object StandaloneApplication {
val camelService = CamelService.newInstance.load
// access 'externally' registered typed actors
- assert("hello msg1" == context.createProducerTemplate.requestBody("direct:test1", "msg1"))
- assert("hello msg2" == context.createProducerTemplate.requestBody("direct:test2", "msg2"))
+ assert("hello msg1" == context.createProducerTemplate.requestBody("direct:test", "msg1"))
+
+ // set expectations on upcoming endpoint activation
+ val activation = camelService.expectEndpointActivationCount(1)
// 'internally' register typed actor (requires CamelService)
- TypedActor.newInstance(classOf[ConsumerPojo2], classOf[ConsumerPojo2Impl])
+ TypedActor.newInstance(classOf[TypedConsumer2], classOf[TypedConsumer2Impl])
// internal registration is done in background. Wait a bit ...
- Thread.sleep(1000)
+ activation.await
// access 'internally' (automatically) registered active-objects
- // (see @consume annotation value at ConsumerPojo2.foo method)
+ // (see @consume annotation value at TypedConsumer2.foo method)
assert("default: msg3" == context.createProducerTemplate.requestBody("direct:default", "msg3"))
// shutdown CamelService
@@ -51,9 +53,8 @@ object StandaloneApplication {
class StandaloneApplicationRoute extends RouteBuilder {
def configure = {
- // routes to typed actors (in SimpleRegistry)
- from("direct:test1").to("active-object:pojo1?method=foo")
- from("direct:test2").to("active-object:pojo2?method=foo")
+ // route to typed actors (in SimpleRegistry)
+ from("direct:test").to("active-object:sample?method=foo")
}
}
diff --git a/akka-spring/src/main/scala/TypedActorFactoryBean.scala b/akka-spring/src/main/scala/TypedActorFactoryBean.scala
index af792ab1fe..11267586db 100644
--- a/akka-spring/src/main/scala/TypedActorFactoryBean.scala
+++ b/akka-spring/src/main/scala/TypedActorFactoryBean.scala
@@ -20,7 +20,7 @@ import org.springframework.context.{ApplicationContext,ApplicationContextAware}
import org.springframework.util.ReflectionUtils
import org.springframework.util.StringUtils
-import se.scalablesolutions.akka.actor.{TypedActorConfiguration, TypedActor}
+import se.scalablesolutions.akka.actor.{AspectInitRegistry, TypedActorConfiguration, TypedActor}
import se.scalablesolutions.akka.config.ScalaConfig.{ShutdownCallback, RestartCallbacks}
import se.scalablesolutions.akka.dispatch.MessageDispatcher
import se.scalablesolutions.akka.util.{Logging, Duration}
@@ -75,7 +75,7 @@ class TypedActorFactoryBean extends AbstractFactoryBean[AnyRef] with Logging wit
target.toClass
} catch {
// required by contract to return null
- case e: ClassNotFoundException => null
+ case e: IllegalArgumentException => null
}
/*
@@ -86,30 +86,15 @@ class TypedActorFactoryBean extends AbstractFactoryBean[AnyRef] with Logging wit
if (isRemote) argumentList += "r"
if (hasInterface) argumentList += "i"
if (hasDispatcher) argumentList += "d"
- postConstruct(setProperties(create(argumentList)))
+ val ref = create(argumentList)
+ setProperties(AspectInitRegistry.initFor(ref).targetInstance)
+ ref
}
/**
* Stop the typed actor if it is a singleton.
*/
- override def destroyInstance(instance: AnyRef) = TypedActor.stop(instance.asInstanceOf[TypedActor])
-
- /**
- * Invokes any method annotated with @PostConstruct
- * When interfaces are specified, this method is invoked both on the
- * target instance and on the typed actor, so a developer is free do decide
- * where the annotation should be. If no interface is specified it is only invoked
- * on the typed actor
- */
- private def postConstruct(ref: AnyRef): AnyRef = {
- // Invoke postConstruct method if any
- for {
- method <- ref.getClass.getMethods
- if method.isAnnotationPresent(classOf[PostConstruct])
- } method.invoke(ref)
- ref
- }
-
+ override def destroyInstance(instance: AnyRef) = TypedActor.stop(instance)
private def setProperties(ref: AnyRef): AnyRef = {
if (hasSetDependecies) return ref
@@ -139,12 +124,11 @@ class TypedActorFactoryBean extends AbstractFactoryBean[AnyRef] with Logging wit
if (target == null || target == "") throw new AkkaBeansException(
"The 'target' part of the 'akka:actor' element in the Spring config file can't be null or empty string")
argList match {
- case "ri" => TypedActor.newInstance(interface.toClass, newInstanceFor(target.toClass), createConfig.makeRemote(host, port))
- case "i" => TypedActor.newInstance(interface.toClass, newInstanceFor(target.toClass), createConfig)
- case "id" => TypedActor.newInstance(interface.toClass, newInstanceFor(target.toClass), createConfig.dispatcher(dispatcherInstance))
- case "rid" => TypedActor.newInstance(interface.toClass, newInstanceFor(target.toClass),
- createConfig.makeRemote(host, port).dispatcher(dispatcherInstance))
- case _ => TypedActor.newInstance(interface.toClass, newInstanceFor(target.toClass), createConfig)
+ case "ri" => TypedActor.newInstance(interface.toClass, target.toClass, createConfig.makeRemote(host, port))
+ case "i" => TypedActor.newInstance(interface.toClass, target.toClass, createConfig)
+ case "id" => TypedActor.newInstance(interface.toClass, target.toClass, createConfig.dispatcher(dispatcherInstance))
+ case "rid" => TypedActor.newInstance(interface.toClass, target.toClass, createConfig.makeRemote(host, port).dispatcher(dispatcherInstance))
+ case _ => TypedActor.newInstance(interface.toClass, target.toClass, createConfig)
// case "rd" => TypedActor.newInstance(target.toClass, createConfig.makeRemote(host, port).dispatcher(dispatcherInstance))
// case "r" => TypedActor.newInstance(target.toClass, createConfig.makeRemote(host, port))
// case "d" => TypedActor.newInstance(target.toClass, createConfig.dispatcher(dispatcherInstance))
@@ -159,13 +143,6 @@ class TypedActorFactoryBean extends AbstractFactoryBean[AnyRef] with Logging wit
config
}
- def newInstanceFor[T <: AnyRef](clazz: Class[T]): T = {
- var ref = clazz.newInstance().asInstanceOf[T]
- postConstruct(setProperties(ref))
- hasSetDependecies = true
- ref
- }
-
private[akka] def isRemote = (host != null) && (!host.isEmpty)
private[akka] def hasInterface = (interface != null) && (!interface.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
index 72fb8cb895..f588fc777a 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
@@ -10,10 +10,11 @@ import se.scalablesolutions.akka.actor.*;
public class Pojo extends TypedActor implements PojoInf, ApplicationContextAware {
- private String string;
+ private String stringFromVal;
+ private String stringFromRef;
private boolean gotApplicationContext = false;
- private boolean postConstructInvoked = false;
+ private boolean initInvoked = false;
public boolean gotApplicationContext() {
return gotApplicationContext;
@@ -23,20 +24,28 @@ public class Pojo extends TypedActor implements PojoInf, ApplicationContextAware
gotApplicationContext = true;
}
- public void setString(String s) {
- string = s;
+ public String getStringFromVal() {
+ return stringFromVal;
}
- public String getString() {
- return string;
+ public void setStringFromVal(String s) {
+ stringFromVal = s;
}
- @PostConstruct
- public void create() {
- postConstructInvoked = true;
+ public String getStringFromRef() {
+ return stringFromRef;
}
- public boolean isPostConstructInvoked() {
- return postConstructInvoked;
+ public void setStringFromRef(String s) {
+ stringFromRef = s;
+ }
+
+ @Override
+ public void init() {
+ initInvoked = true;
+ }
+
+ public boolean isInitInvoked() {
+ return initInvoked;
}
}
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 0189d5ec4a..9ebf80e89b 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
@@ -5,10 +5,9 @@ import javax.annotation.PostConstruct;
public interface PojoInf {
- public String getString();
+ public String getStringFromVal();
+ public String getStringFromRef();
public boolean gotApplicationContext();
- public boolean isPostConstructInvoked();
+ public boolean isInitInvoked();
- @PostConstruct
- public void create();
}
diff --git a/akka-spring/src/test/resources/appContext.xml b/akka-spring/src/test/resources/appContext.xml
index ba2c243558..9e83d2d927 100644
--- a/akka-spring/src/test/resources/appContext.xml
+++ b/akka-spring/src/test/resources/appContext.xml
@@ -21,23 +21,16 @@
timeout="1000"
scope="prototype"/>
-
-
-
-
-
-
+
+
-
+
+
+
diff --git a/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala b/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala
index ff246891c9..66f9a93646 100644
--- a/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala
+++ b/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala
@@ -17,7 +17,6 @@ class CamelServiceSpringFeatureTest extends FeatureSpec with BeforeAndAfterEach
ActorRegistry.shutdownAll
}
-/*
feature("start CamelService from Spring application context") {
import CamelContextManager._
scenario("with a custom CamelContext and access a registered typed actor") {
@@ -40,5 +39,4 @@ class CamelServiceSpringFeatureTest extends FeatureSpec with BeforeAndAfterEach
appctx.close
}
}
-*/
}
diff --git a/akka-spring/src/test/scala/TypedActorFactoryBeanTest.scala b/akka-spring/src/test/scala/TypedActorFactoryBeanTest.scala
index 1526517da7..50a284e624 100644
--- a/akka-spring/src/test/scala/TypedActorFactoryBeanTest.scala
+++ b/akka-spring/src/test/scala/TypedActorFactoryBeanTest.scala
@@ -3,19 +3,22 @@
*/
package se.scalablesolutions.akka.spring
-import org.scalatest.Spec
-import org.scalatest.matchers.ShouldMatchers
-import org.scalatest.junit.JUnitRunner
+import se.scalablesolutions.akka.actor.ActorRegistry;
+
import org.junit.runner.RunWith
-import org.springframework.core.io.ResourceEditor
-import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext
+import org.scalatest.junit.JUnitRunner
+import org.scalatest.{BeforeAndAfterAll, Spec}
+import org.scalatest.matchers.ShouldMatchers
/**
* Test for TypedActorFactoryBean
* @author michaelkober
*/
@RunWith(classOf[JUnitRunner])
-class TypedActorFactoryBeanTest extends Spec with ShouldMatchers {
+class TypedActorFactoryBeanTest extends Spec with ShouldMatchers with BeforeAndAfterAll {
+
+ override protected def afterAll = ActorRegistry.shutdownAll
describe("A TypedActorFactoryBean") {
val bean = new TypedActorFactoryBean
@@ -48,22 +51,37 @@ class TypedActorFactoryBeanTest extends Spec with ShouldMatchers {
assert(bean.getObjectType == classOf[String])
}
-/*
+ it("should create a proxy of type PojoInf") {
+ val bean = new TypedActorFactoryBean()
+ bean.setInterface("se.scalablesolutions.akka.spring.PojoInf")
+ bean.setTarget("se.scalablesolutions.akka.spring.Pojo")
+ bean.timeout = 1000
+ val entries = new PropertyEntries()
+ val entry = new PropertyEntry()
+ entry.name = "stringFromVal"
+ entry.value = "tests rock"
+ entries.add(entry)
+ bean.setProperty(entries)
+ assert(classOf[PojoInf].isAssignableFrom(bean.getObjectType))
+
+ // Check that we have injected the depencency correctly
+ val target = bean.createInstance.asInstanceOf[PojoInf]
+ assert(target.getStringFromVal === entry.value)
+ }
+
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 pojoInf = ctx.getBean("pojoInf").asInstanceOf[PojoInf];
- Thread.sleep(200)
- assert(pojoInf.isPostConstructInvoked)
- assert(pojoInf.getString == "akka rocks")
- assert(pojoInf.gotApplicationContext)
+ val ta = ctx.getBean("typedActor").asInstanceOf[PojoInf];
+ assert(ta.isInitInvoked)
+ assert(ta.getStringFromVal == "akka rocks")
+ assert(ta.getStringFromRef == "spring rocks")
+ assert(ta.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("bean-singleton").asInstanceOf[SampleBean]
+ val target = ctx.getBean("bean-singleton").asInstanceOf[SampleBeanIntf]
assert(!target.down)
ctx.close
assert(target.down)
@@ -71,32 +89,10 @@ class TypedActorFactoryBeanTest extends Spec with ShouldMatchers {
it("should not stop the created typed actor when scope is prototype and the context is closed") {
var ctx = new ClassPathXmlApplicationContext("appContext.xml");
- val target = ctx.getBean("bean-prototype").asInstanceOf[SampleBean]
+ val target = ctx.getBean("bean-prototype").asInstanceOf[SampleBeanIntf]
assert(!target.down)
ctx.close
assert(!target.down)
}
- */
}
}
-
-/*
- // ------ NOTE: Can't work now when we only support POJO with interface -----
-
- it("should create a proxy of type ResourceEditor") {
- val bean = new TypedActorFactoryBean()
- // we must have a java class here
- bean.setTarget("org.springframework.core.io.ResourceEditor")
- val entries = new PropertyEntries()
- val entry = new PropertyEntry()
- entry.name = "source"
- entry.value = "sourceBeanIsAString"
- entries.add(entry)
- bean.setProperty(entries)
- assert(bean.getObjectType == classOf[ResourceEditor])
-
- // Check that we have injected the depencency correctly
- val target:ResourceEditor = bean.createInstance.asInstanceOf[ResourceEditor]
- assert(target.getSource === entry.value)
- }
-*/