OSGi的如何安装两个相同的包?(OSGi how to install two identical

2019-10-29 11:36发布

我想在OSGi容器中安装两个相同的包或同捆的两倍。 我使用的OSGi容器是FUSE ESB。 下面是包的信息:

pom.xml中:

<groupId>com.helloworldbundle</groupId>
<artifactId>HelloWorldBundle</artifactId>
<version>1.0.0-SNAPSHOT</version>

蓝图:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

  <bean id="helloworldbundlecopybean"
    class="com.helloworldbundle.HelloWorld"
    init-method="init" destroy-method="destroy">
  </bean>

</blueprint>

第一次安装成功。 当我尝试重新安装它,它失败了。 然后,我做项目的副本,并修改它:

变更项目文件夹名称HelloWorldBundleCopy

改变神器

<artifactId>HelloWorldBundleCopy</artifactId>

改变bean的id

<bean id="helloworldbundlecopybeancopy"

但我仍然无法安装修改包:

Error executing command: Error installing bundles:
Unable to install bundle /home/li/Documents/Java/HelloWorldBundleCopy/target/HelloWorldBundleCpoy-1.0.0-SNAPSHOT.jar

更新我的问题:

这里是我的情况:

我有三个主机:主机1,主机2和主机

FUSE ESB OSGi容器安装在主机3。 我需要运行一个服务,就这两个主机1和主机例子的HelloWorld。 而这种服务与FUSE ESB是在主机3注册。

这就是为什么我需要使用FUSE ESB两次注册相同的包。

这里是我的问题:

  1. 是否有可能在容器外运行一个包,就像一台主机上运行的HelloWorld套件,但其注册到FUSE ESB不同的主机上? 怎么办呢? 我以前做过的实验是一个服务包注册FUSE ESB在同一台机器通过:

    FuseESB:karaf @根>安装文件:/home/li/Documents/Java/HelloWorldBundle/target/HelloWorldBundle-1.0.0-SNAPSHOT.jar

2.How再次修改现有Maven项目,以使安装它,而无需创建一个新的Maven项目?

Answer 1:

在OSGi中的组合Bundle-SymbolicNameBundle-Version是像束的“主键” ......你不能安装具有完全相同的符号名和版本两个包袱。

在你的问题你已经混了运行时问题的工具,因此很难说什么是真正发生的事情......反正你已经改变了artifactId在Maven的,但我不知道会产生什么影响,关于捆绑- SymbolicName,这是什么OSGi的关心。 如果更改标题,您可以安装这个套件的两倍。

然而,这引出了一个问题,为什么你要安装的同捆两次? 这是非常很少有用。 请解释一下你为什么要做到这一点; 很可能有一个更好的解决您的根本问题。



文章来源: OSGi how to install two identical bundle?