मेरे पास चार बंडल हैं, जिनमें से प्रत्येक में केवल एक उपस्थिति है। बंडल हैं
app
जो आयात करता हैcom.example.foo.fragment
औरcom.example.bar
foo
जो निर्यात करता हैcom.example.foo;uses:=com.example.foo.cfg
foo.fragment
जोfoo
उस निर्यात से जुड़ा एक टुकड़ा हैcom.example.foo.fragment
औरcom.example.foo.fragment.cfg;uses:=com.example.foo.fragment
bar
जो निर्यातcom.example.bar
और आयात करता हैcom.example.foo
बंडल-स्तरीय निर्भरता ग्राफ :
app -> bar
| |
| v
| foo
| |
v v
foo.fragment
जब मैं इन बंडलों को JBoss 7.2 7.2 में एक बार स्थापित करता हूं, तो वे ठीक काम करते हैं। लेकिन अगर मैं app
बंडल को दूसरों के बाद , पहली बार या सफलतापूर्वक शुरू करने के बाद स्थापित करता हूं और फिर इसे अनइंस्टॉल कर रहा हूं , तो निम्न में से किसी का उल्लंघन होता है:
Caused by: org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource com.example.app [HostBundleRevision[com.example.app:0.0.
0]] because it is exposed to package 'com.example.foo.fragment' from resources com.example.foo [HostBundleRevision[com.example.foo:0.0.0]] and com.example.foo [HostBund
leRevision[com.example.foo:0.0.0]] via two dependency chains.
Chain 1:
com.example.app [HostBundleRevision[com.example.app:0.0.0]]
import: null
|
export: osgi.wiring.package=com.example.foo.fragment
com.example.foo [HostBundleRevision[com.example.foo:0.0.0]]
Chain 2:
com.example.app [HostBundleRevision[com.example.app:0.0.0]]
import: null
|
export: osgi.wiring.package=com.example.bar; uses:=com.example.foo
com.example.bar [HostBundleRevision[com.example.bar:0.0.0]]
import: null
|
export: osgi.wiring.package=com.example.foo; uses:=com.example.foo.fragment
export: osgi.wiring.package=com.example.foo.fragment
com.example.foo [HostBundleRevision[com.example.foo:0.0.0]]
at org.apache.felix.resolver.ResolverImpl.checkPackageSpaceConsistency(ResolverImpl.java:1142)
at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:197)
at org.jboss.osgi.resolver.felix.StatelessResolver.resolve(StatelessResolver.java:56)
at org.jboss.osgi.framework.internal.ResolverImpl.resolveAndApply(ResolverImpl.java:137)
at org.jboss.as.osgi.service.BundleLifecycleIntegration$BundleLifecycleImpl.activateDeferredPhase(BundleLifecycleIntegration.java:296)
... 31 more
पूर्ण अभिव्यक्तियाँ हैं:
app.jar/META-INF/MANIFEST.MF
----------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.app
Import-Package: com.example.foo.fragment,com.example.bar
----------------------------
foo.jar/META-INF/MANIFEST.MF
----------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.foo
Export-Package: com.example.foo;uses:="com.example.foo.cfg"
-------------------------------------
foo.fragment.jar/META-INF/MANIFEST.MF
-------------------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.foo.fragment
Fragment-Host: com.example.foo
Export-Package: com.example.foo.fragment,com.example.foo.cfg;uses:="co
m.example.foo.fragment"
----------------------------
bar.jar/META-INF/MANIFEST.MF
----------------------------
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.example.bar
Export-Package: com.example.bar;uses:="com.example.foo"
Import-Package: com.example.foo
मैं स्टैंडअलोन अपाचे फेलिक्स 4.2.1 में उपरोक्त त्रुटि को पुन: उत्पन्न करने में सक्षम नहीं हूं।
इस व्यवहार का कारण क्या है? यदि मैं मैनिफ़ेस्ट Fragment-Host: com.example.foo
से पंक्ति हटाता हूं foo.fragment
, तो मैं app
त्रुटियों के बिना ही ठीक कर सकता हूं । यह JBoss 7.2 के रूप में एक बग है?
org.hibernate.annotations
, और OSGi प्लेटफ़ॉर्म का निर्धारण होता है कि अगर OSGi प्लेटफ़ॉर्म मेरे अनुप्रयोग के बिना शुरू होता है, तो स्प्रिंग ORM बंडल की निर्भरता के रूप में। तब मैं अपने आवेदन को तैनात करता हूं, और ओएसजीआई इसे हल करने में विफल रहता है क्योंकि यह org.hibernate.annotations
स्प्रिंग ओआरएम बंडल के लिए हल किए गए बंडल के साथ संगत नहीं है। क्या वह ध्वनि संभव है?
org.hibernate.annotations
एक टुकड़ा है Fragment-Host: com.springsource.org.hibernate
।