Java 在运行时将war部署到OSGI中
我的要求是在运行时将war文件部署到OSGI中 为了实现这一目标,我正在尝试以下代码:Java 在运行时将war部署到OSGI中,java,eclipse,osgi,apache-karaf,equinox,Java,Eclipse,Osgi,Apache Karaf,Equinox,我的要求是在运行时将war文件部署到OSGI中 为了实现这一目标,我正在尝试以下代码: BundleContext bundlecontext = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); Bundle b = bundlecontext.installBundle("file:" + "./war/testwar.war"); b.start(); 但我无法通过使用上述代码实现这一点 因为我是OSGI新手,所以对
BundleContext bundlecontext = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
Bundle b = bundlecontext.installBundle("file:" + "./war/testwar.war");
b.start();
但我无法通过使用上述代码实现这一点
因为我是OSGI新手,所以对OSGI的了解很少。
所以我需要这方面的帮助才能实现。OSGi运行时不是应用服务器,而是管理模块(捆绑包)的环境。
war
通常不是OSGi捆绑包,不能按您的方式安装
有很多不同的方法来实现你想要的,很难提出建议。以下是其中一些:
war
s转换为bundle
。但如果你只想运行一个应用程序,那么学习它可能太多了谢谢你的重播。。。我试图使用
bundle:install-s webbundle:/war/testwar.war
进行安装,但执行命令时出现了类似的错误:错误安装bundle:error安装bundle:war/testwar.war:org.osgi.framework.bundle异常:无法缓存bundle:webbundle:/war/testwar.war
你知道吗为什么出现此错误。如果要安装本地文件,请尝试webbundle:file:///war/testwar.war
。还要确保在URL上提供Bundle SymbolicName
和Web ContextPath
标题。我不知道这些是否是强制性的(它们可能是自动生成的),但我会谨慎行事,让他们知道以后如何访问应用程序。我没有在bundlecontext.installBundle
中传递war位置,而是在清单文件中做了一些更改后尝试传递InputStream,如下所示file file=new file(war\u file);JarInputStream in=new-JarInputStream(new-BufferedInputStream(Files.newInputStream(file.toPath()));Manifest=in.getManifest();Attributes m=manifest.getMainAttributes();m、 putValue(“Webapp上下文”,fName);Bundle b=bc.installBundle(null,in);b、 start()代码>但我遇到了一些错误,如org.osgi.framework.BundleException:安装捆绑包时出错。你能在这方面帮助我吗?我建议编辑这个问题,并添加一个更新,描述你做了什么,为什么要这样做,以及新的问题是什么。通过这种方式,您可以提供更多信息(代码、错误消息等),这些信息可以正确格式化并更具可读性。在Karaf中,如果您安装了pax war
功能,您将拥有一个扩展器,可以安装war并注册为web应用程序。有一个项目表明了这一点。