Skip to content

Akka Spring integration for Java with additional spring factories for actor creation with ease.

License

Notifications You must be signed in to change notification settings

sabomichal/akka-java-springfactory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

akka-java-springfactory

Akka Spring integration for Java with additional spring factories for actor creation with ease. This approach is based on the original approach by Typesafe found here http://typesafe.com/activator/template/akka-java-spring.

  • provides factory method for actor system creation as a spring singleton bean
  • provides factory method for actor creation as a spring prototype bean
  • provides autowiring of created actors
  • router, mailbox and dispatcher can be configured directly via spring

How to create an actor system

Just define actor system singleton in the spring context using ActorSystemFactoryBean.

<bean id="actorSystem" class="com.github.sabomichal.akkaspringfactory.ActorSystemFactoryBean">
	<!-- actor system name -->
	<property name="name" value="MyActorSystem"/>
	<!-- actor system configuration -->
	<property name="config">
		<bean class="com.typesafe.config.ConfigFactory" factory-method="load">
			<constructor-arg value="akkaActor.conf"/>
		</bean>
	</property>
</bean>

How to create actors

Programmatic use case

Enable Spring auto scanning of componnents,

<context:component-scan base-package="..." />

annotate actor with @Actor annotation,

import com.github.sabomichal.akkaspringfactory.Actor;

@Actor
public class MyActor extends UntypedActor {

	// additionally inject some dependencies
	@Inject
	private MyService injectedService;

	@Override
	public void onReceive(Object message) throws Exception {
		// receive method
	}
}

and finally create an ActorRef programmatically.

@Inject
private ActorSystem actorSystem;
...
ActorRef myActor = actorSystem.actorOf(SpringProps.create(actorSystem, MyActor.class));

Spring managed use case

Just create a spring managed actor reference,

<bean id="springManagedActor" class="com.github.sabomichal.akkaspringfactory.ActorFactoryBean">
	<!-- actor system reference -->
	<property name="actorSystem" ref="actorSystem"/>
	
	<!-- class name of actor to create -->
	<property name="actorClass" value="com.github.sabomichal.akkaspringfactory.test.GreetingActor"/>
	
	<!-- bean name of actor to create -->
	<!--<property name="actorBeanClass" value=""/>-->
	
	<!-- router configuration -->
	<!--<property name="routerConfig">
		<bean class="akka.routing.SmallestMailboxPool">
			<constructor-arg value="10"/>
		</bean>
	</property>-->
	
	<!-- mailbox settings -->
	<!--<property name="mailbox" value=""/>-->
	
	<!-- dispatcher settings -->
	<!--<property name="dispatcher" value=""/>-->
</bean>

and use it as a spring managed dependency wherever you want. And since ActorFactoryBean is producing prototype beans, a new instance of ActorRef is created with all dependencies resolved.

@Inject
private ActorRef springManagedActor;
...
springManagedActor.tell(...);

For detailed examples see the provided unit tests.

If you like it, give it a star, if you don't, please write an issue.

About

Akka Spring integration for Java with additional spring factories for actor creation with ease.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages