You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by XiLai Dai <xl...@talend.com> on 2012/04/05 10:39:34 UTC

about Packages Exported by Multiple Bundles

Hello,

Got a problem about Packages Exported by Multiple Bundles. There are 2 bundles exported org.apache.derby.jdbc package.

karaf@trun>install -s mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.derbynet/10.8.1.2_1
karaf@trun>install -s mvn:org.apache.derby/derbyclient/10.8.1.2

karaf@trun> list
[ 222] [Active     ] [            ] [       ] [   60] Apache ServiceMix :: Bundles :: derbynet (10.8.1.2_1)
[ 238] [Active     ] [            ] [       ] [   60] Apache Derby 10.8 (10.8.1000002.1095077)

karaf@trun> exports | grep derby.jdbc
   222 org.apache.derby.jdbc; version="10.8.1.2"
   238 org.apache.derby.jdbc; version="0.0.0"

Then, install a bundle with Import-Package like this:
Import-Package: javax.sql,org.apache.derby.jdbc,org.osgi.service.bluepri
nt;version="[1.0.0,2.0.0)",org.osgi.service.cm;version="[1.3,2)"

will throw a ClassNotFoundException:
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDataSource
         at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:460)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)[osgi-3.6.2.R36x_v20110210.jar:]
         at java.lang.ClassLoader.loadClass(ClassLoader.java:248)[:1.6.0_24]
         at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1197)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.apache.aries.blueprint.container.BlueprintContainerImpl.loadClass(BlueprintContainerImpl.java:384)[10:org.apache.aries.blueprint:0.3.1]
         at org.apache.aries.blueprint.container.BlueprintRepository.loadClass(BlueprintRepository.java:381)[10:org.apache.aries.blueprint:0.3.1]
         at org.apache.aries.blueprint.container.GenericType.parse(GenericType.java:113)[10:org.apache.aries.blueprint:0.3.1]
         at org.apache.aries.blueprint.di.AbstractRecipe.loadType(AbstractRecipe.java:110)[10:org.apache.aries.blueprint:0.3.1]
         ... 18 more

If uninstall bundle 222, then, the app bundle will be installed successful.

How to process this kind of problem of package exported from multi bundles within karaf?

Thanks.
Xilai

Re: about Packages Exported by Multiple Bundles

Posted by Freeman Fang <fr...@gmail.com>.
Hi,

No, the "Sealed" is from java spec, it requires that classes defined  
in that package must be archived in the same JAR file, make it "true"  
or "false" can't affect the OSGi behavior, because on top of this java  
spec, the OSGi Specifications added the constraint that a package must  
have a single source.


Freeman
On 2012-4-6, at 上午9:39, XiLai Dai wrote:

