2014-04-18 64 views
1

我有一个桌面应用程序与嵌入式码头和一些SWING用户界面在Java中。 我想利用AKK将消息从嵌入式jetty servlet发送到我的应用程序类(能够让actor更新传入消息的swing UI)。 据我了解,我需要为整个应用程序提供单个演员系统。问题是处理对它的引用的最佳方法是什么? 我应该做一些包装参考演员系统的单身人士? 由于jetty可能会使用自己的类加载器,所以类加载器可能存在问题吗?保持参考演员系统

+0

我不明白你的描述servlet容器在做什么;谁或什么连接并向servlet容器发送什么内容,以及与swing应用程序相关的内容如何? – simbo1905

回答

0

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

在你的情况下,你正在谈论嵌入servlet容器和询问类加载。 Servlet容器做'最后一个'类加载器语义。如果在战争中akka类不在jar中,我们会期望它们从主应用程序类路径加载。如果你的建筑物有类似maven的东西,你可以将Web项目依赖项的共享库标记为'provided',这样你的war类就可以对它们进行编译,但是它们会被打包到war文件中。然后,如果您的webapp中的类使用这些库类,那么它们可以来自主类路径,它可以与任何未在webapp中运行的代码共享。

如果您实际上只是为了动态重新部署代码而使用Web容器,那么它可能是工作的错误工具。改用一个osgi容器。这里是一些代码的链接,它使用osgi动态重新部署商业逻辑。https://github.com/simbo1905/osgi-extensible有几个很好的osgi企业规范容器,示例代码使用felix,但也有其他的。今天使用servlet容器的唯一原因是使用类似于jsp的技术来提供网页。 Akka具有远程消息传递等功能,并且在不需要servlet容器的情况下可以很好地处理HTML5 websockets。您可以使用在Akka中编写的Socko网络服务器来托管您的akka​​业务逻辑并使用json向其发送消息,而不会出现整个servlet容器的膨胀。这里是一些代码的链接https://github.com/simbo1905/sprint-planning