>>>>> Steinar Bang <[email protected]>:
> 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?