Search code examples
mavenapache-kafkakeycloak

Keycloak Kafka - issue with Producer


I'm trying to implement Custom Event Listener in keycloak, I've managed to get the events that I was looking for and everything, but implementing Kafka is not going so well. Just a heads up, I'm not the best at Java, so some concepts I might not know.

I've added to my pom.xml

<dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>3.7.0</version>
    </dependency>

The maven recognized it, it's listed under the dependencies maven dependencies

I've created a Producer class that I want to use on specific event: Producer class

Use of producer class

When I drop the .jar file that I created while running 'mvn clean install' in Keycloaks event setting I get the:

KC-SERVICES0085: Failed to send type to it.aboutbits.CustomEventListenerProvider@3d0db5a6: java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/KafkaProducer at it.aboutbits.Producer.publishEventToTopic(Producer.java:33) at it.aboutbits.CustomEventListenerProvider.onEvent(CustomEventListenerProvider.java:40) at org.keycloak.services.resources.admin.AdminEventBuilder.send(AdminEventBuilder.java:291) at org.keycloak.services.resources.admin.AdminEventBuilder.success(AdminEventBuilder.java:273) at org.keycloak.services.resources.admin.UserResource.deleteUser(UserResource.java:629) at org.keycloak.services.resources.admin.UserResource$quarkusrestinvoker$deleteUser_1ab1e247046f32b48fb55de7f71f5540f6c8ea14.invoke(Unknown Source) at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29) at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141) at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147) at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:582) at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538) at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29) at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:1570) Caused by: java.lang.ClassNotFoundException: org.apache.kafka.clients.producer.KafkaProducer at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) at io.quarkus.bootstrap.runner.RunnerClassLoader.loadClass(RunnerClassLoader.java:115) at io.quarkus.bootstrap.runner.RunnerClassLoader.loadClass(RunnerClassLoader.java:65) ... 16 more

I've tried Googling this error quite a bit, but I haven't found anything...

I've modified this repo


Solution

  • The issue is resolved by implementing a 'fat' jar. I've compiled a jar file that has all dependencies in it, and it works.