我的要求是在运行时将War文件部署到OSGI中。
为了实现我正在尝试通过以下代码:
BundleContext bundlecontext = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
Bundle b = bundlecontext.installBundle("file:" + "./war/testwar.war");
b.start();
但是我无法通过使用以上代码来实现。
由于我是OSGI的新手,所以我对OSGi的了解很少。因此,在此方面我需要帮助。
OSGi运行时不是应用程序服务器,而是管理模块(捆绑包)的环境。 war
通常不是OSGi捆绑包,因此无法按照您的安装方式进行安装。
[有许多种方法可以实现您想要的,很难提出建议。以下是其中一些:
将WAR转换为WAB(Web应用程序捆绑包)。这样,您可以将其安装到任何OSGi运行时中。您还需要安装其他可以处理Web请求的捆绑软件(例如HTTP Whiteboard实现)
使用基于OSGi的产品,该产品可以自动将war
转换为bundles
。 Liferay Portal可以做到这一点,但是如果您只想运行一个应用程序,那么学习它可能会太多。
如果您用的是apache-karaf
标记问题,因为那是您的环境,请查看War deployer。该功能将允许您在Karaf中安装war文件。如果您想通过代码完成此操作,则可以查看该功能的代码并遵循相同的方法。