> Thanks Freeman!
> But even for the bundle declared not sealed ?
>
> In the MANIFEST.MF of derbyclient:
> Name: org/apache/derby/jdbc/
> Sealed: false
>
> Thanks.
> Xilai
> From: Freeman Fang [mailto:freeman.fang@gmail.com]
> Sent: Thursday, April 05, 2012 4:51 PM
> To: user@karaf.apache.org
> Subject: Re: about Packages Exported by Multiple Bundles
>
> Hi,
>
> You really shouldn't install multiple bundles with same package and  
> same version, otherwise you'll encounter the well-known split- 
> package issue in OSGi container.
>
> Freeman
> On 2012-4-5, at 下午4:39, XiLai Dai wrote:
>
>
> Hello,
>
> Got a problem about Packages Exported by Multiple Bundles. There are  
> 2 bundles exported org.apache.derby.jdbc package.
>
> karaf@trun>install –s mvn:org.apache.servicemix.bundles/ 
> org.apache.servicemix.bundles.derbynet/10.8.1.2_1
> karaf@trun>install -s mvn:org.apache.derby/derbyclient/10.8.1.2
>
> karaf@trun> list
> [ 222] [Active     ] [            ] [       ] [   60] Apache  
> ServiceMix :: Bundles :: derbynet (10.8.1.2_1)
> [ 238] [Active     ] [            ] [       ] [   60] Apache Derby  
> 10.8 (10.8.1000002.1095077)
>
> karaf@trun> exports | grep derby.jdbc
>    222 org.apache.derby.jdbc; version="10.8.1.2"
>    238 org.apache.derby.jdbc; version="0.0.0"
>
> Then, install a bundle with Import-Package like this:
> Import-Package:  
> javax.sql,org.apache.derby.jdbc,org.osgi.service.bluepri
> nt;version="[1.0.0,2.0.0)",org.osgi.service.cm;version="[1.3,2)"
>
> will throw a ClassNotFoundException:
> Caused by: java.lang.ClassNotFoundException:  
> org.apache.derby.jdbc.ClientDataSource
>          at  
> org 
> .eclipse 
> .osgi 
> .internal.loader.BundleLoader.findClassInternal(BundleLoader.java: 
> 460)[osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi 
> .internal 
> .baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java: 
> 107)[osgi-3.6.2.R36x_v20110210.jar:]
>          at java.lang.ClassLoader.loadClass(ClassLoader.java:248)[: 
> 1.6.0_24]
>          at  
> org 
> .eclipse 
> .osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java: 
> 232)[osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi 
> .framework 
> .internal.core.AbstractBundle.loadClass(AbstractBundle.java:1197) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .apache 
> .aries 
> .blueprint 
> .container 
> .BlueprintContainerImpl.loadClass(BlueprintContainerImpl.java:384) 
> [10:org.apache.aries.blueprint:0.3.1]
>          at  
> org 
> .apache 
> .aries 
> .blueprint 
> .container.BlueprintRepository.loadClass(BlueprintRepository.java: 
> 381)[10:org.apache.aries.blueprint:0.3.1]
>          at  
> org 
> .apache.aries.blueprint.container.GenericType.parse(GenericType.java: 
> 113)[10:org.apache.aries.blueprint:0.3.1]
>          at  
> org 
> .apache 
> .aries.blueprint.di.AbstractRecipe.loadType(AbstractRecipe.java:110) 
> [10:org.apache.aries.blueprint:0.3.1]
>          ... 18 more
>
> If uninstall bundle 222, then, the app bundle will be installed  
> successful.
>
> How to process this kind of problem of package exported from multi  
> bundles within karaf?
>
> Thanks.
> Xilai
>
> ---------------------------------------------
> Freeman Fang
>
> FuseSource
> Email:ffang@fusesource.com
> Web: fusesource.com
> Twitter: freemanfang
> Blog: http://freemanfang.blogspot.com
> http://blog.sina.com.cn/u/1473905042
> weibo: http://weibo.com/u/1473905042
>
>
>
>
>
>
>
>
>
>

---------------------------------------------
Freeman Fang

FuseSource
Email:ffang@fusesource.com
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: http://weibo.com/u/1473905042











RE: about Packages Exported by Multiple Bundles

Posted by XiLai Dai <xl...@talend.com>.
Thanks Freeman!
But even for the bundle declared not sealed ?

In the MANIFEST.MF of derbyclient:
Name: org/apache/derby/jdbc/
Sealed: false

Thanks.
Xilai
From: Freeman Fang [mailto:freeman.fang@gmail.com]
Sent: Thursday, April 05, 2012 4:51 PM
To: user@karaf.apache.org
Subject: Re: about Packages Exported by Multiple Bundles

Hi,

You really shouldn't install multiple bundles with same package and same version, otherwise you'll encounter the well-known split-package issue in OSGi container.

Freeman
On 2012-4-5, at 下午4:39, XiLai Dai wrote:


Hello,

Got a problem about Packages Exported by Multiple Bundles. There are 2 bundles exported org.apache.derby.jdbc package.

karaf@trun>install –s mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.derbynet/10.8.1.2_1
karaf@trun>install -s mvn:org.apache.derby/derbyclient/10.8.1.2

karaf@trun> list
[ 222] [Active     ] [            ] [       ] [   60] Apache ServiceMix :: Bundles :: derbynet (10.8.1.2_1)
[ 238] [Active     ] [            ] [       ] [   60] Apache Derby 10.8 (10.8.1000002.1095077)

karaf@trun> exports | grep derby.jdbc
   222 org.apache.derby.jdbc; version="10.8.1.2"
   238 org.apache.derby.jdbc; version="0.0.0"

Then, install a bundle with Import-Package like this:
Import-Package: javax.sql,org.apache.derby.jdbc,org.osgi.service.bluepri
nt;version="[1.0.0,2.0.0)",org.osgi.service.cm;version="[1.3,2)"

will throw a ClassNotFoundException:
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDataSource
         at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:460)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)[osgi-3.6.2.R36x_v20110210.jar:]
         at java.lang.ClassLoader.loadClass(ClassLoader.java:248)[:1.6.0_24]
         at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1197)[osgi-3.6.2.R36x_v20110210.jar:]
         at org.apache.aries.blueprint.container.BlueprintContainerImpl.loadClass(BlueprintContainerImpl.java:384)[10:org.apache.aries.blueprint:0.3.1]
         at org.apache.aries.blueprint.container.BlueprintRepository.loadClass(BlueprintRepository.java:381)[10:org.apache.aries.blueprint:0.3.1]
         at org.apache.aries.blueprint.container.GenericType.parse(GenericType.java:113)[10:org.apache.aries.blueprint:0.3.1]
         at org.apache.aries.blueprint.di.AbstractRecipe.loadType(AbstractRecipe.java:110)[10:org.apache.aries.blueprint:0.3.1]
         ... 18 more

