How to use grpc in karaf(osgi)?

892 views
Skip to first unread message

tian...@zte.com.cn

unread,
Jul 18, 2017, 4:37:13 AM7/18/17
to grpc.io
Hello everyone,
    I was trying to use grpc(1.4.0) in karaf(4.1.1), but failed.

    Following are my steps:

   1) wrote the grpc "HelloWorld" demo, and built it as an osgi bundle.
   2) wrote a feature.xml file which use to install dependencies, such as io.netty.*, io.grpc.*, and built the feature
   3) start karaf and install the feature

   main code of features.xml
<feature name="rgpc-demo-feature" description="grpc demo feature" version="${project.version}">
    <bundle>mvn:io.netty/netty-common/4.1.8.Final</bundle>
    <bundle>mvn:io.netty/netty-buffer/4.1.8.Final</bundle>
    <bundle>mvn:io.netty/netty-resolver/4.1.8.Final</bundle>
    <bundle>mvn:io.netty/netty-transport/4.1.8.Final</bundle>
    <bundle>mvn:io.netty/netty-codec/4.1.8.Final</bundle>
    <bundle>mvn:io.netty/netty-codec-http/4.1.8.Final</bundle>
    <bundle>mvn:io.netty/netty-handler/4.1.8.Final</bundle>
    <bundle>mvn:io.netty/netty-codec-http2/4.1.8.Final</bundle>

    <bundle>mvn:com.google.guava/guava/19.0</bundle>
    <bundle>mvn:com.google.protobuf/protobuf-java/3.3.0</bundle>

    <bundle>wrap:mvn:com.google.auth/google-auth-library-credentials/${google.auth.version}$Bundle-SymbolicName=com.google.auth.google-auth-library-credentials&amp;Bundle-Version=${google.auth.version}</bundle>
    <bundle>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${google.auth.version}$Bundle-SymbolicName=com.google.auth.google-auth-library-oauth2-http&amp;Bundle-Version=${google.auth.version}</bundle>

    <bundle>wrap:mvn:io.grpc/grpc-protobuf-lite/${grpc.version}$Bundle-SymbolicName=grpc-protobuf-lite&amp;Bundle-Version=${grpc.version}</bundle>
    <bundle>wrap:mvn:io.grpc/grpc-protobuf/${grpc.version}$Bundle-SymbolicName=grpc-protobuf&amp;Bundle-Version=${grpc.version}</bundle>
    <bundle>wrap:mvn:io.grpc/grpc-stub/${grpc.version}$Bundle-SymbolicName=grpc-stub&amp;Bundle-Version=${grpc.version}</bundle>
    <bundle>wrap:mvn:io.grpc/grpc-netty/${grpc.version}$Bundle-SymbolicName=grpc-netty&amp;Bundle-Version=${grpc.version}</bundle>
    <bundle>wrap:mvn:io.grpc/grpc-okhttp/${grpc.version}$Bundle-SymbolicName=grpc-okhttp&amp;Bundle-Version=${grpc.version}</bundle>
    <bundle>wrap:mvn:io.grpc/grpc-context/${grpc.version}$Bundle-SymbolicName=grpc-context&amp;Bundle-Version=${grpc.version}&amp;Export-Package=*;version=${grpc.version}</bundle>
    <bundle>wrap:mvn:io.grpc/grpc-auth/${grpc.version}$Bundle-SymbolicName=io.grpc.grpc-auth&amp;Bundle-Version=${grpc.version}&amp;Import-Package=javax.net.ssl,*</bundle>

    <bundle>mvn:com.google.code.findbugs/jsr305/3.0.2</bundle>
    <bundle>wrap:mvn:com.google.instrumentation/instrumentation-api/0.4.3$Bundle-SymbolicName=instrumentation-api&amp;Bundle-Version=0.4.3</bundle>

    <bundle>wrap:mvn:io.grpc/grpc-core/${grpc.version}$Bundle-SymbolicName=grpc-core&amp;Bundle-Version=${grpc.version}&amp;Import-Package=com.google.common.base,com.google.instrumentation.*&amp;Export-Package=*;version=${grpc.version},io.grpc.internal;version=${grpc.version}</bundle>

    <bundle>mvn:${project.groupId}/grpc-demo/${project.version}</bundle>
</feature>


Error:
java.lang.NoClassDefFoundError: io/grpc/Context
        at io.grpc.internal.AbstractServerImplBuilder.build(AbstractServerImplBuilder.java:193) ~[?:?]
        at com.zte.sdn.demo.grpc.HelloWorldServer.start(HelloWorldServer.java:48) ~[?:?]
        at com.zte.sdn.demo.grpc.HelloWorldServer.activate(HelloWorldServer.java:31) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]
        at org.apache.felix.scr.impl.inject.BaseMethod.invokeMethod(BaseMethod.java:224) ~[?:?]
        at org.apache.felix.scr.impl.inject.BaseMethod.access$500(BaseMethod.java:39) ~[?:?]
        at org.apache.felix.scr.impl.inject.BaseMethod$Resolved.invoke(BaseMethod.java:617) ~[?:?]
        at org.apache.felix.scr.impl.inject.BaseMethod.invoke(BaseMethod.java:501) ~[?:?]
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:302) ~[?:?]
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:294) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:298) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:109) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:906) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:879) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:749) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:675) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:430) ~[?:?]
        at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:657) ~[?:?]
        at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:341) ~[?:?]
        at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:390) ~[?:?]
        at org.apache.felix.scr.impl.Activator.access$200(Activator.java:54) ~[?:?]
        at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:265) ~[?:?]
        at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:254) ~[?:?]
        at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) ~[?:?]
        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:4562) ~[?:?]
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2172) ~[?:?]
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) ~[?:?]
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984) ~[?:?]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1281) ~[?:?]
        at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:890) ~[?:?]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1170) ~[?:?]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$0(FeaturesServiceImpl.java:1069) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:?]
        at java.lang.Thread.run(Thread.java:745) [?:?]
Caused by: java.lang.ClassNotFoundException: io.grpc.Context not found by grpc-core [65]
        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1550) ~[?:?]
        at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:79) ~[?:?]
        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1958) ~[?:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
        ... 46 more

   Can anyboby give me some suggestions? Thanks.

Carl Mastrangelo

unread,
Jul 20, 2017, 3:27:52 PM7/20/17
to grpc.io
Osgi has problems with gRPC because io.grpc.Context is not in the same package as the grpc-core.  (Other teams depend on just context, but not core, so they need to be in separate jars.)

Eric Anderson

unread,
Jul 20, 2017, 3:32:02 PM7/20/17
to Carl Mastrangelo, grpc.io
The open issue is https://github.com/grpc/grpc-java/issues/2727 . As I mention in the issue, we really don't have OSGi experience.

--
You received this message because you are subscribed to the Google Groups "grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email to grpc-io+unsubscribe@googlegroups.com.
To post to this group, send email to grp...@googlegroups.com.
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/62f2b176-da67-422e-8711-1635a7d405de%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages