Uploaded image for project: 'odlguice'
  1. odlguice
  2. ODLGUICE-7

javax.inject exported twice by two different bundles

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: High High
    • Silicon
    • None
    • None

      Do we agree that a package should be exported only by a single bundle?

      On my local fluorine I see conflicts that I believe are related to infra-utils & aaa.

      nullop:/opt/sdn/controller/system$ cat ./org/opendaylight/aaa/odl-aaa-web/0.8.1/odl-aaa-web-0.8.1-features.xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-aaa-0.8.1">
          <repository>mvn:org.opendaylight.odlparent/odl-karaf-feat-jetty/3.1.4/xml/features</repository>
          <repository>mvn:org.opendaylight.odlparent/odl-guava-23/3.1.4/xml/features</repository>
          <repository>mvn:org.opendaylight.yangtools/odl-yangtools-util/2.0.12/xml/features</repository>
          <feature name="odl-aaa-web" description="ODL :: aaa :: odl-aaa-web" version="0.8.1">
              <details>OpenDaylight is leading the transformation to Open Software Defined Networking (SDN). For more information, please see https://www.opendaylight.org</details>
              <feature version="[3.1.0,4)" prerequisite="false" dependency="false">odl-karaf-feat-jetty</feature>
              <feature version="[3.1.0,4)" prerequisite="false" dependency="false">odl-guava-23</feature>
              <feature version="[2.0.10,3)" prerequisite="false" dependency="false">odl-yangtools-util</feature>
              <bundle>mvn:org.opendaylight.aaa.web/web-osgi-impl/0.8.1</bundle>
              <bundle>mvn:org.opendaylight.aaa.web/web-api/0.8.1</bundle>
              <bundle>mvn:javax.servlet/javax.servlet-api/3.1.0</bundle>
              <bundle>mvn:org.ops4j.pax.web/pax-web-api/6.0.9</bundle>
              <bundle>mvn:org.opendaylight.aaa.web/servlet-jersey2/0.8.1</bundle>
              <bundle>mvn:org.opendaylight.aaa.web/servlet-api/0.8.1</bundle>
              <bundle>mvn:javax.ws.rs/javax.ws.rs-api/2.0.1</bundle>
              <bundle>mvn:org.glassfish.jersey.containers/jersey-container-servlet/2.8</bundle>
              <bundle>mvn:org.glassfish.jersey.containers/jersey-container-servlet-core/2.25.1</bundle>
              <bundle>mvn:org.glassfish.jersey.core/jersey-common/2.25.1</bundle>
              <bundle>mvn:javax.annotation/javax.annotation-api/1.2</bundle>
              <bundle>mvn:org.glassfish.hk2/osgi-resource-locator/1.0.1</bundle>
              <bundle>mvn:org.glassfish.jersey.core/jersey-server/2.25.1</bundle>
              <bundle>mvn:org.glassfish.jersey.media/jersey-media-jaxb/2.25.1</bundle>
              <bundle>mvn:javax.validation/validation-api/1.1.0.Final</bundle>
              <bundle>mvn:org.glassfish.jersey.core/jersey-client/2.25.1</bundle>
              <bundle>mvn:org.glassfish.hk2/hk2-api/2.5.0-b32</bundle>
              <bundle>mvn:org.glassfish.hk2/hk2-utils/2.5.0-b32</bundle>
              <bundle>mvn:org.glassfish.hk2.external/aopalliance-repackaged/2.5.0-b32</bundle>
              <bundle>mvn:org.glassfish.hk2.external/javax.inject/2.5.0-b32</bundle>
              <bundle>mvn:org.glassfish.hk2/hk2-locator/2.5.0-b32</bundle>
              <bundle>mvn:org.javassist/javassist/3.23.1-GA</bundle>
              <bundle>mvn:org.glassfish.jersey.bundles.repackaged/jersey-guava/2.25.1</bundle>
          </feature>
      </features>
      nullop:/opt/sdn/controller/system$ cat ./org/opendaylight/infrautils/odl-infrautils-inject/1.4.1/odl-infrautils-inject-1.4.1-features.xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-infrautils-inject">
          <feature name="odl-infrautils-inject" description="OpenDaylight :: Infrautils :: @Inject" version="1.4.1">
              <details>OpenDaylight is leading the transformation to Open Software Defined Networking (SDN). For more information, please see https://www.opendaylight.org</details>
              <feature prerequisite="true" dependency="false">wrap</feature>
              <bundle>mvn:org.opendaylight.infrautils/inject/1.4.1</bundle>
              <bundle>wrap:mvn:javax.inject/javax.inject/1</bundle>
              <bundle>wrap:mvn:com.google.errorprone/error_prone_annotations/2.3.1</bundle>
          </feature>
      </features>
      
      

      The part that stands out to me is

              <bundle>wrap:mvn:javax.inject/javax.inject/1</bundle>
              <bundle>mvn:org.glassfish.hk2.external/javax.inject/2.5.0-b32</bundle>
      

      I see this when changing package exports and running bundles

      nullop@root>bundle:list | grep javax.inject
      276 | Active   |  80 | 2.5.0.b32                              | javax.inject:1 as OSGi bundle
      530 | Active   |  80 | 0                                      | wrap_file__opt_app_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar
      nullop@root>package:exports | grep javax.inject                            
      javax.inject                                                                                                                                                                                                                                                                        │ 0.0.0                                  │ 530 │ wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar
      javax.inject                                                                                                                                                                                                                                                                        │ 1.0.0                                  │ 276 │ org.glassfish.hk2.external.javax.inject
      
      

      If I check the headers I do see the package is being exported in each bundle

      nullop@root>bundle:headers 530wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar (530)
      ---------------------------------------------------------------------------------------------
      Bnd-LastModified = 1568232244101
      Created-By = 1.8.0_162 (Oracle Corporation)
      Generated-By-Ops4j-Pax-From = wrap:file:/sdncopt/sdn/controller/system/javax/inject/javax.inject/1/javax.inject-1.jar
      Manifest-Version = 1.0
      Tool = Bnd-2.3.0.201405100607Bundle-ManifestVersion = 2
      Bundle-Name = wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar
      Bundle-SymbolicName = wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar
      Bundle-Version = 0Require-Capability = 
      	osgi.ee;filter:=(&(osgi.ee=JavaSE)(version=1.5))Export-Package = 
      	javax.inject
      nullop@root>bundle:headers 276javax.inject:1 as OSGi bundle (276)
      -----------------------------------
      Archiver-Version = Plexus Archiver
      Bnd-LastModified = 1484762462222
      Build-Jdk = 1.7.0_79
      Built-By = java_re
      Created-By = Apache Maven Bundle Plugin
      Implementation-Version = 1
      Manifest-Version = 1.0
      Tool = Bnd-2.1.0.20130426-122213Bundle-Description = Injection API (JSR 330) version ${javax.inject.version} repackaged as OSGi bundle
      Bundle-DocURL = http://www.oracle.com
      Bundle-License = https://glassfish.java.net/nonav/public/CDDL+GPL_1_1.html
      Bundle-ManifestVersion = 2
      Bundle-Name = javax.inject:1 as OSGi bundle
      Bundle-SymbolicName = org.glassfish.hk2.external.javax.inject
      Bundle-Vendor = Oracle Corporation
      Bundle-Version = 2.5.0.b32Export-Package = 
      	javax.inject;version=1
      

      If I turn the logs up I was seeing this make a package loop for about 20 minutes with this message

      Chain 1:
        wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar [wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar/0.0.0]
          import: (osgi.wiring.package=javax.inject)
           |
          export: osgi.wiring.package: javax.inject
        wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar [wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar/0.0.0]Chain 2:
        wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar [wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar/0.0.0]
          import: (osgi.wiring.package=org.glassfish.jersey.internal.l10n)
           |
          export: osgi.wiring.package=org.glassfish.jersey.internal.l10n; uses:=javax.inject
        org.glassfish.jersey.core.jersey-common [org.glassfish.jersey.core.jersey-common/2.25.1]
          import: (&(osgi.wiring.package=javax.inject)(version>=1.0.0)(!(version>=2.0.0)))
           |
          export: osgi.wiring.package: javax.inject
        org.glassfish.hk2.external.javax.inject [org.glassfish.hk2.external.javax.inject/2.5.0.b32])
      2019-09-10T17:38:06,336 | DEBUG | features-1-thread-1 | ResolverImpl                     | 8 - org.apache.karaf.features.core - 4.1.6 |  -   | Candidate permutation failed due to a conflict between imports; will try another if possible. (Uses constraint violation. Unable to resolve resource wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar [wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar/0.0.0] because it is exposed to package 'javax.inject' from resources wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar [wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar/0.0.0] and org.glassfish.hk2.external.javax.inject [org.glassfish.hk2.external.javax.inject/2.5.0.b32] via two dependency chains.Chain 1:
        wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar [wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar/0.0.0]
          import: (osgi.wiring.package=javax.inject)
           |
          export: osgi.wiring.package: javax.inject
        wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar [wrap_file__sdncopt_sdn_controller_system_javax_inject_javax.inject_1_javax.inject-1.jar/0.0.0]Chain 2:
        wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar [wrap_file__sdncopt_sdn_controller_system_org_glassfish_jersey_security_oauth1-signature_2.25.1_oauth1-signature-2.25.1.jar/0.0.0]
          import: (osgi.wiring.package=org.glassfish.jersey.internal.l10n)
           |
          export: osgi.wiring.package=org.glassfish.jersey.internal.l10n; uses:=org.glassfish.hk2.api
        org.glassfish.jersey.core.jersey-common [org.glassfish.jersey.core.jersey-common/2.25.1]
          import: (&(osgi.wiring.package=org.glassfish.hk2.api)(version>=2.5.0)(!(version>=3.0.0)))
           |
          export: osgi.wiring.package=org.glassfish.hk2.api; uses:=javax.inject
        org.glassfish.hk2.api [org.glassfish.hk2.api/2.5.0.b32]
          import: (osgi.wiring.package=javax.inject)
           |
          export: osgi.wiring.package: javax.inject
        org.glassfish.hk2.external.javax.inject [org.glassfish.hk2.external.javax.inject/2.5.0.b32])
      2019-09-10T17:38:06,481 | DEBUG | features-1-thread-1 | ResolverImpl                     | 8 - org.apache.karaf.features.core - 4.1.6 |  -   | Candidate permutation failed due to a conflict between imports; will try another if possible. (Uses constraint violation. Unable to resolve resource org.glassfish.jersey.core.jersey-client [org.glassfish.jersey.core.jersey-client/2.25.1] because it is exposed to package 'javax.inject' from resources org.glassfish.hk2.external.javax.inject [org.glassfish.hk2.external.javax.inject/2.5.0.b32] and org.glassfish.hk2.external.javax.inject [org.glassfish.hk2.external.javax.inject/2.5.0.b32] via two dependency chains.
      

            tnevrekar Tejas Nevrekar
            nullop Kevin Smokowski
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: