it-swarm.com.de

Warum werden Nutzungsbeschränkungen verletzt, wenn beide Ketten im selben Bündel enden?

Ich habe vier Bündel, die jeweils nur ein Manifest enthalten. Die Bundles sind

  • app das importiert com.example.foo.fragment und com.example.bar
  • foo der exportiert com.example.foo;uses:=com.example.foo.cfg
  • foo.fragment Ist ein Fragment, das an foo angehängt ist und com.example.foo.fragment Und com.example.foo.fragment.cfg;uses:=com.example.foo.fragment Exportiert.
  • bar exportiert com.example.bar und importiert com.example.foo

Abhängigkeitsdiagramm auf Bundle-Ebene:

app -> bar
|       |
|       v
|      foo
|       |
v       v
foo.fragment

Wenn ich diese Bundles auf einmal in JBoss AS 7.2 installiere, funktionieren sie einwandfrei. Aber wenn ich das app-Bundle nach den anderen installiere, entweder zum ersten Mal oder nach dem erfolgreichen Starten und anschließenden Deinstallieren, ist das Folgende Verwendungsbedingungsverletzung tritt auf:

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

Die vollständigen Manifestationen sind:

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

Ich konnte den obigen Fehler in Apache Felix 4.2.1 nicht reproduzieren.

Was ist die Ursache für dieses Verhalten? Wenn ich die Zeile Fragment-Host: com.example.foo Aus dem Manifest foo.fragment Lösche, kann ich app problemlos neu installieren. Ist das ein Fehler in JBoss AS 7.2?

151
Emil Lundberg

Sie müssen foo.fragment nicht in die App importieren, damit Ihre Abhängigkeit von foo aufgelöst wird. Entfernen Sie einfach diese Abhängigkeit und stellen Sie sie erneut bereit. Dieses Problem ist auf die zyklische Abhängigkeit zurückzuführen.

1
user3555572