If uninstall bundle 222, then, the app bundle will be installed successful.

How to process this kind of problem of package exported from multi bundles within karaf?

Thanks.
Xilai

---------------------------------------------
Freeman Fang

FuseSource
Email:f<ma...@fusesource.com>
Web: fusesource.com<http://fusesource.com/>
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: http://weibo.com/u/1473905042











Re: about Packages Exported by Multiple Bundles

Posted by Freeman Fang <fr...@gmail.com>.
Hi,

You really shouldn't install multiple bundles with same package and  
same version, otherwise you'll encounter the well-known split-package  
issue in OSGi container.

Freeman
On 2012-4-5, at 下午4:39, XiLai Dai wrote:

> Hello,
>
> Got a problem about Packages Exported by Multiple Bundles. There are  
> 2 bundles exported org.apache.derby.jdbc package.
>
> karaf@trun>install –s mvn:org.apache.servicemix.bundles/ 
> org.apache.servicemix.bundles.derbynet/10.8.1.2_1
> karaf@trun>install -s mvn:org.apache.derby/derbyclient/10.8.1.2
>
> karaf@trun> list
> [ 222] [Active     ] [            ] [       ] [   60] Apache  
> ServiceMix :: Bundles :: derbynet (10.8.1.2_1)
> [ 238] [Active     ] [            ] [       ] [   60] Apache Derby  
> 10.8 (10.8.1000002.1095077)
>
> karaf@trun> exports | grep derby.jdbc
>    222 org.apache.derby.jdbc; version="10.8.1.2"
>    238 org.apache.derby.jdbc; version="0.0.0"
>
> Then, install a bundle with Import-Package like this:
> Import-Package:  
> javax.sql,org.apache.derby.jdbc,org.osgi.service.bluepri
> nt;version="[1.0.0,2.0.0)",org.osgi.service.cm;version="[1.3,2)"
>
> will throw a ClassNotFoundException:
> Caused by: java.lang.ClassNotFoundException:  
> org.apache.derby.jdbc.ClientDataSource
>          at  
> org 
> .eclipse 
> .osgi 
> .internal.loader.BundleLoader.findClassInternal(BundleLoader.java: 
> 460)[osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi 
> .internal 
> .baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java: 
> 107)[osgi-3.6.2.R36x_v20110210.jar:]
>          at java.lang.ClassLoader.loadClass(ClassLoader.java:248)[: 
> 1.6.0_24]
>          at  
> org 
> .eclipse 
> .osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java: 
> 232)[osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .eclipse 
> .osgi 
> .framework 
> .internal.core.AbstractBundle.loadClass(AbstractBundle.java:1197) 
> [osgi-3.6.2.R36x_v20110210.jar:]
>          at  
> org 
> .apache 
> .aries 
> .blueprint 
> .container 
> .BlueprintContainerImpl.loadClass(BlueprintContainerImpl.java:384) 
> [10:org.apache.aries.blueprint:0.3.1]
>          at  
> org 
> .apache 
> .aries 
> .blueprint 
> .container.BlueprintRepository.loadClass(BlueprintRepository.java: 
> 381)[10:org.apache.aries.blueprint:0.3.1]
>          at  
> org 
> .apache.aries.blueprint.container.GenericType.parse(GenericType.java: 
> 113)[10:org.apache.aries.blueprint:0.3.1]
>          at  
> org 
> .apache 
> .aries.blueprint.di.AbstractRecipe.loadType(AbstractRecipe.java:110) 
> [10:org.apache.aries.blueprint:0.3.1]
>          ... 18 more
>
> If uninstall bundle 222, then, the app bundle will be installed  
> successful.
>
> How to process this kind of problem of package exported from multi  
> bundles within karaf?
>
> Thanks.
> Xilai

---------------------------------------------
Freeman Fang

FuseSource
Email:ffang@fusesource.com
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: http://weibo.com/u/1473905042