smallrye / smallrye-reactive-messaging

SmallRye Reactive Messaging
http://www.smallrye.io/smallrye-reactive-messaging/
Apache License 2.0
229 stars 174 forks source link

WELD-000119: Not generating any bean definitions from io.smallrye.reactive.messaging.providers.metrics.MicrometerDecorator #2354

Closed renatompf closed 7 months ago

renatompf commented 8 months ago

I'm building a small POC to understand how MicroPorfile Reactive Messaging works to have a clear view of the differences between this and Spring. I'm building my POC using Java17 and JakartaEE 10 that's running on Payara 6.

And when I start my application I have the following logs:

payara     | [#|2023-10-30T11:52:45.432+0000|INFO|Payara 6.2023.10|org.jboss.weld.Bootstrap|_ThreadID=112;_ThreadName=admin-thread-pool::admin-listener(1);_TimeMillis=1698666765432;_LevelValue=800;|
payara     |   WELD-000119: Not generating any bean definitions from io.smallrye.reactive.messaging.providers.metrics.MicrometerDecorator because of underlying class loading error: Type io.micrometer.core.instrument.Counter not found.  If this is unexpected, enable DEBUG logging to see the full error.|#]
payara     |
payara     | [#|2023-10-30T11:52:45.807+0000|SEVERE|Payara 6.2023.10|javax.enterprise.system.core|_ThreadID=112;_ThreadName=admin-thread-pool::admin-listener(1);_TimeMillis=1698666765807;_LevelValue=1000;_MessageID=NCLS-CORE-00026;|
payara     |   Exception during lifecycle processing
payara     | org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001334: Unsatisfied dependencies for type MediatorManager with qualifiers   -- WELD-001334: Unsatisfied dependencies for type MediatorManager with qualifiers
payara     |    at org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:38)
payara     |    at org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28)
payara     |    at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:501)
payara     |    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:94)
payara     |    at org.glassfish.weld.WeldDeployer.processApplicationLoaded(WeldDeployer.java:582)
payara     |    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:437)
payara     |    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
payara     |    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:344)
payara     |    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:580)
payara     |    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:570)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552)
payara     |    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
payara     |    at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574)
payara     |    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
payara     |    at java.base/javax.security.auth.Subject.doAs(Subject.java:376)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1879)
payara     |    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755)
payara     |    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:604)
payara     |    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:256)
payara     |    at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:150)
payara     |    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
payara     |    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
payara     |    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:174)
payara     |    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:153)
payara     |    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:196)
payara     |    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
payara     |    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
payara     |    at org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:193)
payara     |    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
payara     |    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
payara     |    at org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:193)
payara     |    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
payara     |    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
payara     |    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
payara     |    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510)
payara     |    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82)
payara     |    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83)
payara     |    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101)
payara     |    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535)
payara     |    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515)
payara     |    at java.base/java.lang.Thread.run(Thread.java:833)
payara     | |#]

And this is my config file and code:

microprofile-config.properties:

kafka.bootstrap.servers=kafka:9092

# Inbound
mp.messaging.incoming.data-input.connector=smallrye-kafka
mp.messaging.incoming.data-input.topic=kafka
mp.messaging.incoming.data-input.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
mp.messaging.incoming.data-input.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
mp.messaging.incoming.data-input.broadcast=true

# Outbound
mp.messaging.outgoing.data-output.connector=smallrye-kafka
mp.messaging.outgoing.data-output.topic=kafka
mp.messaging.outgoing.data-output.key.serializer=org.apache.kafka.common.serialization.StringSerializer
mp.messaging.outgoing.data-output.value.serializer=org.apache.kafka.common.serialization.StringSerializer

My Producer:

@ApplicationScoped
public class DataProducer {

    private static final Logger LOGGER = LoggerFactory.getLogger(DataProducer.class.getName());

    @Inject
    @Channel("data-output")
    Emitter<KafkaRecord<String, String>> sender;

    public void send(String message) {
        LOGGER.info("Sending message to kafka with the message: " + message);
        sender.send(KafkaRecord.of("kafka", "key" ,message));
    }

}

My Consumer:

@ApplicationScoped
public class DataConsumer {

    private static final Logger LOGGER = LoggerFactory.getLogger(DataConsumer.class.getName());

    @Incoming("data-input")
    public CompletionStage<Void> consume(KafkaRecord<String, String> message) {
        String payload = message.getPayload();
        String key = message.getKey();
        Integer partition = message.getPartition();
        Instant timestamp = message.getTimestamp();
        LOGGER.info("received: " + payload + " from topic " + message.getTopic());
        return message.ack();
    }

}

And the resource I'm using to send the messages:

@ApplicationScoped
@Path("/hello-world")
public class HelloResource {

    private static final Logger LOGGER = LoggerFactory.getLogger(HelloResource.class.getName());

    @Inject
    private DataProducer dataProducer;

    @GET
    @Produces("text/plain")
    public String hello() {
        LOGGER.info("sending request");
        dataProducer.send("Hello kafka");
        return "Hello, World!";
    }
}

My pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.examplegroupId>
    <artifactId>poc_kafka_payara</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>poc_kafka_payara</name>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.source>17</maven.compiler.source>
        <jakarta.jakartaee-api.version>10.0.0</jakarta.jakartaee-api.version>
        <hibernate-core.version>6.2.3.Final</hibernate-core.version>
        <jaxb-runtime.version>4.0.2</jaxb-runtime.version>
        <junit.version>5.9.2</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-api</artifactId>
            <version>${jakarta.jakartaee-api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate-core.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>${jaxb-runtime.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.smallrye.reactive</groupId>
            <artifactId>smallrye-reactive-messaging-kafka</artifactId>
            <version>4.10.1</version>
        </dependency>
        <dependency>
            <groupId>io.smallrye.reactive</groupId>
            <artifactId>smallrye-reactive-streams-operators</artifactId>
            <version>1.0.13</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
            </plugin>
        </plugins>
    </build>
</project>
cescoffier commented 8 months ago

I don't know Payara. Try adding the micrometer dependency.

renatompf commented 8 months ago

I already tried that but the problem remained.

ozangunalp commented 7 months ago

The log WELD-000119: Not generating any bean definitions from should not be a problem. It is just an INFO log to say that the bean won't be produced.

I am guessing you are missing some other dependency but CDI doesn't help you much to debug. Maybe you are missing a Microprofile Config implementation can you try adding a io.smallrye.config:smallrye-config dependency.