Support for Spring supervision of bean-based actors

61 views
Skip to first unread message

Incubos

unread,
Jun 29, 2011, 7:48:08 AM6/29/11
to akka...@googlegroups.com
Hi!

Sorry for message size.

There is an example of Supervisor Hierarchies configuration in Spring: http://akka.io/docs/akka-modules/1.1.2/modules/spring.html#supervisor-hierarchies.

It is unclear whether "implementation" attribute of the akka:untyped-actor is required. I have the following example configuration based on Spring beans:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:akka="http://akka.io/schema/akka"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://akka.io/schema/akka
http://akka.io/akka-1.0.xsd">
<bean id="myActorBean"
class="MyActor"
scope="prototype">
<constructor-arg value="Test"/>
</bean>

<akka:supervision id="supervisor">
<akka:restart-strategy failover="AllForOne"
retries="3"
timerange="4000">
<akka:trap-exits>
<akka:trap-exit>java.io.IOException</akka:trap-exit>
<akka:trap-exit>java.lang.NullPointerException</akka:trap-exit>
</akka:trap-exits>
</akka:restart-strategy>
<akka:untyped-actors>
<akka:untyped-actor id="myActor"
ref="myActorBean"
autostart="true"
lifecycle="temporary"/>
</akka:untyped-actors>
</akka:supervision>
</beans>

When I start the application I get the following error:

Jun 29, 2011 3:33:51 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@207f5580: startup date [Wed Jun 29 15:33:51 MSD 2011]; root of context hierarchy
Jun 29, 2011 3:33:51 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [test.xml]
Jun 29, 2011 3:33:53 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2d20dbf3: defining beans [myActorBean,supervisor]; root of factory hierarchy
Jun 29, 2011 3:33:53 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2d20dbf3: defining beans [myActorBean,supervisor]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'supervisor': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Class name can't be null or empty string [null]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.yandex.etl.EntryPoint$delayedInit$body.apply(EntryPoint.scala:17)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:30)
at scala.App$class.main(App.scala:60)
at com.yandex.etl.EntryPoint$.main(EntryPoint.scala:12)
at com.yandex.etl.EntryPoint.main(EntryPoint.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.IllegalArgumentException: Class name can't be null or empty string [null]
at akka.spring.StringReflect.<init>(StringReflect.scala:20)
at akka.spring.StringReflect$.string2StringReflect(StringReflect.scala:12)
at akka.spring.SupervisionFactoryBean.createSupervise(SupervisionFactoryBean.scala:84)
at akka.spring.SupervisionFactoryBean$$anonfun$1.apply(SupervisionFactoryBean.scala:48)
at akka.spring.SupervisionFactoryBean$$anonfun$1.apply(SupervisionFactoryBean.scala:48)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
at scala.collection.immutable.List.map(List.scala:45)
at akka.spring.SupervisionFactoryBean.createInstanceForUntypedActors(SupervisionFactoryBean.scala:48)
at akka.spring.SupervisionFactoryBean.createInstance(SupervisionFactoryBean.scala:32)
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:130)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 27 more

MyActor class:

class MyActor(val name: String) extends Actor {
def receive = {
case msg => EventHandler.info(self, "Received message: %s" format msg)
}
}

Is there any way to implement this feature? Precisely how am I supposed to supervise actors having non-default constructor using Spring?

May be there is some way to define a supervisor and after that declaratively link actors to it? I'd like to do it in Spring, of course.

--
Best regards,
Incubos

Peter Veentjer

unread,
Jun 29, 2011, 7:49:54 AM6/29/11
to akka...@googlegroups.com
Hi Incubus,

I'll look into it. 


--
You received this message because you are subscribed to the Google Groups "Akka User List" group.
To post to this group, send email to akka...@googlegroups.com.
To unsubscribe from this group, send email to akka-user+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/akka-user?hl=en.


Jonas Bonér

unread,
Jun 29, 2011, 8:05:52 AM6/29/11
to akka...@googlegroups.com
Thanks Peter. 

-- 
Jonas Bonér
CTO 
Typesafe - Enterprise-Grade Scala from the Experts
Phone: +46 733 777 123
Twitter: @jboner

Peter Veentjer

unread,
Jun 29, 2011, 4:07:28 PM6/29/11
to akka...@googlegroups.com
Which version of Akka are you currently using? 

I have been trying to do some analysis of your stacktrace, but need to know the exact version.

Incubos

unread,
Jun 29, 2011, 5:47:40 PM6/29/11
to Peter Veentjer, akka...@googlegroups.com
I use Akka 1.1.2. I am not sure that my example should work, but it would be nice.

--
Best regards,
Incubos

Peter Veentjer <alarm...@gmail.com> написал:

Incubos

unread,
Jul 3, 2011, 7:04:07 AM7/3/11
to Incubos, Peter Veentjer, akka...@googlegroups.com
Hi!

Is there any progress regarding my problem?


--
Best regards,
Incubos

Incubos <sob...@gmail.com> написал:

Incubos

unread,
Jul 5, 2011, 11:02:00 AM7/5/11
to akka...@googlegroups.com
Should I test it using Akka 1.1.3?


--
Best regards,
Incubos

Reply all
Reply to author
Forward
0 new messages