Java 向OSGi应用程序添加web界面的最佳技术是什么?

Java 向OSGi应用程序添加web界面的最佳技术是什么?,java,osgi,war,Java,Osgi,War,所以,我有一堆OSGi包(.jar),它们执行一堆“业务逻辑”。一切都很好,到目前为止,我一直在使用gogo命令行shell与捆绑包进行接口 我想添加一个web界面 我最初的想法是将接口捆绑到同一个OSGi容器/实例中。我想我会制作一个轻量级的嵌入式Jetty包,它反过来装载一个.war。从理论上讲,servlet可以直接与其他OSGi服务进行通信 在现实世界中,会有多个应用程序实例相互通信。我不确定是最好有一个web界面连接到每个应用程序,还是每个业务应用程序本地有一个web界面 技术没有限制

所以,我有一堆OSGi包(.jar),它们执行一堆“业务逻辑”。一切都很好,到目前为止,我一直在使用gogo命令行shell与捆绑包进行接口

我想添加一个web界面

我最初的想法是将接口捆绑到同一个OSGi容器/实例中。我想我会制作一个轻量级的嵌入式Jetty包,它反过来装载一个.war。从理论上讲,servlet可以直接与其他OSGi服务进行通信

在现实世界中,会有多个应用程序实例相互通信。我不确定是最好有一个web界面连接到每个应用程序,还是每个业务应用程序本地有一个web界面

技术没有限制或偏好,只是它必须是开源的

我的问题是,

  • 这很糟糕吗
  • 有更好的方法吗
  • 我是否应该将.war和业务逻辑分为两个单独的流程
看看以前的Spring DM服务器。它有一个完全成熟的servlet容器,是一个完整的OSGi容器,如果您想这样做,它还内置了SpringDM。我不认为有任何理由将web和业务划分为单独的流程。无论是单个webapp还是每个业务捆绑包一个webapp似乎更像是一个设计问题:“它是一个结合了许多底层关注点的单一UI,还是这些关注点都是独立的?”

最简单的方法是向OSGi-HttpService注册servlet,例如由捆绑包提供。我认为Felix的变体嵌入了Jetty,但您不必在意,在OSGi级别,您只需看到标准的HttpService


再加上一个生成JSON的服务器端库(我使用的是Apache Sling捆绑包)和一个客户端库(如jQuery),您就有了一个强大而简单的工具包,您的servlet可以作为OSGi服务的前端。

听起来您的web界面是一个管理界面,而不是最终用户界面

如果是这样的话,那么请看一下

控制台本身也是可蒙皮的,因此如果它只是一个内部应用程序,那么这可能是最容易实现的。有许多用于管理/查看的插件

我不会嵌入Jetty,正如Betrand所说,它有HTTP服务实现,但也允许直接部署WAR

RE:“我应该将.war和业务逻辑分为两个单独的流程吗?”我不会为了它而分发应用程序,除非(需要高可用性或负载平衡),但你肯定应该将应用程序分为一个精简的war(仅限于UI内容)和单独的服务包

web应用程序应该管理所有实例还是每个实例管理一个实例取决于许多其他事情

  • 您可能会同时部署不同的版本吗?(如果是这样,则每个实例的web应用程序将减少麻烦)
  • 它是面向客户的吗?(单独的实例可能更容易保护)
  • 您需要汇总信息吗?(单个web应用程序)
不确定您计划如何让应用程序通信,但ApacheCXF可以通过webservices实现远程服务规范,Eclipse通信框架提供了更多的传输协议