所以,我有一堆OSGi包(.jars),它们执行一堆“业务逻辑”。一切都很好,直到现在我一直使用gogo命令行shell与bundle连接。
我想添加一个网络界面。
我最初的想法是将接口捆绑到同一个OSGi容器/实例中。我以为我会制作一个轻量级的嵌入式Jetty包,然后加载一个.war。然后,servlet可以在理论上直接与其他OSGi服务对话。
在现实世界中,应用程序的几个实例会相互通信。我不确定是否最好有一个Web界面连接到每个业务应用程序的本地或每个Web界面。
对技术没有限制或偏好,只是它是开源的。
我的问题是;
答案 0 :(得分:0)
看一下Virgo Web Server,以前是Spring DM Server。它有一个完整的servlet容器,它是一个完整的OSGi容器,如果你想要走这条路,它还内置了Spring DM。我认为没有任何理由将网络和业务内容分成不同的流程。无论是单个webapp还是每个业务包都需要一个设计问题:“它是一个结合了许多潜在问题的单一用户界面,还是这些都是独立的问题?”
答案 1 :(得分:0)
最简单的方法是使用OSGi HttpService注册servlet,例如Apache Felix HTTP Service 包提供。我认为Felix的变种嵌入了Jetty,但你不必关心,在OSGi级别你只看到标准的HttpService。
与生成JSON的服务器端库(我正在使用Apache Sling commons.json包)和像jQuery这样的客户端库相结合,你有一个强大而简单的工具包,你的servlet可以作为OSGi服务的前端。
答案 2 :(得分:0)
听起来您的网络界面是管理界面而非最终用户界面?
如果是这种情况,那么请查看Felix webconsole,您可以easily extend it编写plugin
控制台本身也是可换肤的,所以如果它只是一个内部应用程序,那么这可能是最简单的实现。有许多用于管理/查看的插件
我不会嵌入Jetty,因为Betrand声称有HTTP服务实现,但PAX Web也允许直接部署战争。
RE:“我应该将.war和业务逻辑分成两个独立的进程吗?”我不会为了它而分发应用程序,除非(高可用性或负载平衡需要),但你绝对应该将应用程序分成一个瘦的战争(仅限UI的东西)和单独的服务包。
Web应用程序是应该管理所有实例还是每个实例管理一个实体取决于许多其他事情;
不确定您是如何计划让应用程序进行通信的,但Apache CXF可以通过Web服务实现远程服务规范,而Eclipse Communication Framework提供了更多的传输协议。