【问题标题】:OSGi how to install two identical bundle?OSGi如何安装两个相同的bundle?
【发布时间】:2013-05-23 18:37: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

更新我的问题:

这是我的场景:

我有三个主机:Host1、Host2 和 Host3

FUSE ESB OSGi 容器安装在 Host3 中。 我需要在 Host1 和 Host2 上运行一个服务,例如 HelloWorld。该服务在 Host3 上的 FUSE ESB 上注册。

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

这是我的问题:

  1. 是否可以在容器外运行捆绑包,例如在一台主机上运行 HelloWorld 捆绑包,但在另一台主机上将其注册到 FUSE ESB?怎么做?我之前做过的实验是在同一台机器上注册一个service bundle到FUSE ESB,方法是:

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

2.如何修改已有的maven项目,在不新建maven项目的情况下重新安装?

【问题讨论】:

  • 您真的想要两次安装捆绑包还是想要两个 HelloWorld bean 实例?

标签: java osgi bundle fuseesb


【解决方案1】:

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

在您的问题中,您将工具与运行时问题混为一谈,因此很难说出真正发生了什么...无论如何,您已经更改了 Maven 中的 artifactId,但我不知道这可能对 Bundle- 产生什么影响- SymbolicName,这是 OSGi 关心的。如果您更改该标头,则可以安装此捆绑包两次。

但这引出了一个问题,为什么要安装同一个捆绑包两次?这很少有用。请解释你为什么要这样做;您的潜在问题可能有更好的解决方案。

【讨论】:

  • 我已经用我的场景更新了我的问题。你能帮我解决吗?
猜你喜欢
  • 1970-01-01
  • 2012-07-08
  • 2012-04-20
  • 1970-01-01
  • 2013-12-03
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多