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"