diff --git a/akka-spring/akka-spring-test-java/pom.xml b/akka-spring/akka-spring-test-java/pom.xml
new file mode 100755
index 0000000000..3a9474ab06
--- /dev/null
+++ b/akka-spring/akka-spring-test-java/pom.xml
@@ -0,0 +1,333 @@
+
+ 4.0.0
+
+ Akka Spring Tests in Java
+ akka-spring-test-java
+ se.scalablesolutions.akka
+ 0.7-SNAPSHOT
+ jar
+
+
+ 2.7.7
+ 0.5.2
+ 1.1.5
+ 1.9.18-i
+
+
+
+
+ project.embedded.module
+ Project Embedded Repository
+ file://${env.AKKA_HOME}/embedded-repo
+
+
+ repo1.maven
+ Maven Main Repository
+ http://repo1.maven.org/maven2
+
+
+ scala-tools-snapshots
+ Scala-Tools Maven2 Snapshot Repository
+ http://scala-tools.org/repo-snapshots
+
+
+ scala-tools
+ Scala-Tools Maven2 Repository
+ http://scala-tools.org/repo-releases
+
+
+ lag
+ Configgy's' Repository
+ http://www.lag.net/repo
+
+
+ multiverse-releases
+ http://multiverse.googlecode.com/svn/maven-repository/releases
+
+ false
+
+
+
+ multiverse-snaphosts
+ http://multiverse.googlecode.com/svn/maven-repository/snapshots
+
+
+ maven2-repository.dev.java.net
+ Java.net Repository for Maven
+ http://download.java.net/maven/2
+
+
+ java.net
+ Java.net Legacy Repository for Maven
+ http://download.java.net/maven/1
+ legacy
+
+
+ guiceyfruit.release
+ GuiceyFruit Release Repository
+ http://guiceyfruit.googlecode.com/svn/repo/releases/
+
+ false
+
+
+ true
+
+
+
+ guiceyfruit.snapshot
+ GuiceyFruit Snapshot Repository
+ http://guiceyfruit.googlecode.com/svn/repo/snapshots/
+
+ true
+
+
+ false
+
+
+
+ guice-maven
+ guice maven
+ http://guice-maven.googlecode.com/svn/trunk
+
+
+ google-maven-repository
+ Google Maven Repository
+ http://google-maven-repository.googlecode.com/svn/repository/
+
+
+ repository.codehaus.org
+ Codehaus Maven Repository
+ http://repository.codehaus.org
+
+ true
+
+
+
+ repository.jboss.org
+ JBoss Repository for Maven
+ http://repository.jboss.org/maven2
+
+ false
+
+
+
+ nexus.griddynamics.net
+ Grid Dynamics Maven Repository
+ https://nexus.griddynamics.net/nexus/content/groups/public
+
+ false
+
+
+
+ databinder.net/repo/
+ dbDispatch Repository for Maven
+ http://databinder.net/repo
+
+ false
+
+
+
+
+
+
+
+ akka-core
+ se.scalablesolutions.akka
+ 0.7-SNAPSHOT
+
+
+ akka-util
+ se.scalablesolutions.akka
+ 0.7-SNAPSHOT
+
+
+ akka-util-java
+ se.scalablesolutions.akka
+ 0.7-SNAPSHOT
+
+
+ akka-spring
+ se.scalablesolutions.akka
+ 0.7-SNAPSHOT
+
+
+ spring
+ org.springframework
+
+
+
+
+
+
+
+ org.springframework
+ spring-beans
+ 3.0.1.RELEASE
+
+
+ org.springframework
+ spring-context
+ 3.0.1.RELEASE
+
+
+
+ net.lag
+ configgy
+ 1.4.7
+
+
+ org.codehaus.aspectwerkz
+ aspectwerkz-nodeps-jdk5
+ 2.1
+
+
+ org.codehaus.aspectwerkz
+ aspectwerkz-jdk5
+ 2.1
+
+
+
+ org.guiceyfruit
+ guice-core
+ 2.0-beta-4
+
+
+ com.google.protobuf
+ protobuf-java
+ 2.2.0
+
+
+ com.google.protobuf
+ protobuf-java
+ 2.2.0
+
+
+ org.multiverse
+ multiverse-alpha
+ 0.4-SNAPSHOT
+
+
+ commons-io
+ commons-io
+ 1.4
+
+
+ org.jboss.netty
+ netty
+ 3.2.0.BETA1
+
+
+ net.databinder
+ dispatch-json_2.7.7
+ 0.6.4
+
+
+ net.databinder
+ dispatch-http_2.7.7
+ 0.6.4
+
+
+ sjson.json
+ sjson
+ 0.4
+
+
+
+ sbinary
+ sbinary
+ 0.3
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+ 1.2.1
+
+
+ org.codehaus.jackson
+ jackson-core-asl
+ 1.2.1
+
+
+ voldemort.store.compress
+ h2-lzf
+ 1.0
+
+
+ org.scala-tools
+ javautils
+ 2.7.4-0.1
+
+
+ org.scala-lang
+ scala-library
+ 2.7.7
+
+
+
+ org.scala-lang
+ scala-library
+ 2.7.7
+
+
+
+
+ junit
+ junit
+ 4.5
+ test
+
+
+
+
+ src/main/java
+ src/test/java
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.5
+ 1.5
+
+ **/*
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*Persistent*
+
+
+
+
+
+
+ false
+ src/test/resources
+
+
+ false
+ src/main/resources
+
+
+ false
+ src/test/java
+
+ **
+
+
+ **/*.java
+
+
+
+
+
+
+
+
diff --git a/akka-spring/akka-spring-test-java/src/main/resources/se/scalablesolutions/akka/spring/foo/test-config.xml b/akka-spring/akka-spring-test-java/src/main/resources/se/scalablesolutions/akka/spring/foo/test-config.xml
new file mode 100644
index 0000000000..aa45e3aa4e
--- /dev/null
+++ b/akka-spring/akka-spring-test-java/src/main/resources/se/scalablesolutions/akka/spring/foo/test-config.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ java.io.IOException
+ java.lang.NullPointerException
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ java.lang.Exception
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/akka-spring/akka-spring-test-java/src/test/java/se/scalablesolutions/akka/spring/SpringConfigurationTest.java b/akka-spring/akka-spring-test-java/src/test/java/se/scalablesolutions/akka/spring/SpringConfigurationTest.java
new file mode 100644
index 0000000000..5737b8da30
--- /dev/null
+++ b/akka-spring/akka-spring-test-java/src/test/java/se/scalablesolutions/akka/spring/SpringConfigurationTest.java
@@ -0,0 +1,120 @@
+package se.scalablesolutions.akka.spring;
+
+import static org.junit.Assert.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+
+import se.scalablesolutions.akka.config.ActiveObjectConfigurator;
+import se.scalablesolutions.akka.dispatch.FutureTimeoutException;
+import se.scalablesolutions.akka.config.Config;
+import se.scalablesolutions.akka.remote.RemoteNode;
+import se.scalablesolutions.akka.spring.foo.Foo;
+import se.scalablesolutions.akka.spring.foo.IBar;
+import se.scalablesolutions.akka.spring.foo.MyPojo;
+import se.scalablesolutions.akka.spring.foo.StatefulPojo;
+
+/**
+ * Tests for spring configuration of active objects and supervisor configuration.
+ */
+public class SpringConfigurationTest {
+
+ private ApplicationContext context = null;
+
+ @Before
+ public void setUp() {
+ context = new ClassPathXmlApplicationContext("se/scalablesolutions/akka/spring/foo/test-config.xml");
+ }
+
+ /**
+ * Tests that the <akka:active-object/> and <akka:supervision/> element
+ * can be used as a top level element.
+ */
+ @Test
+ public void testParse() throws Exception {
+ final Resource CONTEXT = new ClassPathResource("se/scalablesolutions/akka/spring/foo/test-config.xml");
+ DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
+ XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
+ reader.loadBeanDefinitions(CONTEXT);
+ assertTrue(beanFactory.containsBeanDefinition("simple-active-object"));
+ assertTrue(beanFactory.containsBeanDefinition("remote-active-object"));
+ assertTrue(beanFactory.containsBeanDefinition("supervision1"));
+ }
+
+ @Test
+ public void testSimpleActiveObject() {
+ MyPojo myPojo = (MyPojo) context.getBean("simple-active-object");
+ String msg = myPojo.getFoo();
+ msg += myPojo.getBar();
+ assertEquals("wrong invocation order", "foobar", msg);
+ }
+
+ @Test(expected=FutureTimeoutException.class)
+ public void testSimpleActiveObject_Timeout() {
+ MyPojo myPojo = (MyPojo) context.getBean("simple-active-object");
+ myPojo.longRunning();
+ }
+
+ @Test
+ public void testSimpleActiveObject_NoTimeout() {
+ MyPojo myPojo = (MyPojo) context.getBean("simple-active-object-long-timeout");
+ String msg = myPojo.longRunning();
+ assertEquals("this took long", msg);
+ }
+
+ @Test
+ public void testTransactionalActiveObject() {
+ MyPojo myPojo = (MyPojo) context.getBean("transactional-active-object");
+ String msg = myPojo.getFoo();
+ msg += myPojo.getBar();
+ assertEquals("wrong invocation order", "foobar", msg);
+ }
+
+ @Test
+ public void testRemoteActiveObject() {
+ new Thread(new Runnable() {
+ public void run() {
+ RemoteNode.start();
+ }
+ }).start();
+ try { Thread.currentThread().sleep(1000); } catch (Exception e) {}
+ Config.config();
+
+ MyPojo myPojo = (MyPojo) context.getBean("remote-active-object");
+ assertEquals("foo", myPojo.getFoo());
+ }
+
+ @Test
+ public void testSupervision() {
+ // get ActiveObjectConfigurator bean from spring context
+ ActiveObjectConfigurator myConfigurator = (ActiveObjectConfigurator) context.getBean("supervision1");
+ // get ActiveObjects
+ Foo foo = myConfigurator.getInstance(Foo.class);
+ assertNotNull(foo);
+ IBar bar = myConfigurator.getInstance(IBar.class);
+ assertNotNull(bar);
+ MyPojo pojo = myConfigurator.getInstance(MyPojo.class);
+ assertNotNull(pojo);
+ }
+
+ @Test
+ public void testTransactionalState() {
+ ActiveObjectConfigurator conf = (ActiveObjectConfigurator) context.getBean("supervision2");
+ StatefulPojo stateful = conf.getInstance(StatefulPojo.class);
+ stateful.init();
+ stateful.setMapState("testTransactionalState", "some map state");
+ stateful.setVectorState("some vector state");
+ stateful.setRefState("some ref state");
+ assertEquals("some map state", stateful.getMapState("testTransactionalState"));
+ assertEquals("some vector state", stateful.getVectorState());
+ assertEquals("some ref state", stateful.getRefState());
+ }
+
+}
diff --git a/akka-spring/lib/commons-logging.jar b/akka-spring/lib/commons-logging.jar
deleted file mode 100644
index 1deef144cb..0000000000
Binary files a/akka-spring/lib/commons-logging.jar and /dev/null differ
diff --git a/akka-spring/lib/spring.jar b/akka-spring/lib/spring.jar
deleted file mode 100644
index 34a79fb349..0000000000
Binary files a/akka-spring/lib/spring.jar and /dev/null differ
diff --git a/akka-spring/pom.xml b/akka-spring/pom.xml
deleted file mode 100644
index 126be1c991..0000000000
--- a/akka-spring/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
- 4.0.0
-
- akka-spring
- Akka Spring Integration
- jar
-
-
- akka
- se.scalablesolutions.akka
- 0.7-SNAPSHOT
-
-
-
-
-
-
-
- akka-core
- ${project.groupId}
- ${project.version}
-
-
- akka-util-java
- ${project.groupId}
- ${project.version}
-
-
- akka-util
- ${project.groupId}
- ${project.version}
-
-
-
- org.springframework
- spring
- 2.5.6
-
-
-
- org.scala-lang
- scala-library
- ${scala.version}
-
-
- org.scala-lang
- scala-compiler
- ${scala.version}
-
-
-
- org.scalatest
- scalatest
- 1.0
- test
-
-
- junit
- junit
- 4.5
- test
-
-
-
-
diff --git a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
index 3d4a4508de..fb83c6fe09 100644
--- a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
+++ b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
@@ -16,7 +16,7 @@ import se.scalablesolutions.akka.config.ScalaConfig.RestartCallbacks
* Factory bean for active objects.
* @author michaelkober
*/
-class ActiveObjectFactoryBean extends AbstractFactoryBean {
+class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] {
import StringReflect._
@BeanProperty var target: String = ""
@@ -33,7 +33,7 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean {
/*
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
*/
- def getObjectType = target.toClass
+ def getObjectType: Class[AnyRef] = target.toClass
/*
diff --git a/akka-spring/src/main/scala/SupervisionFactoryBean.scala b/akka-spring/src/main/scala/SupervisionFactoryBean.scala
index f02ed6c283..7044445ba8 100644
--- a/akka-spring/src/main/scala/SupervisionFactoryBean.scala
+++ b/akka-spring/src/main/scala/SupervisionFactoryBean.scala
@@ -14,19 +14,19 @@ import reflect.BeanProperty
* Factory bean for supervisor configuration.
* @author michaelkober
*/
-class SupervisionFactoryBean extends AbstractFactoryBean {
+class SupervisionFactoryBean extends AbstractFactoryBean[ActiveObjectConfigurator] {
@BeanProperty var restartStrategy: RestartStrategy = _
@BeanProperty var supervised: List[ActiveObjectProperties] = _
/*
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
*/
- def getObjectType = classOf[ActiveObjectConfigurator]
+ def getObjectType: Class[ActiveObjectConfigurator] = classOf[ActiveObjectConfigurator]
/*
* @see org.springframework.beans.factory.config.AbstractFactoryBean#createInstance()
*/
- def createInstance: AnyRef = {
+ def createInstance: ActiveObjectConfigurator = {
val configurator = new ActiveObjectConfigurator()
configurator.configure(
diff --git a/akka-spring/src/test/resources/test-config.xml b/akka-spring/src/test/resources/test-config.xml
deleted file mode 100644
index d3a8077945..0000000000
--- a/akka-spring/src/test/resources/test-config.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- java.io.IOException
- java.lang.NullPointerException
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala
index 891126f22e..f7fe8471a5 100644
--- a/project/build/AkkaProject.scala
+++ b/project/build/AkkaProject.scala
@@ -85,6 +85,7 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) {
lazy val akka_cluster = project("akka-cluster", "akka-cluster", new AkkaClusterParentProject(_))
lazy val akka_kernel = project("akka-kernel", "akka-kernel", new AkkaKernelProject(_),
akka_core, akka_rest, akka_persistence, akka_cluster, akka_amqp, akka_security, akka_comet, akka_patterns)
+ lazy val akka_spring = project("akka-spring", "akka-spring", new AkkaSpringProject(_), akka_core, akka_util, akka_java_util)
// functional tests in java
lazy val akka_fun_test = project("akka-fun-test-java", "akka-fun-test-java", new AkkaFunTestProject(_), akka_kernel)
@@ -119,7 +120,8 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) {
" dist/akka-persistence-redis_%s-%s.jar".format(defScalaVersion.value, version) +
" dist/akka-persistence-mongo_%s-%s.jar".format(defScalaVersion.value, version) +
" dist/akka-persistence-cassandra_%s-%s.jar".format(defScalaVersion.value, version) +
- " dist/akka-kernel_%s-%s.jar".format(defScalaVersion.value, version)
+ " dist/akka-kernel_%s-%s.jar".format(defScalaVersion.value, version) +
+ " dist/akka-spring_%s-%s.jar".format(defScalaVersion.value, version)
)
// ------------------------------------------------------------
@@ -284,6 +286,15 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) {
lazy val dist = deployTask(info, distPath) dependsOn(`package`) describedAs("Deploying")
}
+ class AkkaSpringProject(info: ProjectInfo) extends DefaultProject(info) {
+ val spring_beans = "org.springframework" % "spring-beans" % "3.0.1.RELEASE"
+ val spring_context = "org.springframework" % "spring-context" % "3.0.1.RELEASE"
+ // testing
+ val scalatest = "org.scalatest" % "scalatest" % "1.0" % "test"
+ val junit = "junit" % "junit" % "4.5" % "test"
+ lazy val dist = deployTask(info, distPath) dependsOn(`package`) describedAs("Deploying")
+ }
+
// examples
class AkkaFunTestProject(info: ProjectInfo) extends DefaultProject(info) {
val protobuf = "com.google.protobuf" % "protobuf-java" % "2.2.0"