You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Robert Lowe (JIRA)" <ji...@apache.org> on 2016/02/15 15:45:18 UTC

[jira] [Comment Edited] (KAFKA-3218) Kafka-0.9.0.0 does not work as OSGi module

    [ https://issues.apache.org/jira/browse/KAFKA-3218?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15147425#comment-15147425 ] 

Robert Lowe edited comment on KAFKA-3218 at 2/15/16 2:45 PM:
-------------------------------------------------------------

Suggested workaround throws error on bundle:start
{code}
org.apache.karaf.shell.support.MultiException: Error executing command on bundles:
        Error starting bundle66: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [66].
        at org.apache.karaf.shell.support.MultiException.throwIf(MultiException.java:61)
        at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:69)
        at org.apache.karaf.bundle.command.BundlesCommand.execute(BundlesCommand.java:54)
        at org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83)
        at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67)
        at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87)
        at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
        at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
        at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
        at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
        at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:270)
        at java.lang.Thread.run(Thread.java:745)
        Suppressed: java.lang.Exception: Error starting bundle66: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [66].
                at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:66)
                ... 12 more
        Caused by: org.osgi.framework.BundleException: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [66].
                at org.apache.felix.framework.Felix.activateBundle(Felix.java:2270)
                at org.apache.felix.framework.Felix.startBundle(Felix.java:2138)
                at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:977)
                at org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)
                at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:64)
                ... 12 more
        Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.kafka.clients.producer.ProducerConfig
                at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:156)
                at com.openet.testcase.Activator.start(Activator.java:18)
                at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
                at org.apache.felix.framework.Felix.activateBundle(Felix.java:2220)
                ... 16 more

{code}


was (Author: lowerobert):
Suggested fix throws error on bundle:start
{code}
org.apache.karaf.shell.support.MultiException: Error executing command on bundles:
        Error starting bundle66: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [66].
        at org.apache.karaf.shell.support.MultiException.throwIf(MultiException.java:61)
        at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:69)
        at org.apache.karaf.bundle.command.BundlesCommand.execute(BundlesCommand.java:54)
        at org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83)
        at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67)
        at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87)
        at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
        at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
        at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
        at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
        at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:270)
        at java.lang.Thread.run(Thread.java:745)
        Suppressed: java.lang.Exception: Error starting bundle66: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [66].
                at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:66)
                ... 12 more
        Caused by: org.osgi.framework.BundleException: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [66].
                at org.apache.felix.framework.Felix.activateBundle(Felix.java:2270)
                at org.apache.felix.framework.Felix.startBundle(Felix.java:2138)
                at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:977)
                at org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)
                at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:64)
                ... 12 more
        Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.kafka.clients.producer.ProducerConfig
                at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:156)
                at com.openet.testcase.Activator.start(Activator.java:18)
                at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
                at org.apache.felix.framework.Felix.activateBundle(Felix.java:2220)
                ... 16 more

{code}

> Kafka-0.9.0.0 does not work as OSGi module
> ------------------------------------------
>
>                 Key: KAFKA-3218
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3218
>             Project: Kafka
>          Issue Type: Bug
>          Components: clients
>    Affects Versions: 0.9.0.0
>         Environment: Apache Felix OSGi container
> jdk_1.8.0_60
>            Reporter: Joe O'Connor
>            Assignee: Rajini Sivaram
>         Attachments: ContextClassLoaderBug.tar.gz
>
>
> KAFKA-2295 changed all Class.forName() calls to use currentThread().getContextClassLoader() instead of the default "classloader that loaded the current class". 
> OSGi loads each module's classes using a separate classloader so this is now broken.
> Steps to reproduce: 
> # install the kafka-clients servicemix OSGi module 0.9.0.0_1
> # attempt to initialize the Kafka producer client from Java code 
> Expected results: 
> - call to "new KafkaProducer()" succeeds
> Actual results: 
> - "new KafkaProducer()" throws ConfigException:
> {quote}        Suppressed: java.lang.Exception: Error starting bundle54: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [54].
>                 at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:66)
>                 ... 12 more
>         Caused by: org.osgi.framework.BundleException: Activator start error in bundle com.openet.testcase.ContextClassLoaderBug [54].
>                 at org.apache.felix.framework.Felix.activateBundle(Felix.java:2276)
>                 at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)
>                 at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
>                 at org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)
>                 at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:64)
>                 ... 12 more
>         Caused by: java.lang.ExceptionInInitializerError
>                 at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:156)
>                 at com.openet.testcase.Activator.start(Activator.java:16)
>                 at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
>                 at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)
>                 ... 16 more
>         *Caused by: org.apache.kafka.common.config.ConfigException: Invalid value org.apache.kafka.clients.producer.internals.DefaultPartitioner for configuration partitioner.class: Class* *org.apache.kafka.clients.producer.internals.DefaultPartitioner could not be found.*
>                 at org.apache.kafka.common.config.ConfigDef.parseType(ConfigDef.java:255)
>                 at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:78)
>                 at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:94)
>                 at org.apache.kafka.clients.producer.ProducerConfig.<clinit>(ProducerConfig.java:206)
> {quote}
> Workaround is to call "currentThread().setContextClassLoader(null)" before initializing the kafka producer.
> Possible fix is to catch ClassNotFoundException at ConfigDef.java:247 and retry the Class.forName() call with the default classloader. However with this fix there is still a problem at AbstractConfig.java:206,  where the newInstance() call succeeds but "instanceof" is false because the classes were loaded by different classloaders.
> Testcase attached, see README.txt for instructions.
> See also SM-2743



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)