在Tomcat7下的Java Web应用程序项目中将Akka与Spring集成



我有兴趣将Actor注入豆子,而Actor将在春天之前创建。此外,我正在寻找自定义 Akka 配置文件路径的方法。

我的项目使用 Java 7 和 spring 3.2.5,akka 版本是 2.3.7。

我阅读了一些文档和指南,这些文档和指南指示在我的 spring bean 配置文件中创建 bean 定义,如下所示:

<bean id="system-actor" class="akka.actor.ActorSystem" factory-method="create" destroy-method="shutdown" scope="singleton">
    <constructor-arg value="MyApp" />
</bean>

弹簧根据默认配置成功创建的系统actor。问题:

  • 我想根据 /WEB-INF/application.conf 文件初始化系统参与者,我添加了 -Dconfig.trace=load 系统属性以调试配置加载,这是输出:

    从类加载器 WebappClassLoader 装入配置 上下文:/我的应用 委托:假 存储 库: /WEB-INF/classes/---------->父类装入器:org.apache.catalina.loader.StandardClassLoader@992f73 但是没有称为 application.conf 的资源异常加载 application.conf: java.io.IOException: 在类路径上找不到资源: application.conf从类加载器 WebappClassLoader 装入配置 上下文:/我的应用 委托:假 存储 库: /WEB-INF/classes/---------->父类装入器:org.apache.catalina.loader.StandardClassLoader@992f73 但是没有名为application.json的资源。异常加载 application.json: java.io.IOException: 在类路径上找不到资源: application.json从类加载器 WebappClassLoader 装入配置 上下文:/我的应用 委托:假 存储 库: /WEB-INF/classes/---------->父类装入器:org.apache.catalina.loader.StandardClassLoader@992f73 但是没有称为应用程序属性的资源异常加载 application.properties: java.io.IOException: 在类路径上找不到资源: application.properties没有找到任何扩展名的"应用程序"(.conf,.json,.properties(;但是允许缺少"应用程序"。上面应该记录加载尝试的异常。从 URL jar:file:/var/work/MY-APP/jakarta-tomcat/webapps/MY-APP/WEB-INF/lib/akka-actor_2.10-2.3.7.jar!/reference.conf 从类加载器 WebappClassLoader 加载配置 上下文:/我的应用 委托:假 存储 库: /WEB-INF/classes/---------->父类装入器:org.apache.catalina.loader.StandardClassLoader@992f73

  • 有没有办法将此路径传递给系统参与者 bean?

  • 有一种方法可以在春天创建演员豆,而不是注入系统演员并使用system.actorOf(Props.create(MyActor.class), "name");?详细的例子会有所帮助。

  • 许多类似问题的答案都指向这篇文章:http://blog.nemccarthy.me/?p=272 但是这个页面是离线的,有人知道那里写了什么吗?

Q1

显式定义 conf 文件的存储位置,缺省情况下扫描根类路径目录,WEB-INF/classes

-Dconfig.resource=/dev.conf

第 2 季度

按照 activator-akka-java-spring 中提供的模式,您可以完全使用该存储库中的代码或使用您自己的自定义逻辑对其进行自定义。(迟早你会明白为什么你需要自定义它(

您需要记住,扩展需要使用ctx进行初始化

SpringExtProvider.get(system).initialize(applicationContext);

然后你可以根据需要包装它,处理简单的Actor创建:

ActorRef counter = system.actorOf(
      SpringExtProvider.get(system).props("quartz"), "quartz");

甚至更复杂的单例情况:

ActorRef quartzCoordinator = getContext().actorOf(ClusterSingletonManager.defaultProps(SpringExtProviderget(getContext().system()).props("quartz"), "quartz",
                PoisonPill.getInstance(), "core"), "coordinator");

第三季度

赏金;)

最新更新