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:[email protected]]
Sent: Thursday, April 05, 2012 4:51 PM
To: [email protected]
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:[email protected]
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:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: http://weibo.com/u/1473905042










Reply via email to