保持对演员系统的参考

时间:2014-04-18 16:02:43

标签: java akka embedded-jetty

我有一个带嵌入式jetty的桌面应用程序和Java中的一些SWING UI。 我想利用akka将来自嵌入式jetty servlet的消息发送到我的应用程序类(能够让actor更新传入消息的swing UI)。 据我所知,我需要为整个应用程序提供单个actor系统。问题是处理参考的最佳方法是什么? 我应该制作一些包含对actor系统的引用的单例吗? 由于码头可能会使用它自己的类加载器,因此类加载器会出现问题吗?

1 个答案:

答案 0 :(得分:0)

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

在您的情况下,您正在讨论嵌入servlet容器并询问有关类加载的问题。 Servlet容器做'父最后'类加载器语义。如果akka类不在战争中的jar中,我们希望它们可以从主应用程序类路径加载。如果您的建筑物像maven一样,您可以将Web项目依赖项的共享库标记为“已提供”,以便您可以对类进行编译,但是它们正在打包到war文件中。然后,如果webapp中的类使用这些库类,它们可以来自主类路径,可以与任何未在webapp中运行的代码共享。

如果您实际上只是使用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

的代码的链接