java - 保留对 Actor 系统的引用

标签 java akka embedded-jetty

我有一个带有嵌入式 jetty 的桌面应用程序和一些 Java 中的 SWING UI。 我想利用 akka 将消息从嵌入式 jetty servlet 发送到我的应用程序类(Actor 能够根据传入消息更新 swing UI)。 据我了解,我需要为整个应用程序提供单一参与者系统。问题是处理对其引用的最佳方法是什么? 我应该制作某种包含对 Actor 系统的引用的单例吗? 类加载器是否存在问题,因为 jetty 可能使用它自己的类加载器?

最佳答案

一般来说,对于 servlet,您可以决定是否需要每个 jvm、每个嵌入式服务器实例或每个 Web 应用程序都有一个 actor 系统。对于正常用例,大多数人都希望每个 Web 应用程序都有一个 Actor 系统。在这种情况下,他们将继承 ServletContextListener,创建 actor 系统,然后从 ServletContextEvent 获取 ServletContext 并将 actor 系统添加为属性。然后,在 servlet 和 servlet 过滤器中,您可以从 servlet 上下文查找 actor 系统。一般来说,开始新项目的人应该查看 Play否则Socko专为与 Akka 开箱即用而构建的 Web 框架。

在您的例子中,您正在谈论嵌入 servlet 容器并询问类加载。 Servlet 容器执行“父级最后”类加载器语义。如果 akka 类不在 war 中的 jar 中,我们希望它们从主应用程序类路径加载。如果您使用诸如 Maven 之类的东西进行构建,您可以将 Web 项目依赖项的共享库标记为“已提供”,以便您的 War 类针对它们进行编译,但它们确实会打包到 War 文件中。然后,如果 Web 应用程序中的类使用这些库类,它们可能来自主类路径,该类路径可以与未在 Web 应用程序中运行的任何代码共享。

如果您实际上只是使用 Web 容器来动态重新部署代码,那么它可能是错误的工具。请改用 osgi 容器。这是一些代码的链接,它使用 osgi https://github.com/simbo1905/osgi-extensible 动态重新部署业务逻辑。有几个很好的 osgi 企业规范容器,示例代码使用 felix,但还有其他容器。如今使用 servlet 容器的唯一原因是使用类似 jsp 的技术来提供网页。 Akka 具有远程消息传递等功能,并且可以与 HTML5 websockets 很好地配合,而无需 servlet 容器。您可以使用用 Akka 编写的 Socko Web 服务器来托管您的 akka 业务逻辑,并使用 json 向其发送消息,而不会造成完整 servlet 容器的臃肿。这是一些执行此操作的代码的链接 https://github.com/simbo1905/sprint-planning

关于java - 保留对 Actor 系统的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23157784/

相关文章:

java - 如何在 IntelliJ 中分析堆转储? (内存泄漏)

jetty - 如何将 CXFNonSpringJaxrsServlet 与 serviceBean 而不是 serviceClass 一起使用?

java - 在运行期间更新 eclipse 中的嵌入式 jetty webapp

当 routee 想要更改路由时的 Akka 路由参与者

java - 当 Source 有大量记录时,Akka 流不会运行

java - Jetty如何重新部署war

java - 非静态方法与使用静态方法的 Utilty

java - 用Java制作tar文件

java - 如何在 Vaadin 的文本字段上创建实时 validator ?

Java 可选 : map to subclass or else super class