From 21001a7e1022f4bce675d9e62ec7b7d14fc2de2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Sat, 2 Jan 2010 15:28:55 +0100 Subject: [PATCH] Cleaned up Spring interceptor and helpers --- .../src/main/scala/actor/ActiveObject.scala | 10 +- akka-spring/src/main/java/AkkaAppConfig.xml | 24 ---- .../interceptor/AkkaSpringInterceptor.java | 84 ----------- .../se/scalablesolutions/akka/main/Main.java | 19 --- .../akka/service/MyService.java | 23 ---- .../akka/spring/AkkaSpringInterceptor.java | 79 +++++++++++ .../spring/AkkaSpringJoinPointWrapper.java | 89 ++++++++++++ .../akka/spring/AkkaSpringRttiWrapper.java | 73 ++++++++++ .../akka/util/AkkaSpringJoinPointWrapper.java | 130 ------------------ .../akka/util/AkkaSpringRttiWrapper.java | 95 ------------- akka-spring/src/main/java/spring-config.xml | 6 - .../se/scalablesolutions/akka/AppTest.java | 49 ------- .../spring/AkkaSpringInterceptorTest.java | 26 ++++ .../akka/spring/MyService.java | 20 +++ .../src/test/resources/spring-test-config.xml | 15 +- 15 files changed, 301 insertions(+), 441 deletions(-) delete mode 100644 akka-spring/src/main/java/AkkaAppConfig.xml delete mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/interceptor/AkkaSpringInterceptor.java delete mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/main/Main.java delete mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/service/MyService.java create mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptor.java create mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringJoinPointWrapper.java create mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringRttiWrapper.java delete mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringJoinPointWrapper.java delete mode 100644 akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringRttiWrapper.java delete mode 100644 akka-spring/src/main/java/spring-config.xml delete mode 100644 akka-spring/src/test/java/se/scalablesolutions/akka/AppTest.java create mode 100644 akka-spring/src/test/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptorTest.java create mode 100644 akka-spring/src/test/java/se/scalablesolutions/akka/spring/MyService.java diff --git a/akka-core/src/main/scala/actor/ActiveObject.scala b/akka-core/src/main/scala/actor/ActiveObject.scala index 8933c8c91e..ae36bc4df2 100644 --- a/akka-core/src/main/scala/actor/ActiveObject.scala +++ b/akka-core/src/main/scala/actor/ActiveObject.scala @@ -353,15 +353,19 @@ private[akka] sealed class ActiveObjectAspect { } } +object Dispatcher { + val ZERO_ITEM_CLASS_ARRAY = Array[Class[_]]() + val ZERO_ITEM_OBJECT_ARRAY = Array[Object[_]]() +} + /** * Generic Actor managing Invocation dispatch, transaction and error management. * * @author Jonas Bonér */ private[akka] class Dispatcher(transactionalRequired: Boolean, val callbacks: Option[RestartCallbacks]) extends Actor { - private val ZERO_ITEM_CLASS_ARRAY = Array[Class[_]]() - private val ZERO_ITEM_OBJECT_ARRAY = Array[Object[_]]() - + import Dispatcher._ + private[actor] var target: Option[AnyRef] = None private var preRestart: Option[Method] = None private var postRestart: Option[Method] = None diff --git a/akka-spring/src/main/java/AkkaAppConfig.xml b/akka-spring/src/main/java/AkkaAppConfig.xml deleted file mode 100644 index 2f298ea172..0000000000 --- a/akka-spring/src/main/java/AkkaAppConfig.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - interceptor - - - - - \ No newline at end of file diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/interceptor/AkkaSpringInterceptor.java b/akka-spring/src/main/java/se/scalablesolutions/akka/interceptor/AkkaSpringInterceptor.java deleted file mode 100644 index 8da81a2df8..0000000000 --- a/akka-spring/src/main/java/se/scalablesolutions/akka/interceptor/AkkaSpringInterceptor.java +++ /dev/null @@ -1,84 +0,0 @@ -package se.scalablesolutions.akka.interceptor; - - -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import se.scalablesolutions.akka.actor.ActiveObjectAspect; -import se.scalablesolutions.akka.actor.AspectInit; -import se.scalablesolutions.akka.actor.AspectInitRegistry; -import se.scalablesolutions.akka.actor.Dispatcher; -import se.scalablesolutions.akka.util.AkkaSpringJoinPointWrapper; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.PlatformTransactionManager; - - -public class AkkaSpringInterceptor extends ActiveObjectAspect implements MethodInterceptor,BeanPostProcessor{ - - private final static String CLASSNAME = "org.springframework.transaction.support.TransactionSynchronizationManager"; - - - @Override - public Object invoke(MethodInvocation methodInvocation) throws Throwable { - - //Determine transactional status - boolean transactional = getTransactionStatus(); - - - Dispatcher dispatcher = new Dispatcher(transactional); - dispatcher.start(); - AspectInitRegistry.register(methodInvocation.getThis(), new AspectInit( - methodInvocation.getThis().getClass(), - dispatcher, - 1000)); - - AkkaSpringJoinPointWrapper asjp = AkkaSpringJoinPointWrapper.createSpringAkkaAspectWerkzWrapper(methodInvocation); - System.out.println("AkkaSpringInterceptor = " + Thread.currentThread()); - - Object obj = this.invoke(asjp); - - dispatcher.stop(); - - return obj; - - - - } - - @Override - public Object postProcessAfterInitialization(Object bean, String arg1) - throws BeansException { - - return bean; - } - - @Override - public Object postProcessBeforeInitialization(Object bean, String arg1) - throws BeansException { - - return bean; - } - - /* - * Checks if intercepted Spring bean is in a transaction - * - */ - - private boolean getTransactionStatus() { - String status = null; - Boolean hasTransaction = null; - try { - ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); - if (contextClassLoader != null) { - Class tsmClass = contextClassLoader.loadClass(CLASSNAME); - hasTransaction = (Boolean) tsmClass.getMethod("isActualTransactionActive", null).invoke(null, null); - } else { - return false; - } - } catch (Exception e) { - e.printStackTrace(); - } - return hasTransaction; - } -} diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/main/Main.java b/akka-spring/src/main/java/se/scalablesolutions/akka/main/Main.java deleted file mode 100644 index 36533d6ff7..0000000000 --- a/akka-spring/src/main/java/se/scalablesolutions/akka/main/Main.java +++ /dev/null @@ -1,19 +0,0 @@ -package se.scalablesolutions.akka.main; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import se.scalablesolutions.akka.service.MyService; - -public class Main { - public static void main(String[] args) { - - ApplicationContext context = new ClassPathXmlApplicationContext("AkkaAppConfig.xml"); - - MyService myService = (MyService)context.getBean("interceptedService"); - - System.out.println(Thread.currentThread()); - - myService.getNumbers(777,"vfsh"); - - } -} diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/service/MyService.java b/akka-spring/src/main/java/se/scalablesolutions/akka/service/MyService.java deleted file mode 100644 index 5834ec4de3..0000000000 --- a/akka-spring/src/main/java/se/scalablesolutions/akka/service/MyService.java +++ /dev/null @@ -1,23 +0,0 @@ -package se.scalablesolutions.akka.service; - -import org.springframework.transaction.annotation.Transactional; - - -//import se.scalablesolutions.akka.annotation.oneway; - -public class MyService { - - public Integer getNumbers(int aTestNumber, String aText) { - System.out.println("MyService : " + Thread.currentThread()); - return new Integer(aTestNumber); - } - - //@oneway - public void calculate() { - for (int i = 1; i < 10000; i++) { - System.out.println("i=" + i); - } - } - -} - diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptor.java b/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptor.java new file mode 100644 index 0000000000..1d4bc1245d --- /dev/null +++ b/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptor.java @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.spring; + +import se.scalablesolutions.akka.actor.ActiveObjectAspect; +import se.scalablesolutions.akka.actor.AspectInit; +import se.scalablesolutions.akka.actor.AspectInitRegistry; +import se.scalablesolutions.akka.actor.Dispatcher; + +import org.springframework.beans.factory.config.BeanPostProcessor; + +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; + +import java.lang.reflect.Method; + +public class AkkaSpringInterceptor extends ActiveObjectAspect implements MethodInterceptor, BeanPostProcessor { + + static final String TRANSACTION_MANAGER_CLASS_NAME = "org.springframework.transaction.support.TransactionSynchronizationManager"; + static final String IS_TRANSACTION_ALIVE_METHOD_NAME = "isActualTransactionActive"; + + static private Method IS_TRANSACTION_ALIVE_METHOD = null; + + static { + try { + ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); + Class clazz = null; + if (contextClassLoader != null) { + clazz = contextClassLoader.loadClass(TRANSACTION_MANAGER_CLASS_NAME); + } else { + ClassLoader springClassLoader = AkkaSpringInterceptor.class.getClassLoader(); + clazz = springClassLoader.loadClass(TRANSACTION_MANAGER_CLASS_NAME); + } + if (clazz != null) IS_TRANSACTION_ALIVE_METHOD = clazz.getDeclaredMethod(IS_TRANSACTION_ALIVE_METHOD_NAME, null); + } catch (Exception e) { + } + } + + // FIXME make configurable + static final int TIME_OUT = 1000; + + @Override + public Object invoke(MethodInvocation methodInvocation) throws Throwable { + Dispatcher dispatcher = new Dispatcher(isTransactional()); + dispatcher.start(); + AspectInitRegistry.register(methodInvocation.getThis(), new AspectInit( + methodInvocation.getThis().getClass(), + dispatcher, + TIME_OUT)); + Object result = this.invoke(AkkaSpringJoinPointWrapper.createSpringAkkaAspectWerkzWrapper(methodInvocation)); + dispatcher.stop(); + return result; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String arg) throws BeansException { + return bean; + } + + @Override + public Object postProcessBeforeInitialization(Object bean, String arg) throws BeansException { + return bean; + } + + /** + * Checks if intercepted Spring bean is in a transaction. + */ + private boolean isTransactional() { + try { + return (Boolean) IS_TRANSACTION_ALIVE_METHOD.invoke(null, null); + } catch (Exception e) { + throw new RuntimeException("Could not check if the Spring bean is executing within a transaction", e); + } + } +} \ No newline at end of file diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringJoinPointWrapper.java b/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringJoinPointWrapper.java new file mode 100644 index 0000000000..569bb4511d --- /dev/null +++ b/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringJoinPointWrapper.java @@ -0,0 +1,89 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.spring; + +import org.aopalliance.intercept.MethodInvocation; + +import org.codehaus.aspectwerkz.joinpoint.*; +import org.codehaus.aspectwerkz.joinpoint.management.JoinPointType; + +public class AkkaSpringJoinPointWrapper implements JoinPoint { + + private MethodInvocation methodInvocation = null; + + public static AkkaSpringJoinPointWrapper createSpringAkkaAspectWerkzWrapper(MethodInvocation methodInvocation) { + AkkaSpringJoinPointWrapper joinPointWrapper = new AkkaSpringJoinPointWrapper(); + joinPointWrapper.setMethodInvocation(methodInvocation); + return joinPointWrapper; + } + + public MethodInvocation getMethodInvocation() { + return methodInvocation; + } + + public void setMethodInvocation(MethodInvocation methodInvocation) { + this.methodInvocation = methodInvocation; + } + + public Object proceed() throws Throwable { + return methodInvocation.proceed(); + } + + public Rtti getRtti() { + return new AkkaSpringRttiWrapper(methodInvocation); + } + + public Object getTarget() { + return methodInvocation.getThis(); + } + + public Object getThis() { + return methodInvocation.getThis(); + } + + public Object getCallee() { + throw new UnsupportedOperationException(); + } + + public Object getCaller() { + throw new UnsupportedOperationException(); + } + + public void addMetaData(Object arg0, Object arg1) { + throw new UnsupportedOperationException(); + } + + public Class getCalleeClass() { + throw new UnsupportedOperationException(); + } + + public Class getCallerClass() { + throw new UnsupportedOperationException(); + } + + public EnclosingStaticJoinPoint getEnclosingStaticJoinPoint() { + throw new UnsupportedOperationException(); + } + + public Object getMetaData(Object arg0) { + throw new UnsupportedOperationException(); + } + + public Signature getSignature() { + throw new UnsupportedOperationException(); + } + + public Class getTargetClass() { + throw new UnsupportedOperationException(); + } + + public JoinPointType getType() { + throw new UnsupportedOperationException(); + } + + public StaticJoinPoint copy() { + throw new UnsupportedOperationException(); + } +} diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringRttiWrapper.java b/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringRttiWrapper.java new file mode 100644 index 0000000000..35f07065b6 --- /dev/null +++ b/akka-spring/src/main/java/se/scalablesolutions/akka/spring/AkkaSpringRttiWrapper.java @@ -0,0 +1,73 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.spring; + +import org.aopalliance.intercept.MethodInvocation; + +import org.codehaus.aspectwerkz.joinpoint.MethodRtti; +import org.codehaus.aspectwerkz.joinpoint.Rtti; + +import java.lang.reflect.Method; + +public class AkkaSpringRttiWrapper implements MethodRtti { + + private MethodInvocation methodInvocation = null; + + public AkkaSpringRttiWrapper(MethodInvocation methodInvocation) { + this.methodInvocation = methodInvocation; + } + + public Method getMethod() { + return methodInvocation.getMethod(); + } + + public Class getReturnType() { + throw new UnsupportedOperationException(); + } + + public Object getReturnValue() { + throw new UnsupportedOperationException(); + } + + public Class[] getExceptionTypes() { + throw new UnsupportedOperationException(); + } + + public Class[] getParameterTypes() { + throw new UnsupportedOperationException(); + } + + public Object[] getParameterValues() { + throw new UnsupportedOperationException(); + } + + public void setParameterValues(Object[] arg0) { + throw new UnsupportedOperationException(); + } + + public Rtti cloneFor(Object arg0, Object arg1) { + throw new UnsupportedOperationException(); + } + + public Class getDeclaringType() { + throw new UnsupportedOperationException(); + } + + public int getModifiers() { + throw new UnsupportedOperationException(); + } + + public String getName() { + throw new UnsupportedOperationException(); + } + + public Object getTarget() { + throw new UnsupportedOperationException(); + } + + public Object getThis() { + throw new UnsupportedOperationException(); + } +} diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringJoinPointWrapper.java b/akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringJoinPointWrapper.java deleted file mode 100644 index d80126a76b..0000000000 --- a/akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringJoinPointWrapper.java +++ /dev/null @@ -1,130 +0,0 @@ -package se.scalablesolutions.akka.util; - - -import org.aopalliance.intercept.MethodInvocation; -import org.codehaus.aspectwerkz.joinpoint.*; -import org.codehaus.aspectwerkz.joinpoint.management.JoinPointType; - - -public class AkkaSpringJoinPointWrapper implements JoinPoint{ - - private MethodInvocation methodInvocation = null; - - public MethodInvocation getMethodInvocation() { - return methodInvocation; - } - - public void setMethodInvocation(MethodInvocation methodInvocation) { - this.methodInvocation = methodInvocation; - } - - public static AkkaSpringJoinPointWrapper createSpringAkkaAspectWerkzWrapper(MethodInvocation methodInvocation){ - AkkaSpringJoinPointWrapper asjp = new AkkaSpringJoinPointWrapper(); - asjp.setMethodInvocation(methodInvocation); - return asjp; - } - - @Override - public Object getCallee() { - System.out.println("public Object getCallee()"); - // TODO Auto-generated method stub - return null; - } - - @Override - public Object getCaller() { - System.out.println("public Object getCaller() "); - // TODO Auto-generated method stub - return null; - } - - @Override - public Rtti getRtti() { - System.out.println("public Rtti getRtti()"); - AkkaSpringRttiWrapper asrw = new AkkaSpringRttiWrapper(methodInvocation); - return asrw; - } - - @Override - public Object getTarget() { - System.out.println("public Object getTarget() "); - return methodInvocation.getThis(); - } - - @Override - public Object getThis() { - System.out.println("public Object getThis()"); - return methodInvocation.getThis(); - } - - @Override - public void addMetaData(Object arg0, Object arg1) { - System.out.println("public void addMetaData(Object arg0, Object arg1)"); - // TODO Auto-generated method stub - - } - - @Override - public Class getCalleeClass() { - System.out.println("public Class getCalleeClass()"); - // TODO Auto-generated method stub - return null; - } - - @Override - public Class getCallerClass() { - System.out.println("public Class getCallerClass() "); - // TODO Auto-generated method stub - return null; - } - - @Override - public EnclosingStaticJoinPoint getEnclosingStaticJoinPoint() { - System.out.println("public EnclosingStaticJoinPoint getEnclosingStaticJoinPoint()"); - // TODO Auto-generated method stub - return null; - } - - @Override - public Object getMetaData(Object arg0) { - System.out.println("public Object getMetaData(Object arg0) "); - // TODO Auto-generated method stub - return null; - } - - @Override - public Signature getSignature() { - System.out.println("public Signature getSignature() "); - // TODO Auto-generated method stub - return null; - } - - @Override - public Class getTargetClass() { - System.out.println("public Class getTargetClass() "); - // TODO Auto-generated method stub - return null; - } - - @Override - public JoinPointType getType() { - System.out.println("public JoinPointType getType()"); - // TODO Auto-generated method stub - return null; - } - - @Override - public Object proceed() throws Throwable { - System.out.println("public Object proceed()"); - - return methodInvocation.proceed(); - } - - - public StaticJoinPoint copy() { - // TODO Auto-generated method stub - return null; - } - - -} diff --git a/akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringRttiWrapper.java b/akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringRttiWrapper.java deleted file mode 100644 index 62c12ac4de..0000000000 --- a/akka-spring/src/main/java/se/scalablesolutions/akka/util/AkkaSpringRttiWrapper.java +++ /dev/null @@ -1,95 +0,0 @@ -package se.scalablesolutions.akka.util; - - -import org.aopalliance.intercept.MethodInvocation; -import org.codehaus.aspectwerkz.joinpoint.MethodRtti; -import org.codehaus.aspectwerkz.joinpoint.Rtti; - -import java.lang.reflect.Method; - -public class AkkaSpringRttiWrapper implements MethodRtti { - - private MethodInvocation methodInvocation = null; - - public AkkaSpringRttiWrapper(MethodInvocation methodInvocation){ - this.methodInvocation = methodInvocation; - - } - - @Override - public Method getMethod() { - return methodInvocation.getMethod(); - } - - @Override - public Class getReturnType() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Object getReturnValue() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Class[] getExceptionTypes() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Class[] getParameterTypes() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Object[] getParameterValues() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void setParameterValues(Object[] arg0) { - // TODO Auto-generated method stub - - } - - @Override - public Rtti cloneFor(Object arg0, Object arg1) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Class getDeclaringType() { - // TODO Auto-generated method stub - return null; - } - - @Override - public int getModifiers() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public String getName() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Object getTarget() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Object getThis() { - // TODO Auto-generated method stub - return null; - } -} diff --git a/akka-spring/src/main/java/spring-config.xml b/akka-spring/src/main/java/spring-config.xml deleted file mode 100644 index 142def25af..0000000000 --- a/akka-spring/src/main/java/spring-config.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/AppTest.java b/akka-spring/src/test/java/se/scalablesolutions/akka/AppTest.java deleted file mode 100644 index fd7dabe952..0000000000 --- a/akka-spring/src/test/java/se/scalablesolutions/akka/AppTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package se.scalablesolutions.akka; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import se.scalablesolutions.akka.service.MyService; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - - public void testApp() - { - - ApplicationContext context = new ClassPathXmlApplicationContext("spring-test-config.xml"); - - MyService myService = (MyService)context.getBean("interceptedService"); - - System.out.println(Thread.currentThread()); - - Object obj = myService.getNumbers(12,"vfsh"); - - assertEquals(new Integer(12), obj); - - } -} diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptorTest.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptorTest.java new file mode 100644 index 0000000000..d73dcbd340 --- /dev/null +++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/AkkaSpringInterceptorTest.java @@ -0,0 +1,26 @@ +package se.scalablesolutions.akka.spring; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class AkkaSpringInterceptorTest extends TestCase { + + public AkkaSpringInterceptorTest(String testName) { + super(testName); + } + + public static Test suite() { + return new TestSuite(AkkaSpringInterceptorTest.class); + } + + public void testInvokingAkkaEnabledSpringBean() { + ApplicationContext context = new ClassPathXmlApplicationContext("spring-test-config.xml"); + MyService myService = (MyService) context.getBean("actorBeanService"); + Object obj = myService.getNumbers(12, "vfsh"); + assertEquals(new Integer(12), obj); + } +} diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/MyService.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/MyService.java new file mode 100644 index 0000000000..716b5ad210 --- /dev/null +++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/MyService.java @@ -0,0 +1,20 @@ +package se.scalablesolutions.akka.spring; + +import org.springframework.transaction.annotation.Transactional; + +//import se.scalablesolutions.akka.annotation.oneway; + +public class MyService { + + public Integer getNumbers(int aTestNumber, String aText) { + return new Integer(aTestNumber); + } + + //@oneway + public void calculate() { + for (int i = 1; i < 10000; i++) { + System.out.println("i=" + i); + } + } +} + diff --git a/akka-spring/src/test/resources/spring-test-config.xml b/akka-spring/src/test/resources/spring-test-config.xml index 2f298ea172..dadbcf56d1 100644 --- a/akka-spring/src/test/resources/spring-test-config.xml +++ b/akka-spring/src/test/resources/spring-test-config.xml @@ -1,22 +1,21 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> - - + - + - + - + - interceptor + akkaInterceptor