Page History
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.psmon.cachedb.extension; import akka.actor.Actor; import akka.actor.IndirectActorProducer; import org.springframework.context.ApplicationContext; /** * An actor producer that lets Spring create the Actor instances. */ public class SpringActorProducer implements IndirectActorProducer { private final ApplicationContext applicationContext; private final String actorBeanName; private final Object[] args; public SpringActorProducer(ApplicationContext applicationContext, String actorBeanName) { this.applicationContext = applicationContext; this.actorBeanName = actorBeanName; } @Override this.args = null; public Actor produce() {} returnpublic SpringActorProducer(Actor)ApplicationContext applicationContext.getBean(actorBeanName);, String actorBeanName, Object... args) { } @Override this.applicationContext = applicationContext; public Class<? extends Actor> actorClass() {this.actorBeanName = actorBeanName; return (Class<? extends Actor>) applicationContext.getType(actorBeanName)this.args = args; } } @Override public Actor produce() { return args == null ? (Actor) applicationContext.getBean(actorBeanName): (Actor) applicationContext.getBean(actorBeanName, args); } @Override public Class<? extends Actor> actorClass() { return (Class<? extends Actor>) applicationContext.getType(actorBeanName); } } |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.psmon.cachedb.extension;
import akka.actor.Extension;
import akka.actor.Props;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* Extension to tell Akka how to create beans via Spring.
*/
@Component
public class SpringExtension implements Extension {
private ApplicationContext applicationContext;
/**
* Used to initialize the Spring application context for the extension.
*/
public void initialize(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
/**
* Create a Props for the specified actorBeanName using the
* SpringActorProducer class.
*/
public Props props(String actorBeanName, Object... args) {
return (args != null && args.length > 0) ?
Props.create(SpringActorProducer.class,
applicationContext,
| ||||||
Code Block | ||||||
| ||||||
package com.psmon.cachedb.extension; import akka.actor.Extension; import akka.actor.Props; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; /** * Extension to tell Akka how to create beans via Spring. */ @Component public class SpringExtension implements Extension { private ApplicationContext applicationContext; /** * Used to initialize the Spring application context for the extension. */ public void initialize(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } actorBeanName, args) /**: * Create a Props for the specified actorBeanName using the Props.create(SpringActorProducer.class, * SpringActorProducer class. */ public Props props(String actorBeanName) {applicationContext, return Props.create(SpringActorProducer.class, applicationContext, actorBeanName); } } |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.psmon.cachedb.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.context.event.EventListener; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import com.psmon.cachedb.extension.SpringExtension; import akka.actor.ActorSystem; @Configuration @Lazy @ComponentScan(basePackages = { "com.psmon.cachedb.services", "com.psmon.cachedb.actors", "com.psmon.cachedb.extension" }) public class ApplicationConfiguration { @Autowired private ApplicationContext applicationContext; @Autowired private SpringExtension springExtension; @Autowired private Environment env; @Bean public ActorSystem actorSystem() { ActorSystem system = ActorSystem .create("AkkaTestApp", akkaConfiguration()); springExtension.initialize(applicationContext); return system; } @Bean public Config akkaConfiguration() { String akkaip = env.getProperty("akka.remote.netty.tcp.ip"); String port = env.getProperty("akka.remote.netty.tcp.port"); // 기존 Akka설정과(application.conf) + 최종계산된 Spring의 설정(appplication.properties)를 머징시키는방법 // AKKA에서 필요한 기능들 설정은 충분히한후, 변경요소를 Spring설정을 노출하여 변경하는 방식 return ConfigFactory.load().withValue("akka.remote.netty.tcp.ip", ConfigValueFactory.fromAnyRef(akkaip)) .withValue("akka.remote.netty.tcp.port", ConfigValueFactory.fromAnyRef(port)); } @EventListener(ApplicationReadyEvent.class) public void doSomethingAfterStartup() { } } |
...