quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.7k stars 2.66k forks source link

camel-quarkus-spring-redis doesn't autowire RedisTemplate so it cannot be used for e.g. RedisIdempotentRepository #39883

Closed JesperBerggren closed 6 months ago

JesperBerggren commented 6 months ago

Describe the bug

The extension camel-quarkus-spring-redis doesn't seem to autowire RedisTemplate which is needed for RedisIdempotentRepository.

I've got this dependency:

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-spring-redis</artifactId>
</dependency>

And in my code I have something like this:

@ApplicationScoped
public class CommonRoutes extends RouteBuilder {

    public static final int SUCCESS = 100;
    public static final int ERROR = 200;
    public static final int EXHAUSTED = 300;

    @ConfigProperty(name = "url")
    private String url;
    @ConfigProperty(name = "max.retry.count")
    private String maxRetryCnt;
    @ConfigProperty(name = "ordning")
    private String ordning;

    @Inject
    private CamelContext context;
    @Inject
    private RedisTemplate redisTemplate;

    @Override
    public void configure() throws Exception {

        // Redis idempotent repository
        RedisIdempotentRepository redisIdempotentRepository = new RedisIdempotentRepository(redisTemplate, "NGDP.KvitteringOpsamler");
        context.getRegistry().bind("redisIdempotentRepo", redisIdempotentRepository);
...

But when I run my code I get these exceptions:

java.lang.RuntimeException: 
java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: Found 4 deployment problems: 
[1] Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.FileRouter#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, org.apache.camel.spi.ResourceAware, org.apache.camel.spi.HasCamelContext, dk.atp.integration.dp.kvitteringopsamler.FileRouter, org.apache.camel.RoutesBuilder, java.lang.Object, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.FileRouter]
[2] Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.MailRouter#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, org.apache.camel.spi.ResourceAware, dk.atp.integration.dp.kvitteringopsamler.MailRouter, org.apache.camel.spi.HasCamelContext, org.apache.camel.RoutesBuilder, java.lang.Object, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.MailRouter]
[3] Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.CommonRoutes#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, org.apache.camel.spi.ResourceAware, org.apache.camel.spi.HasCamelContext, org.apache.camel.RoutesBuilder, java.lang.Object, dk.atp.integration.dp.kvitteringopsamler.CommonRoutes, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.CommonRoutes]
[4] Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.DatabaseRouter#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, dk.atp.integration.dp.kvitteringopsamler.DatabaseRouter, org.apache.camel.spi.ResourceAware, org.apache.camel.spi.HasCamelContext, org.apache.camel.RoutesBuilder, java.lang.Object, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.DatabaseRouter]
    at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1516)
    at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:320)
    at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:160)
    at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
    at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
    at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
    at java.base/java.lang.Thread.run(Thread.java:833)
    at org.jboss.threads.JBossThread.run(JBossThread.java:483)
    Suppressed: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.FileRouter#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, org.apache.camel.spi.ResourceAware, org.apache.camel.spi.HasCamelContext, dk.atp.integration.dp.kvitteringopsamler.FileRouter, org.apache.camel.RoutesBuilder, java.lang.Object, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.FileRouter]
        at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:519)
        at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:638)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:308)
        ... 14 more
    Suppressed: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.MailRouter#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, org.apache.camel.spi.ResourceAware, dk.atp.integration.dp.kvitteringopsamler.MailRouter, org.apache.camel.spi.HasCamelContext, org.apache.camel.RoutesBuilder, java.lang.Object, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.MailRouter]
        at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:519)
        at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:638)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:308)
        ... 14 more
    Suppressed: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.CommonRoutes#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, org.apache.camel.spi.ResourceAware, org.apache.camel.spi.HasCamelContext, org.apache.camel.RoutesBuilder, java.lang.Object, dk.atp.integration.dp.kvitteringopsamler.CommonRoutes, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.CommonRoutes]
        at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:519)
        at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:638)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:308)
        ... 14 more
    Suppressed: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.springframework.data.redis.core.RedisTemplate and qualifiers [@Default]
    - injection target: dk.atp.integration.dp.kvitteringopsamler.DatabaseRouter#redisTemplate
    - declared on CLASS bean [types=[org.apache.camel.builder.BuilderSupport, org.apache.camel.Ordered, org.apache.camel.CamelContextAware, dk.atp.integration.dp.kvitteringopsamler.DatabaseRouter, org.apache.camel.spi.ResourceAware, org.apache.camel.spi.HasCamelContext, org.apache.camel.RoutesBuilder, java.lang.Object, org.apache.camel.builder.ModelRoutesBuilder, org.apache.camel.builder.RouteBuilder], qualifiers=[@Default, @Any], target=dk.atp.integration.dp.kvitteringopsamler.DatabaseRouter]
        at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:519)
        at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:638)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:308)
        ... 14 more

Expected behavior

I expect the RedisTemplate to be autowired so the code works.

Actual behavior

It's not being autowired and throws the exceptions as described above.

How to Reproduce?

Make any simple application with a camel route and inject the RedisTemplate.

Output of uname -a or ver

No response

Output of java -version

openjdk version "17.0.5" 2022-10-18

Quarkus version or git rev

3.9.1

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.8.5

Additional information

No response

quarkus-bot[bot] commented 6 months ago

/cc @Ladicek (redis), @cescoffier (redis), @geoand (spring), @machi1990 (redis)

JesperBerggren commented 6 months ago

Perhaps this issue should be submitted in apache/camel-quarkus instead?

geoand commented 6 months ago

Yes, please do