>>>>> Steinar Bang <s...@dod.no>: > Maybe I would be better off trying to inject the SystemService? (if that > does what I need to do? Yep, it appears to have the same methods, more > or less... [1])
Using SystemService was successful. Now I get the service injection. The next problem is problem resolving a type from a wrapped jar file when activating the component: 2018-09-09T16:36:41,324 | ERROR | Thread-97 | karaf | 56 - no.priv.bang.neo4j.karaf - 1.0.0.SNAPSHOT | BundleComponentActivator : Bundle [56] Unexpected failure enabling component holder no.priv.bang.neo4j.karaf.Neo4jServer java.lang.NoClassDefFoundError: org/neo4j/graphdb/ResourceIterable at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:?] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:?] at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[?:?] at org.apache.felix.scr.impl.inject.BindMethod.getServiceObjectAssignableMethod(BindMethod.java:459) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BindMethod.doFindMethod(BindMethod.java:188) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod.findMethod(BaseMethod.java:175) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod.access$400(BaseMethod.java:39) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod$NotResolved.resolve(BaseMethod.java:593) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod$NotResolved.methodExists(BaseMethod.java:615) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BaseMethod.methodExists(BaseMethod.java:520) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.inject.BindMethod.getServiceObject(BindMethod.java:648) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2201) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1118) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1520) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1006) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:859) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:749) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:675) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:430) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:657) ~[60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:341) [60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:390) [60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.Activator.access$200(Activator.java:54) [60:org.apache.felix.scr:2.0.12] at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:265) [60:org.apache.felix.scr:2.0.12] at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:254) [60:org.apache.felix.scr:2.0.12] at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [60:org.apache.felix.scr:2.0.12] at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482) [?:?] at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415) [?:?] at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [?:?] at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) [?:?] at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) [?:?] at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [?:?] at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [?:?] at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579) [?:?] at org.apache.felix.framework.Felix.startBundle(Felix.java:2174) [?:?] at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) [?:?] at org.apache.karaf.bundle.core.internal.BundleWatcherImpl.run(BundleWatcherImpl.java:125) [22:org.apache.karaf.bundle.core:4.1.5] at java.lang.Thread.run(Thread.java:748) [?:?] Caused by: java.lang.ClassNotFoundException: org.neo4j.graphdb.ResourceIterable not found by wrap_file__home_sb_.m2_repository_org_neo4j_neo4j-graphdb-api_3.4.7_neo4j-graphdb-api-3.4.7.jar [108] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1639) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) ~[?:?] at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1414) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1660) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1590) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) ~[?:?] at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?] ... 38 more org.neo4j.graphdb.ResourceIterable is in mvn:org.neo4j/neo4j-resource/3.4.7 which is a transitive dependency of mvn:org.neo4j/neo4j-graphdb-api/3.4.7: mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building neo4j karaf feature 1.0.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ neo4j.karaf --- [INFO] no.priv.bang.neo4j.karaf:neo4j.karaf:bundle:1.0.0-SNAPSHOT [INFO] +- org.neo4j:neo4j:jar:3.4.7:compile [INFO] | +- org.neo4j:neo4j-kernel:jar:3.4.7:compile [INFO] | | +- org.neo4j:neo4j-graphdb-api:jar:3.4.7:compile [INFO] | | | \- org.neo4j:neo4j-resource:jar:3.4.7:compile ... Both jar files ends up as wrap'd jar files in the feature: <feature name="neo4j-server" description="neo4j karaf feature" version="1.0.0.SNAPSHOT"> <details>An apache karaf feature to load Neo4J into karaf and a bundle with a DS component to receive Neo4J config from karaf and start a Neo4J server inside karaf</details> <feature prerequisite="false" dependency="false">scr</feature> <feature prerequisite="true" dependency="false">wrap</feature> <bundle start-level="80">mvn:no.priv.bang.neo4j.karaf/neo4j.karaf/1.0.0-SNAPSHOT</bundle> <bundle start-level="80">wrap:mvn:org.neo4j/neo4j/3.4.7</bundle> <bundle start-level="80">wrap:mvn:org.neo4j/neo4j-kernel/3.4.7</bundle> <bundle start-level="80">wrap:mvn:org.neo4j/neo4j-graphdb-api/3.4.7</bundle> <bundle start-level="80">wrap:mvn:org.neo4j/neo4j-resource/3.4.7</bundle> <bundle start-level="80">wrap:mvn:org.neo4j/neo4j-procedure-api/3.4.7</bundle> ... My bundle imports the package org.neo4j.graphdb (without a version number): Import-Package: org.apache.karaf.system.management;version="[4.1,5)",o rg.neo4j.graphdb,org.neo4j.graphdb.event,org.neo4j.graphdb.factory,or g.neo4j.graphdb.index,org.neo4j.graphdb.schema,org.neo4j.graphdb.trav ersal,org.osgi.service.log;version="[1.3,2)" The wrapped jar exports the package org.neo4j.graphdb but have no users of that package: karaf@root()> bundle:list | grep resource 120 │ Active │ 80 │ 0 │ wrap_file__home_sb_.m2_repository_org_neo4j_neo4j-resource_3.4.7_neo4j-resource-3.4.7.jar karaf@root()> bundle:capabilities 120 wrap_file__home_sb_.m2_repository_org_neo4j_neo4j-resource_3.4.7_neo4j-resource-3.4.7.jar [120] provides: --------------------------------------------------------------------------------------------------------- osgi.wiring.bundle; wrap_file__home_sb_.m2_repository_org_neo4j_neo4j-resource_3.4.7_neo4j-resource-3.4.7.jar 0.0.0 [UNUSED] osgi.wiring.host; wrap_file__home_sb_.m2_repository_org_neo4j_neo4j-resource_3.4.7_neo4j-resource-3.4.7.jar 0.0.0 [UNUSED] osgi.identity; wrap_file__home_sb_.m2_repository_org_neo4j_neo4j-resource_3.4.7_neo4j-resource-3.4.7.jar 0.0.0 [UNUSED] osgi.wiring.package; org.neo4j.graphdb 0.0.0 [UNUSED] karaf@root()> Do I need to statically reference something in the org.neo4j.graphdb package, to get things to work?