Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时将war部署到OSGI中_Java_Eclipse_Osgi_Apache Karaf_Equinox - Fatal编程技术网

Java 在运行时将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新手,所以对

我的要求是在运行时将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白板实现)

  • 使用基于OSGi的产品,该产品可以自动将
    war
    s转换为
    bundle
    。但如果你只想运行一个应用程序,那么学习它可能太多了

  • 如果您将问题标记为apachekaraf,因为这是您的环境,那么请查看。该功能将允许您在Karaf中安装war文件。如果您想从代码开始,您可以查看该特性的代码并遵循相同的方法


  • 谢谢你的重播。。。我试图使用
    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应用程序。有一个项目表明了这一点。