Li'*_*Li' 0 java osgi bundle fuseesb
我想在OSGi容器中两次安装两个相同的bundle或相同的bundle.我使用的OSGi容器是FUSE ESB.这是捆绑信息:
pom.xml中:
<groupId>com.helloworldbundle</groupId>
<artifactId>HelloWorldBundle</artifactId>
<version>1.0.0-SNAPSHOT</version>
Run Code Online (Sandbox Code Playgroud)
蓝图:
<?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>
Run Code Online (Sandbox Code Playgroud)
第一次安装成功.当我再次尝试安装时,它失败了.然后我制作项目的副本并修改它:
将项目文件夹名称更改为HelloWorldBundleCopy
将工件更改为
<artifactId>HelloWorldBundleCopy</artifactId>
Run Code Online (Sandbox Code Playgroud)
将bean id更改为
<bean id="helloworldbundlecopybeancopy"
Run Code Online (Sandbox Code Playgroud)
但我仍然无法安装修改后的捆绑包:
Error executing command: Error installing bundles:
Unable to install bundle /home/li/Documents/Java/HelloWorldBundleCopy/target/HelloWorldBundleCpoy-1.0.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
更新到我的问题:
这是我的场景:
我有三个主机:Host1,Host2和Host3
FUSE ESB OSGi容器安装在Host3中.我需要在Host1和Host2上运行一个服务,例如HelloWorld.此服务已在Host3上的FUSE ESB中注册.
这就是为什么我需要使用FUSE ESB两次注册相同的包.
这是我的问题:
是否可以在容器外部运行捆绑包,例如在一台主机上运行HelloWorld捆绑包,但是将其注册到另一台主机上的FUSE ESB?怎么做?我之前做过的实验是通过以下方式在同一台机器上向FUSE ESB注册服务包:
FuseESB:karaf @ root>安装文件:/home/li/Documents/Java/HelloWorldBundle/target/HelloWorldBundle-1.0.0-SNAPSHOT.jar
2.如何修改现有的maven项目以便在不创建新的maven项目的情况下再次安装它?
在OSGi中的组合Bundle-SymbolicName,并Bundle-Version为像束的"主键" ......你不能安装具有完全相同的符号名和版本两个包袱.
在你的问题中,你已经将工具与运行时问题混为一谈,因此很难说出真正发生了什么......无论如何,你已经改变了artifactIdMaven,但我不知道可能对Bundle-SymbolicName有什么影响,这就是OSGi关心.如果更改该标头,则可以安装此捆绑包两次.
然而,这引出了一个问题,为什么要两次安装相同的捆绑包?这很少有用.请解释你为什么要这样做; 它可能会为您的潜在问题提供更好的解决方案.