>>>>> 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?

Reply via email to