Quantcast

about Packages Exported by Multiple Bundles

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

about Packages Exported by Multiple Bundles

XiLai Dai

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

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: about Packages Exported by Multiple Bundles

Freeman-2
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
Twitter: freemanfang










Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

RE: about Packages Exported by Multiple Bundles

XiLai Dai

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:[hidden email]]
Sent: Thursday, April 05, 2012 4:51 PM
To: [hidden email]
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

Twitter: freemanfang

 

 

 

 

 

 

 

 

 

 

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: about Packages Exported by Multiple Bundles

Freeman-2
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 [[hidden email]] 
Sent: Thursday, April 05, 2012 4:51 PM
To: [hidden email]
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
Twitter: freemanfang
 
 
 
 
 
 
 
 
 
 

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

FuseSource
Twitter: freemanfang










Loading...