Giter Club home page Giter Club logo

micronaut-spring's Introduction

Micronaut for Spring

Maven Central Build Status Revved up by Develocity

Micronaut uses Ahead of Time (AOT) compilation to pre-compute your applications requirements at compile time. The result of this is significantly lower memory requirements, faster startup time, and reflection free framework infrastructure.

This project consists of various components that make it easier to:

  • Integrate Spring components into a Micronaut application
  • Run Spring applications as Micronaut applications
  • Expose Micronaut Beans to a Spring Application

To achieve this the project provides the ability to use a subset of the Spring Annotation-Based programming model to build Micronaut applications. The goal is not necessarily to provide an alternative runtime for Spring, but instead to enable the ability to build libraries that work with both Spring and Micronaut.

See the User Guide and Example Project for more information on how to use this project.

Snapshots and Releases

Snaphots are automatically published to JFrog OSS using Github Actions.

See the documentation in the Micronaut Docs for how to configure your build to use snapshots.

Releases are published to JCenter and Maven Central via Github Actions.

A release is performed with the following steps:

micronaut-spring's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

micronaut-spring's Issues

Facing issue for decryption of environment variables using AWS KMS

I have a SpringBoot application which I am migrating to Micronaut. This application reads the environment variables on AWS Lambda and the variables are encrypted using KMS. I used the SpringBootServletInitializer to get the variables from KMS and decrypt it before the data source formation. The same is not working in Micronaut. Could you help me proceed.

No embedded container found. Running as CLI application

Hi,

I have tried to convert my Spring Boot application in Kotlin to use Micronaut:

        @JvmStatic
        fun main(args: Array<String>) {
            logger.trace("(args:{})", args)

            //SpringApplication.run(DashboardApplication::class.java, *args)
            try {
                Micronaut.run(DashboardApplication::class.java, *args)
            } catch (t: Throwable) {
                t.printStackTrace()
            }

            println("finished")

            logger.trace("(-)")
        }

However, I get the following output:

[main] INFO io.micronaut.runtime.Micronaut - No embedded container found. Running as CLI application
finished

The error means that @SpringBootApplication was not found, right? So the issue is possibly in my build.gradle file.

Best regards,
Martin

MicronautEnvironment.getConversionService() always returns null

While looking through the code I just noticed that the method MicronautEnvironment.getConversionService() always returns null although there is an instance variable of type ConfigurableConversionServiceand the only usage of it in the setter (but not the getter). I'm not using this project currently so I cannot say if this leads to problems but it looks like an omission.

“More than 1 route matched the incoming request” when run native-image version of examples/greeting-service

Getting erroneous respond from the native compiled examples/greeting-service application.

$curl http://localhost:8080/greeting
{"message":"More than 1 route matched the incoming request. The following routes matched /greeting: GET - /greeting, GET - /greeting","_links":{"self":{"href":"/greeting","templated":false}}}

How to reproduce:

  1. On branch origin/graal-native-image, apply this patch
    0001-native-image-ready.txt
    which adding necessary configurations so the examples/greeting-service can be compiled by GraalVM 19.3.0.2 and run successfully.
  2. run svm.sh to compile greeting-service into native-image. $native_image in the shell file should be set to your own GraalVM/bin/native-image.
  3. start ./greeting-service
  4. curl http://localhost:8080/greeting

This error does not happen in the Java Hotspot version, only in native compiled version.

Publish new build for 3.1.x line (probably 3.1.1)

Please consider publishing new release on top of current 3.1.0 with this fix dbf8b28

Before it was possible to use snapshot builds, but it seems that they are not available now in jfrog oss (at least with default config, which worked before with gradle 6.9).

NPE in MicronautBeanFactory.getBeanDefinition

Task List

  • Steps to reproduce provided
  • Stacktrace (if present) provided (link to the problematic code line provided)
  • Example that reproduces the problem uploaded to Github
  • Full description of the issue provided (see below)

https://github.com/micronaut-projects/micronaut-spring/blob/master/spring-context/src/main/java/io/micronaut/spring/context/factory/MicronautBeanFactory.java#L669

This should have null check

        if (definition != null && definition.isEnabled(beanContext)) {

Here are the implementation details from cxf library, where it expects to get specific checked exception and doesn't handle other exceptions https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/configuration/spring/ConfigurerImpl.java#L177

If I build SNAPSHOT with mentioned changes and use it instead, everything works as expected, but would be nice to have it backported at least for 3.0.X releases.

Steps to Reproduce

  1. Grails applications (starting from 4.1.0.M3) with grails-cxf plugin will fail to start, because of the unhandled exception during startup.

Expected Behaviour

NoSuchBeanDefinitionException should be thrown (checked exceptions).

Actual Behaviour

NPE is thrown.

Environment Information

  • Operating System: MacOS 11.1
  • Micronaut Version: 3.0 (spring-context)
  • JDK Version: adopopenjdk hs 11.0.9

Example Application

Any Grails application with grails-cxf plugin

MicronautBeanFactory can throw StackOverflowError on startup

Using Grails 4.0.0.M1, a scenario exists where the bean factory can throw a StackOverflowError. I'm not sure the exact cause, but it's easy to reproduce via Grails 4 by just changing the config option for:

spring:
    jmx:
        unique-names: true -> false

And including a library that has an MBean present.

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.amqp.rabbit.core.RabbitAdmin@2c832f63] with key 'amqpAdmin'; nested exception is java.lang.StackOverflowError
        at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:625)
        at org.springframework.jmx.export.MBeanExporter.lambda$registerBeans$2(MBeanExporter.java:551)
        at java.util.HashMap.forEach(HashMap.java:1289)
        at org.springframework.jmx.export.MBeanExporter.registerBeans(MBeanExporter.java:551)
        at org.springframework.jmx.export.MBeanExporter.afterSingletonsInstantiated(MBeanExporter.java:434)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:866)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:95)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:447)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:434)
        at contextoverflow.Application.main(Application.groovy:11)
        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.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.StackOverflowError: null
        at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
        at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:964)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.containsSingleton(DefaultSingletonBeanRegistry.java:285)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getSingleton(MicronautBeanFactory.java:648)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:611)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.access$101(MicronautBeanFactory.java:51)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getType(MicronautBeanFactory.java:366)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getBean(MicronautBeanFactory.java:152)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getSingleton(MicronautBeanFactory.java:651)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:611)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.access$101(MicronautBeanFactory.java:51)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getType(MicronautBeanFactory.java:366)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getBean(MicronautBeanFactory.java:152)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getSingleton(MicronautBeanFactory.java:651)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:611)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.access$101(MicronautBeanFactory.java:51)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getType(MicronautBeanFactory.java:366)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getBean(MicronautBeanFactory.java:152)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getSingleton(MicronautBeanFactory.java:651)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:611)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.access$101(MicronautBeanFactory.java:51)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getType(MicronautBeanFactory.java:366)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getBean(MicronautBeanFactory.java:152)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.getSingleton(MicronautBeanFactory.java:651)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:611)

Sample Grails 4 application (sorry, no Micronaut example):
https://github.com/longwa/grails4-contextOverflow

Perhaps, in this case, the unique-names is needed, but it still seems like the framework should provide a better error message. The StackOverflow is difficult to debug and non intuitive what is going on.

Why is @Transactional deprecated?

* @deprecated Use Spring's {@link org.springframework.transaction.annotation.Transactional} directly or switch to Micronaut Data's {@code TransactionalAdvice}

The proposed replacement (Spring's transactional annotation) does not seem to work as is (using only micronaut-spring jar and even adding micronaut-spring-annotation:2.0.0). Maybe I am missing something else but could this something maybe be documented in the deprecation message?

"Page not found" after switching from Spring Boot to Micronaut

Hello there,
I created a sample project with Spring Initialyzer. It's a simple shopping cart service, just for messing with Micronaut for Spring.

In this commit, I tried to switch from Spring to Micronaut (with the intention of building a GraalVM native binary later), following the official documentation . However, while the Spring version works as expected, the Micronaut version returns 404 for the endpoint:
$ curl localhost:8080/1/products
{"_links":{"self":{"href":"/1/products","templated":false}},"message":"Page Not Found"}

Below it the debugging output when the service tries to handle the request. Looks like the the controller is not found.

Thanks in advance!

13:40:27.189 [nioEventLoopGroup-1-2] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkAccessible: true 13:40:27.189 [nioEventLoopGroup-1-2] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkBounds: true 13:40:27.191 [nioEventLoopGroup-1-2] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@3684c550 13:40:27.248 [nioEventLoopGroup-1-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxCapacityPerThread: 4096 13:40:27.248 [nioEventLoopGroup-1-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxSharedCapacityFactor: 2 13:40:27.248 [nioEventLoopGroup-1-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.linkCapacity: 16 13:40:27.248 [nioEventLoopGroup-1-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8 13:40:27.277 [nioEventLoopGroup-1-2] DEBUG io.micronaut.http.server.netty.NettyHttpServer - Server localhost:8080 Received Request: GET /1/products 13:40:27.296 [nioEventLoopGroup-1-2] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - Matching route GET - /1/products 13:40:27.300 [nioEventLoopGroup-1-2] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - No matching route found for URI /1/products and method GET 13:40:27.313 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Finding candidate beans for type: class io.micronaut.http.server.context.ServerRequestContextFilter 13:40:27.314 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Resolved bean candidates [Definition: io.micronaut.http.server.context.ServerRequestContextFilter] for type: class io.micronaut.http.server.context.ServerRequestContextFilter 13:40:27.314 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Finalized bean definitions candidates: [Definition: io.micronaut.http.server.context.ServerRequestContextFilter] 13:40:27.314 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Found concrete candidate [Definition: io.micronaut.http.server.context.ServerRequestContextFilter] for type: io.micronaut.http.server.context.ServerRequestContextFilter 13:40:27.314 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Created bean [io.micronaut.http.server.context.ServerRequestContextFilter@2c9ca380] from definition [Definition: io.micronaut.http.server.context.ServerRequestContextFilter] with qualifier [null] 13:40:27.314 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Registering singleton bean io.micronaut.http.server.context.ServerRequestContextFilter@2c9ca380 for type [io.micronaut.http.server.context.ServerRequestContextFilter] using bean key io.micronaut.http.server.context.ServerRequestContextFilter 13:40:27.315 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Finding candidate beans for type: class io.micronaut.spring.web.ResponseEntityServerFilter 13:40:27.315 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Resolved bean candidates [Definition: io.micronaut.spring.web.ResponseEntityServerFilter] for type: class io.micronaut.spring.web.ResponseEntityServerFilter 13:40:27.315 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Finalized bean definitions candidates: [Definition: io.micronaut.spring.web.ResponseEntityServerFilter] 13:40:27.316 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Found concrete candidate [Definition: io.micronaut.spring.web.ResponseEntityServerFilter] for type: io.micronaut.spring.web.ResponseEntityServerFilter 13:40:27.316 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Created bean [io.micronaut.spring.web.ResponseEntityServerFilter@1e255af2] from definition [Definition: io.micronaut.spring.web.ResponseEntityServerFilter] with qualifier [null] 13:40:27.316 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Registering singleton bean io.micronaut.spring.web.ResponseEntityServerFilter@1e255af2 for type [io.micronaut.spring.web.ResponseEntityServerFilter] using bean key io.micronaut.spring.web.ResponseEntityServerFilter 13:40:27.604 [nioEventLoopGroup-1-2] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - Encoding emitted response object [Page Not Found] using codec: io.micronaut.jackson.codec.JsonMediaTypeCodec@54f5f647

Bug: Props can not be found with MicronautBeanProcessor

I am not sure this is the correct repo or not but I am trying to make use MicronautBeanProcessor.

My problem is that Micronaut can not resolve Spring's properties.

For EachProperty part of DataJdbcConfiguration configuration:

https://github.com/micronaut-projects/micronaut-data/blob/c1d1dc3cdee0e73125e1bc58d05c05d23c1e0633/data-jdbc/src/main/java/io/micronaut/data/jdbc/config/DataJdbcConfiguration.java#L34-L35

@EachProperty(value = DataJdbcConfiguration.PREFIX, primary = "default")
public class DataJdbcConfiguration implements Named {

it triggers:

@Override
public <T> Optional<T> getProperty(String name, ArgumentConversionContext<T> conversionContext) {
return Optional.ofNullable(environment.getProperty(name, conversionContext.getArgument().getType()));
}

However name's value is datasources. When it delegates to Spring it can not find this property. datasouces.default.url works.

I am little surprised why this is not hit before.

my prop is like this:

datasources:
  default:
    url: "jdbc:mysql://localhost:3306/cemo?useSSL=false"
    username: "root"
    password: ""
    driverClassName: com.mysql.cj.jdbc.Driver
```

Any help?

Spring jdbc-template causes errors when transactions are used on native images.

Expected Behavior

When the application is natively compiled I expect the same behavior as the jvm when using transactions.

Actual Behaviour

When I try to run a code that has spring's @transactional I get the error below:

java.lang.IllegalArgumentException: Only values of propagation constants allowed
        at org.springframework.transaction.support.DefaultTransactionDefinition.setPropagationBehavior(DefaultTransactionDefinition.java:142)
        at io.micronaut.spring.tx.annotation.TransactionInterceptor.lambda$resolveTransactionAttribute$0(TransactionInterceptor.java:128)
        at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
        at io.micronaut.spring.tx.annotation.TransactionInterceptor.resolveTransactionAttribute(TransactionInterceptor.java:116)
        at io.micronaut.spring.tx.annotation.TransactionInterceptor.intercept(TransactionInterceptor.java:75)
        at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:137)
        at my.transaction.app.service.$DepositService$Definition$Intercepted.makeDeposit(Unknown Source)
        at my.transaction.app.controller.DepositController.deposit(DepositController.java:22)
        at my.transaction.app.controller.$DepositController$Definition$Exec.dispatch(Unknown Source)
        at io.micronaut.context.AbstractExecutableMethodsDefinition$DispatchedExecutableMethod.invoke(AbstractExecutableMethodsDefinition.java:351)
        at io.micronaut.context.DefaultBeanContext$4.invoke(DefaultBeanContext.java:583)
        at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:303)
        at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:111)
        at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:103)
        at io.micronaut.http.server.RouteExecutor.lambda$executeRoute$14(RouteExecutor.java:659)
        at reactor.core.publisher.FluxDeferContextual.subscribe(FluxDeferContextual.java:49)
        at reactor.core.publisher.Flux.subscribe(Flux.java:8469)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:426)
        at io.micronaut.reactive.reactor.instrument.ReactorSubscriber.onNext(ReactorSubscriber.java:57)
        at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:165)
        at io.micronaut.http.server.netty.RoutingInBoundHandler$4.doOnComplete(RoutingInBoundHandler.java:908)
        at io.micronaut.core.async.subscriber.CompletionAwareSubscriber.onComplete(CompletionAwareSubscriber.java:71)
        at io.micronaut.http.server.netty.jackson.JsonContentProcessor$1.doOnComplete(JsonContentProcessor.java:136)
        at io.micronaut.core.async.subscriber.CompletionAwareSubscriber.onComplete(CompletionAwareSubscriber.java:71)
        at java.util.Optional.ifPresent(Optional.java:183)
        at io.micronaut.core.async.processor.SingleThreadedBufferingProcessor.doOnComplete(SingleThreadedBufferingProcessor.java:48)
        at io.micronaut.jackson.core.parser.JacksonCoreProcessor.doOnComplete(JacksonCoreProcessor.java:94)
        at io.micronaut.core.async.subscriber.SingleThreadedBufferingSubscriber.onComplete(SingleThreadedBufferingSubscriber.java:71)
        at io.micronaut.http.server.netty.jackson.JsonContentProcessor.doOnComplete(JsonContentProcessor.java:161)
        at io.micronaut.core.async.subscriber.CompletionAwareSubscriber.onComplete(CompletionAwareSubscriber.java:71)
        at io.micronaut.http.netty.reactive.HandlerPublisher.publishMessage(HandlerPublisher.java:375)
        at io.micronaut.http.netty.reactive.HandlerPublisher.flushBuffer(HandlerPublisher.java:461)
        at io.micronaut.http.netty.reactive.HandlerPublisher.publishMessageLater(HandlerPublisher.java:352)
        at io.micronaut.http.netty.reactive.HandlerPublisher.complete(HandlerPublisher.java:414)
        at io.micronaut.http.netty.reactive.HandlerPublisher.handlerRemoved(HandlerPublisher.java:409)
        at io.netty.channel.AbstractChannelHandlerContext.callHandlerRemoved(AbstractChannelHandlerContext.java:946)
        at io.netty.channel.DefaultChannelPipeline.callHandlerRemoved0(DefaultChannelPipeline.java:637)
        at io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:477)
        at io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:423)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.removeHandlerIfActive(HttpStreamsHandler.java:476)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.handleReadHttpContent(HttpStreamsHandler.java:317)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:281)
        at io.micronaut.http.netty.stream.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:123)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
        at io.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler.channelRead(WebSocketServerExtensionHandler.java:99)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
        at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
        at io.netty.handler.codec.http.HttpServerKeepAliveHandler.channelRead(HttpServerKeepAliveHandler.java:64)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.handler.flow.FlowControlHandler.dequeue(FlowControlHandler.java:200)
        at io.netty.handler.flow.FlowControlHandler.read(FlowControlHandler.java:139)
        at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
        at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
        at io.netty.channel.ChannelDuplexHandler.read(ChannelDuplexHandler.java:103)
        at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
        at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
        at io.netty.channel.ChannelDuplexHandler.read(ChannelDuplexHandler.java:103)
        at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
        at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
        at io.netty.channel.ChannelDuplexHandler.read(ChannelDuplexHandler.java:103)
        at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
        at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
        at io.netty.channel.ChannelDuplexHandler.read(ChannelDuplexHandler.java:103)
        at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
        at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
        at io.micronaut.http.netty.reactive.HandlerPublisher.requestDemand(HandlerPublisher.java:163)
        at io.micronaut.http.netty.stream.HttpStreamsHandler$2.requestDemand(HttpStreamsHandler.java:272)
        at io.micronaut.http.netty.reactive.HandlerPublisher$ChannelSubscription.receivedDemand(HandlerPublisher.java:536)
        at io.micronaut.http.netty.reactive.HandlerPublisher$ChannelSubscription.lambda$request$0(HandlerPublisher.java:482)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:829)
        at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:597)
        at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:194)

Steps To Reproduce

  1. Clone project https://github.com/viniciusxyz/micronaut-transaction-failed/tree/transaction-error-native-image
  2. Create native image ./mvnw package -Dpackaging=native-image
  3. Run the application ./target/my-transaction-app
  4. Execute the curl below:
curl --location --request POST 'http://localhost:8080/deposit' \
--header 'Content-Type: application/json' \
--data-raw '{
  "accountNumber": "0000001",
  "amount": 1.0
}'

You will see the same error.

Environment Information

Operating System: Ubuntu 20.04
JDK: JDK 11.0.14 - GraalVM CE 22.0.0.2 and 11.0.15 - 22.1.0
Maven 3.8.4
Micronaut 3.4.4

⚠️ micronaut-jdbc-hikari tested on 4.1.1 and 4.2.2

Example Application

https://github.com/viniciusxyz/micronaut-transaction-failed/tree/transaction-error-native-image

Version

3.4.4

Update

I managed to get this to work but I had to add the snippet below to reflection-config.json:

[
{
  "name":"org.springframework.transaction.TransactionDefinition",
  "allPublicFields":true
}
]

Can the team add this config so that it is not necessary to add to projects?

Micronaut for Spring doesn't work with Micronaut 2.x.

Hi, Micronaut for Spring doesn't work with Micronaut 2.x. Builds and runs successfully, but doesn't register Controller and not found rest api. Also generate simple spring-boot project from launch missed below plugins:

id "org.springframework.boot" version "2.2.3.RELEASE"
id "io.spring.dependency-management" version "1.0.6.RELEASE"

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Pending Approval

These branches will be created by Renovate only once you click their checkbox below.

  • chore(deps): update actions/checkout action to v4.1.4
  • chore(deps): update github artifact actions to v4 (major) (actions/download-artifact, actions/upload-artifact)
  • 🔐 Create all pending approval PRs at once 🔐

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

github-actions
.github/workflows/central-sync.yml
  • actions/checkout v4
  • gradle/wrapper-validation-action v2
  • actions/setup-java v4
.github/workflows/graalvm-dev.yml
  • actions/checkout v4
  • actions/checkout v4
.github/workflows/graalvm-latest.yml
  • actions/checkout v4
  • actions/checkout v4
.github/workflows/gradle.yml
  • actions/checkout v4
  • graalvm/setup-graalvm v1.2.1
  • gradle/gradle-build-action v3.1.0
  • mikepenz/action-junit-report v4
  • actions/upload-artifact v3.1.3@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
  • haya14busa/action-cond v1
.github/workflows/publish-snapshot.yml
  • actions/checkout v4
  • actions/cache v4
  • actions/setup-java v4
.github/workflows/release.yml
  • actions/checkout v4
  • gradle/wrapper-validation-action v2
  • actions/setup-java v4
  • actions/upload-artifact v3.1.3@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
  • actions/upload-artifact v3.1.3@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
  • actions/download-artifact v3.0.2@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
  • slsa-framework/slsa-github-generator v1.10.0
  • actions/checkout v4.1.1@b4ffde65f46336ab88eb53be808477a3936bae11
  • actions/download-artifact v3.0.2@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
  • softprops/action-gh-release v0.1.15@de2c0eb89ae2a093876385947365aca7b0e5f844
gradle
gradle.properties
settings.gradle
  • io.micronaut.build.shared.settings 6.7.0
build.gradle
buildSrc/settings.gradle
buildSrc/build.gradle
buildSrc/src/main/groovy/io.micronaut.build.internal.spring-base.gradle
buildSrc/src/main/groovy/io.micronaut.build.internal.spring-module.gradle
buildSrc/src/main/groovy/io.micronaut.build.internal.spring-tests.gradle
gradle/libs.versions.toml
  • io.micronaut:micronaut-core-bom 4.4.0
  • io.micronaut.cache:micronaut-cache-bom 4.2.2
  • io.micronaut.views:micronaut-views-bom 5.1.0
  • io.micronaut.validation:micronaut-validation-bom 4.4.4
  • io.micronaut.servlet:micronaut-servlet-bom 4.6.0
  • org.springframework.boot:spring-boot 3.2.4
  • org.springframework.boot:spring-boot-starter 3.2.4
  • org.springframework.boot:spring-boot-starter-web 3.2.4
  • org.springframework:spring-core 6.1.5
  • org.springframework:spring-context 6.1.5
  • org.springframework:spring-tx 6.1.5
  • org.springframework:spring-orm 6.1.5
  • org.springframework:spring-jdbc 6.1.5
  • org.springframework:spring-framework-bom 6.1.5
  • org.springframework.boot:spring-boot-actuator 3.2.4
  • org.springframework.boot:spring-boot-autoconfigure 3.2.4
  • org.springframework.boot:spring-boot-starter-thymeleaf 3.2.4
  • org.springframework.boot:spring-boot-starter-tomcat 3.2.4
  • org.springframework.boot:spring-boot-starter-test 3.2.4
  • org.springframework:spring-test 6.1.5
  • com.h2database:h2 2.2.224
gradle/license.gradle
spring/build.gradle
spring-annotation/build.gradle
spring-bom/build.gradle
spring-boot/build.gradle.kts
spring-boot-annotation/build.gradle
spring-boot-starter/build.gradle
spring-context/build.gradle
spring-web/build.gradle
spring-web-annotation/build.gradle
test-suite/build.gradle.kts
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7

  • Check this box to trigger a request for Renovate to run again on this repository

Consider changing Order for TransactionInterceptor

Currently both io.micronaut.spring.tx.annotation.TransactionInterceptor and io.micronaut.scheduling.async.AsyncInterceptor have the default order of 0 implemented in the Ordered interface.

A common pattern is handing off work to a method asynchronously that also needs to operate in a transaction context. Right now, if you make a single method that is both @Transactional and @Async, the order is left to chance (I think based on how the preprocessing works at compile time).

I believe that the user would always want the async handoff to happen first and then the transaction to begin. So, this is my request for either the transaction interceptor to be changed or the async interceptor to be changed -- I'm sure there are pros/cons that I don't fully appreciate related to which one gets modified.

Micronaut with H2 DB does not work with GraalVM

Steps to Reproduce

1. Create project:
mn create-app micronaut-jpa-graal --features data-hibernate-jpa graal-native-image --build maven
2. Add simple classes Job - pojo, entity, service and controller:
1) Data
public class Job {
@id
@GeneratedValue
private Long id;
private String name;
private Date creationDate;
}
//getter setter, c-tor
2) Entity:
@repository
public interface JobRepository extends CrudRepository<Job, Long> {
List findAll();
}
3) Service:
@singleton
public class JobService {
@Inject
JobRepository jobRepository;
public List getAllJobs() {
return jobRepository.findAll();
}
}
4)Controller:
@controller
public class JobController {
private final JobService jobService;
public JobController(JobService jobService) {
this.jobService = jobService;
}
@get(value = "/jobs", produces = MediaType.APPLICATION_JSON)
HttpResponse<List> getJobs() {
return HttpResponse.ok(jobService.getAllJobs());
}

3. mvn clean install
4. create script in parent directory, and run that:
cd micronaut-jpa-graal
sudo docker build -f Dockerfile -t micronaut-jpa-graal .
sudo docker run -it -p 8080:8080 micronaut-jpa-graal

  1. TODO

Expected Behaviour

With app created for JVM with
$ mn create-app micronaut-jpa-graal --features data-hibernate-jpa --build maven
command I was able to start that project without any exceptions and I made successfully some get request on localhost:8080

Actual Behaviour

At the begining Ive run an empty app with simple controller only and result was fine. Then Ive added to project Entity, POJO... to test project with JPA (I have similar app for jvm purposes and it works fine)
During app startup I can observe some warnings in terminal:

09:50:45.125 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
Jun 05, 2020 9:50:45 AM org.apache.tomcat.jdbc.pool.ConnectionPool init
SEVERE: Unable to create initial connections of pool.
org.h2.jdbc.JdbcSQLSyntaxErrorException: (Message 90086 not found) [90086-199]
at org.h2.util.JdbcUtils.loadUserClass(JdbcUtils.java:198)
at org.h2.engine.Database.getTableEngine(Database.java:3172)
at org.h2.schema.Schema.createTable(Schema.java:706)
at org.h2.engine.Database.open(Database.java:824)
at org.h2.engine.Database.openDatabase(Database.java:319)
at org.h2.engine.Database.(Database.java:313)
at org.h2.engine.Engine.openSession(Engine.java:69)
at org.h2.engine.Engine.openSession(Engine.java:201)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:178)
at org.h2.engine.Engine.createSession(Engine.java:161)
at org.h2.engine.Engine.createSession(Engine.java:31)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:336)
at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:169)
at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:148)
at org.h2.Driver.connect(Driver.java:69)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:744)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:676)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:483)
at org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:154)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131)
at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:175)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:473)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:84)
at org.hibernate.boot.MetadataSources.buildMetadata(MetadataSources.java:185)
at io.micronaut.configuration.hibernate.jpa.EntityManagerFactoryBean.hibernateSessionFactoryBuilder(EntityManagerFactoryBean.java:146)
at io.micronaut.configuration.hibernate.jpa.$EntityManagerFactoryBean$HibernateSessionFactoryBuilder2Definition.build(Unknown Source)
at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:125)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1714)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2428)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2414)
at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2105)
at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2079)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1093)
at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:1007)
at io.micronaut.configuration.hibernate.jpa.$EntityManagerFactoryBean$HibernateSessionFactory3Definition.build(Unknown Source)
at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:125)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1714)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2428)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2414)
at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:2004)
at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1378)
at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:236)
at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:2568)
at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:202)
at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:188)
at io.micronaut.runtime.Micronaut.start(Micronaut.java:64)
at io.micronaut.runtime.Micronaut.run(Micronaut.java:294)
at io.micronaut.runtime.Micronaut.run(Micronaut.java:280)
at micronaut.jpa.graal.Application.main(Application.java:17)
Caused by: java.lang.ClassNotFoundException: org.h2.mvstore.db.MVTableEngine
at com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:60)
at java.lang.Class.forName(DynamicHub.java:1211)
at org.h2.util.JdbcUtils.loadUserClass(JdbcUtils.java:191)
... 66 more

09:50:45.129 [main] WARN o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata : (Message 90086 not found) [90086-199]

When I am trying to perform some Get requests with Talented API Tester I can observe error
"message": "Internal Server Error: Failed to inject value for parameter [sessionFactory] of class: io.micronaut.transaction.hibernate5.HibernateTransactionManager\n\nMessage: No bean of type [org.hibernate.SessionFactory] exists for the given qualifier: @nAmed('default'). Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).\nPath Taken: new HibernateTransactionManager([SessionFactory sessionFactory],DataSource dataSource,Interceptor entityInterceptor)"

In terminal I can observe:
10:04:37.121 [pool-3-thread-17] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: Failed to inject value for parameter [sessionFactory] of class: io.micronaut.transaction.hibernate5.HibernateTransactionManager

Message: No bean of type [org.hibernate.SessionFactory] exists for the given qualifier: @nAmed('default'). Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new HibernateTransactionManager([SessionFactory sessionFactory],DataSource dataSource,Interceptor entityInterceptor)
io.micronaut.context.exceptions.DependencyInjectionException: Failed to inject value for parameter [sessionFactory] of class: io.micronaut.transaction.hibernate5.HibernateTransactionManager

Message: No bean of type [org.hibernate.SessionFactory] exists for the given qualifier: @nAmed('default'). Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new HibernateTransactionManager([SessionFactory sessionFactory],DataSource dataSource,Interceptor entityInterceptor)
at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:1016)
at io.micronaut.transaction.hibernate5.$HibernateTransactionManagerDefinition.doBuild(Unknown Source)
at io.micronaut.context.AbstractParametrizedBeanDefinition.build(AbstractParametrizedBeanDefinition.java:117)
at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:121)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1714)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2428)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2414)
at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2105)
at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2079)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1113)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:626)
at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:114)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1714)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2428)
at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2414)
at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2105)
at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2079)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:621)
at io.micronaut.data.intercept.DataIntroductionAdvice.findInterceptor(DataIntroductionAdvice.java:121)
at io.micronaut.data.intercept.DataIntroductionAdvice.intercept(DataIntroductionAdvice.java:78)
at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:69)
at io.micronaut.validation.ValidatingInterceptor.intercept(ValidatingInterceptor.java:123)
at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:69)
at micronaut.jpa.graal.jobs.JobRepository$Intercepted.findAll(Unknown Source)
at micronaut.jpa.graal.jobs.JobService.getAllJobs(JobService.java:14)
at micronaut.jpa.graal.jobs.JobController.getJobs(JobController.java:24)
at micronaut.jpa.graal.jobs.$JobControllerDefinition$$exec1.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:146)
at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:3016)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:228)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter$16(RoutingInBoundHandler.java:1460)
at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableSwitchIfEmpty.subscribeActual(FlowableSwitchIfEmpty.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14868)
at io.micronaut.http.context.ServerRequestTracingPublisher.lambda$subscribe$0(ServerRequestTracingPublisher.java:52)
at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:68)
at io.micronaut.http.context.ServerRequestTracingPublisher.subscribe(ServerRequestTracingPublisher.java:52)
at io.reactivex.internal.operators.flowable.FlowableFromPublisher.subscribeActual(FlowableFromPublisher.java:29)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:288)
at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:253)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.lang.Thread.run(Thread.java:834)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:527)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)
Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [org.hibernate.SessionFactory] exists for the given qualifier: @nAmed('default'). Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2046)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1093)
at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:1007)
... 52 common frames omitted

Environment Information

  • Operating System: Ubuntu 18.04

  • Micronaut Version: 1.3.5

  • JDK Version: javac 11.0.7.

graal-native-image branch # native image build failing

I am trying to create graal native image using docker on windows10 machine but it fails with out of memory errors at analysis phase which is taking unusually longer time though am running on 16G ram.. anyone able to successfully build native image from graal-native-image branch?

[greeting-service:6] classlist: 9,908.57 ms
[greeting-service:6] (cap): 1,165.18 ms
[greeting-service:6] setup: 2,595.97 ms
Warning: RecomputeFieldValue.FieldOffset automatic substitution failed. The automatic substitution registration was attempted because a call to sun.misc.Unsafe.objectFieldOffset(Field) was detected in the static initializer of io.netty.buffer.AbstractReferenceCountedByteBuf. Detailed failure reason(s): Could not determine the field where the value produced by the call to sun.misc.Unsafe.objectFieldOffset(Field) for the field offset computation is stored. The call is not directly followed by a field store or by a sign extend node followed directly by a field store.
Warning: RecomputeFieldValue.FieldOffset automatic substitution failed. The automatic substitution registration was attempted because a call to sun.misc.Unsafe.objectFieldOffset(Field) was detected in the static initializer of io.netty.util.AbstractReferenceCounted. Detailed failure reason(s): Could not determine the field where the value produced by the call to sun.misc.Unsafe.objectFieldOffset(Field) for the field offset computation is stored. The call is not directly followed by a field store or by a sign extend node followed directly by a field store.
[greeting-service:6] analysis: 363,775.29 ms
Fatal error: java.lang.OutOfMemoryError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598)
at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:458)
at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:289)
at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:427)
at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:109)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOf(Arrays.java:3308)
at java.util.BitSet.ensureCapacity(BitSet.java:337)
at java.util.BitSet.expandTo(BitSet.java:352)
at java.util.BitSet.set(BitSet.java:447)
at com.oracle.graal.pointsto.meta.AnalysisType.addTypeToAssignableLists(AnalysisType.java:434)
at com.oracle.graal.pointsto.meta.AnalysisType.updateAssignableTypes(AnalysisType.java:387)
at com.oracle.graal.pointsto.BigBang.checkObjectGraph(BigBang.java:602)
at com.oracle.graal.pointsto.BigBang.finish(BigBang.java:557)
at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:684)
at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:523)
at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:441)
at com.oracle.svm.hosted.NativeImageGenerator$$Lambda$24/408544604.run(Unknown Source)
at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Image build request failed with exit status 1

formatters are not utilized

Custom formatters are not available: See

https://github.com/rburgst/micronaut-spring-example

The gist ist that you would define custom type converters for REST controller methods via the FormatterRegistry

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatterForFieldType(TenantId.class, 
          new GenericIdFormatter(TenantId.class));
    }
}

These are not used/initialized by micronaut-spring, therefore the following request fails:

$ http ":8080/greet?tenantId=7364b7d8-490d-49b9-8e18-7b96f41734e8"


HTTP/1.1 400 Bad Request
Date: Sun, 2 Dec 2018 09:16:43 GMT
connection: close
content-length: 184
content-type: application/json

{
    "_links": {
        "self": {
            "href": "/greet?tenantId=7364b7d8-490d-49b9-8e18-7b96f41734e8",
            "templated": false
        }
    },
    "message": "Required argument [TenantId tenantId] not specified",
    "path": "/tenantId"
}

To replicate the problem, launch the application via

./gradlew bootRun

and send the above mentioned request.

Branch graal-native-image not compiling and missing build-native-image.sh

Hi everybody,

I read this article by Michael Redlich and I wanted to test the sample application greeting-service.

The master branch works perfectly, but unfortunately the graal-native-image branch doesn't!
When I run the command mvnw compile spring-boot:run I receive a compilation error, here below the entire log:

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< example:greeting-service >----------------------
[INFO] Building greeting-service 0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ greeting-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ greeting-service ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 7 source files to /Users/matteobaiguini/projects/greeting-service-graalvm/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[3,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[4,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[5,56] package com.oracle.svm.core.annotate.RecomputeFieldValue does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[6,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[7,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[12,2] cannot find symbol
  symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[20,2] cannot find symbol
  symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[26,2] cannot find symbol
  symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[34,2] cannot find symbol
  symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[42,2] cannot find symbol
  symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[14,6] cannot find symbol
  symbol:   class Substitute
  location: class greeting.example.graal.Target_io_netty_util_internal_logging_InternalLoggerFactory
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[22,6] cannot find symbol
  symbol:   class Alias
  location: class greeting.example.graal.Target_io_micronaut_caffeine_cache_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[22,13] cannot find symbol
  symbol:   class RecomputeFieldValue
  location: class greeting.example.graal.Target_io_micronaut_caffeine_cache_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[22,59] package RecomputeFieldValue does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[28,6] cannot find symbol
  symbol:   class Alias
  location: class greeting.example.graal.Target_io_netty_util_internal_PlatformDependent0
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[28,13] cannot find symbol
  symbol:   class RecomputeFieldValue
  location: class greeting.example.graal.Target_io_netty_util_internal_PlatformDependent0
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[28,40] cannot find symbol
  symbol:   variable Kind
  location: class greeting.example.graal.Target_io_netty_util_internal_PlatformDependent0
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[36,6] cannot find symbol
  symbol:   class Alias
  location: class greeting.example.graal.Target_io_netty_util_internal_CleanerJava6
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[36,13] cannot find symbol
  symbol:   class RecomputeFieldValue
  location: class greeting.example.graal.Target_io_netty_util_internal_CleanerJava6
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[36,40] cannot find symbol
  symbol:   variable Kind
  location: class greeting.example.graal.Target_io_netty_util_internal_CleanerJava6
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[44,6] cannot find symbol
  symbol:   class Alias
  location: class greeting.example.graal.Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[44,13] cannot find symbol
  symbol:   class RecomputeFieldValue
  location: class greeting.example.graal.Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[44,40] cannot find symbol
  symbol:   variable Kind
  location: class greeting.example.graal.Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess
[INFO] 23 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.652 s
[INFO] Finished at: 2019-01-07T19:05:09+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project greeting-service: Compilation failure: Compilation failure:
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[3,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[4,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[5,56] package com.oracle.svm.core.annotate.RecomputeFieldValue does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[6,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[7,36] package com.oracle.svm.core.annotate does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[12,2] cannot find symbol
[ERROR]   symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[20,2] cannot find symbol
[ERROR]   symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[26,2] cannot find symbol
[ERROR]   symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[34,2] cannot find symbol
[ERROR]   symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[42,2] cannot find symbol
[ERROR]   symbol: class TargetClass
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[14,6] cannot find symbol
[ERROR]   symbol:   class Substitute
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_logging_InternalLoggerFactory
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[22,6] cannot find symbol
[ERROR]   symbol:   class Alias
[ERROR]   location: class greeting.example.graal.Target_io_micronaut_caffeine_cache_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[22,13] cannot find symbol
[ERROR]   symbol:   class RecomputeFieldValue
[ERROR]   location: class greeting.example.graal.Target_io_micronaut_caffeine_cache_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[22,59] package RecomputeFieldValue does not exist
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[28,6] cannot find symbol
[ERROR]   symbol:   class Alias
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_PlatformDependent0
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[28,13] cannot find symbol
[ERROR]   symbol:   class RecomputeFieldValue
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_PlatformDependent0
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[28,40] cannot find symbol
[ERROR]   symbol:   variable Kind
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_PlatformDependent0
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[36,6] cannot find symbol
[ERROR]   symbol:   class Alias
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_CleanerJava6
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[36,13] cannot find symbol
[ERROR]   symbol:   class RecomputeFieldValue
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_CleanerJava6
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[36,40] cannot find symbol
[ERROR]   symbol:   variable Kind
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_CleanerJava6
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[44,6] cannot find symbol
[ERROR]   symbol:   class Alias
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[44,13] cannot find symbol
[ERROR]   symbol:   class RecomputeFieldValue
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess
[ERROR] /Users/matteobaiguini/projects/greeting-service-graalvm/src/main/java/greeting/example/graal/MicronautSubstitutions.java:[44,40] cannot find symbol
[ERROR]   symbol:   variable Kind
[ERROR]   location: class greeting.example.graal.Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Moreover I can't find the script build-native-image.sh on the branch graal-native-image.

What am I doing wrong?

Failing context lookup/binding from MicronautApplicationContext.getBeansOfType

Expected Behavior

When using the application context to lookup beans of a certain type, I expect to get all beans associated with that type.

Actual Behaviour

  1. When using the (micronaut-core) application context to lookup beans of a certain type, I get all beans associated with a certain type regardless of them having a named annotation or not.
  2. When using the (micronaut-spring) application context to lookup beans of a certain type, I get a NoSuchBeanException if the bean I'm looking up is multiple named beans.

Steps To Reproduce

  1. Create a ConfigurationProperty-class annotated with @EachProperty("a.b") and @Context the class should receive the named parameter in it's constructor
  2. Create an ApplicationEventListener<StartupEvent> and inject both micronaut and spring application contexts
  3. add properties a.b.a, a.b.b, a.b.c to application.yml
  4. With the micronaut application context call micronautContext.getBeansOfType(Config.class) and get 3 configuration class beans.
  5. With the spring adapted application context (MicronautApplicationContext class) call springContext.getBeansOfType(Config.class) and get a NoSuchBeanException with a message "No bean named 'Config(a)' available" (there might be a variation of either a, b or c as the name.)

Environment Information

  • WIndows 10 - Latest update
  • OpenJDK 16.
  • Kotlin 1.5.31
  • Gradle 7.2
  • Micronaut-bom 3.2.1

Example Application

Demo Application

Version

3.2.1

Unsupported SB feature

Hello all!

The idea of running Spring Boot apps with AOT is tremendous, so I'm trying to convert my project from boot to micronaut with help of these libs, but unfortunately it's hard to investigate why thing not going in right way.
I'm using Spring boot + groovy + spring cloud config service (which is not that trivial compared to examples).

So I've started with small steps: creating Spring Boot project from scratch and adding micronaut dependencies, so I can start APP with spring syntax, but via micronaut engine.
Unfortunately, I've already faced an issue with next code in my configuration class:

 @Bean
    public ApplicationRunner applicationRunner() {
        return args -> System.out.println("HELLO THERE!!!");
    }

And application runner just not being invoked, although MVC annotations are working...

So the question is next, is it possible to run complicated SB application (with cloud dependencies and some more spring specific staff) via micronaut engine? Or everything which currently supported is only stuff in examples?

Thanks!

NoSuchBeanException when converting to use micronaut-spring on existing spring project

I recently converted a sample service using spring boot over to use micronaut spring. I was able to get my healthcheck endpoint working, but in order to do it I had to comment out the below injection. Any direction on how to troubleshoot this would be appreciated. I'm getting a similar endpoint that injects aws java sdk dynamodb query utils class, so I'm wondering if there are certain spring beans that cannot be converted to be used within micronaut?

EDIT:
I tried autowiring RestTemplate into the greeter service in this examples folder, and I received the same error, so I don't think it's an issue with my project configuration but I'm not entirely sure.


// @Autowired
// RestTemplate restTemplate;

Otherwise I face this error:

{"message":"Internal Server Error: Failed to inject value for field [restTemplate] of class: com.company.webservice.resource.$HealthCheckResourceDefinition$Intercepted\r\n\r\nPath Taken: $HealthCheckResourceDefinition$Intercepted.restTemplate"}


ERROR io.micronaut.http.server.netty.RoutingInBoundHandler - Unexpected error occurred: Failed to inject value for field [restTemplate] of class: com.company.resource.$HealthCheckResourceDefinition$Intercepted

Path Taken: $HealthCheckResourceDefinition$Intercepted.restTemplate
io.micronaut.context.exceptions.DependencyInjectionException: Failed to inject value for field [restTemplate] of class: com.company.webservice.resource.$HealthCheckResourceDefinition$Intercepted

Path Taken: $HealthCheckResourceDefinition$Intercepted.restTemplate
        at io.micronaut.context.AbstractBeanDefinition.getBeanForField(AbstractBeanDefinition.java:1419)
        at io.micronaut.context.AbstractBeanDefinition.getBeanForField(AbstractBeanDefinition.java:1184)
        at com.company.webservice.resource.$HealthCheckResourceDefinition.injectBean(Unknown Source)
        at com.company.webservice.resource.$$HealthCheckResourceDefinition$InterceptedDefinition.injectBean(Unknown Source)
        at com.company.webservice.resource.$$HealthCheckResourceDefinition$InterceptedDefinition.build(Unknown Source)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1693)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2407)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2393)
        at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2084)
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2058)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:618)
        at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.getTarget(DefaultBeanContext.java:2972)
        at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:2993)
        at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:228)
        at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter$16(RoutingInBoundHandler.java:1474)
        at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.internal.operators.flowable.FlowableSwitchIfEmpty.subscribeActual(FlowableSwitchIfEmpty.java:32)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14868)
        at io.micronaut.core.async.publisher.Publishers.lambda$map$2(Publishers.java:134)
        at io.micronaut.http.context.ServerRequestTracingPublisher.lambda$subscribe$0(ServerRequestTracingPublisher.java:52)
        at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:68)
        at io.micronaut.http.context.ServerRequestTracingPublisher.subscribe(ServerRequestTracingPublisher.java:52)
        at io.reactivex.internal.operators.flowable.FlowableFromPublisher.subscribeActual(FlowableFromPublisher.java:29)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14865)
        at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
        at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:288)
        at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:253)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [org.springframework.web.client.RestTemplate] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2069)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1095)
        at io.micronaut.context.AbstractBeanDefinition.getBeanForField(AbstractBeanDefinition.java:1411)
        ... 35 common frames omitted
10:16:58.536 [nioEventLoopGroup-1-2] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - Encoding emitted response object [Internal Server Error: Failed to inject value for field [restTemplate] of class: com.company.webservice.resource.$HealthCheckResourceDefinition$Intercepted

@Transactional not working on compiled graal binary

Context
I configured micronaut + spring jdbc and generated a binary using graalvm

What I expected
JDBC Transactions working by using @Transactional

What is happening

@Transactional is not working after generate the binary using native-image the feature works but keep getting a new connection for every SQL statement

Steps to reproduce

$ git clone https://github.com/mageddo/graalvm-examples.git &&\
cd graalvm-examples/micronaut && \
git checkout evidence-transactional-not-working-on-binary-mode &&\
./gradlew clean nativeImage
$ ./build/graal/micronaut
$ curl -s localhost:8080/fruits

current-behavior.txt

Reproducing the expected behavior

$ ./gradlew run
$ curl -s localhost:8080/fruits

expected-behavior.txt

Additional Info
I realized the follow line is not present on the binary execution what looks like micronaut is not registering @Transactional interceptor or something like that

2019-03-17 13:56:45.881 [pool-1-thread-3] TRA   i.m.aop.chain.InterceptorChain m=<init> l=77 Intercepted method [List getFruits()] invocation on target: com.mageddo.micronaut.service.$FruitsServiceDefinition$Intercepted@673f30fe
2019-03-17 13:56:45.881 [pool-1-thread-3] TRA   i.m.aop.chain.InterceptorChain m=proceed l=143 Proceeded to next interceptor [io.micronaut.spring.tx.annotation.TransactionInterceptor@312e480] in chain for method invocation: List getFruits()

MicronautApplicationContext not inheriting parent propertySources

Micronaut unable to load beans within Spring context.

Expected Behavior

A bean from a 3rd party library built using Micronaut can be successfully injected from within a Spring application via the MicronautBeanProcessor

Actual Behaviour

Message: No bean of type [io.micronaut.core.cli.CommandLine] exists. (click to expand)
Message: No bean of type [io.micronaut.core.cli.CommandLine] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new ApplicationRunnerListener(CommandLine commandLine,List commandLineRunnerList,List applicationRunnerList) --> new ApplicationRunnerListener([CommandLine commandLine],List commandLineRunnerList,List applicationRunnerList)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:176)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1884)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1284)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:267)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154)
	at org.spockframework.spring.SpringMockTestExecutionListener.beforeTestMethod(SpringMockTestExecutionListener.java:79)
	at org.spockframework.spring.AbstractSpringTestExecutionListener.beforeTestMethod(AbstractSpringTestExecutionListener.java:39)
	at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:293)
	at org.spockframework.spring.SpringTestContextManager.beforeTestMethod(SpringTestContextManager.java:60)
	at org.spockframework.spring.SpringInterceptor.interceptSetupMethod(SpringInterceptor.java:53)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:30)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at org.spockframework.runtime.PlatformSpecRunner.invoke(PlatformSpecRunner.java:400)
	at org.spockframework.runtime.PlatformSpecRunner.runSetup(PlatformSpecRunner.java:291)
	at org.spockframework.runtime.PlatformSpecRunner.runSetup(PlatformSpecRunner.java:286)
	at org.spockframework.runtime.SimpleFeatureNode.before(SimpleFeatureNode.java:43)
	at org.spockframework.runtime.SimpleFeatureNode.before(SimpleFeatureNode.java:15)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:136)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
	at org.spockframework.runtime.SpockNode.sneakyInvoke(SpockNode.java:40)
	at org.spockframework.runtime.IterationNode.lambda$around$0(IterationNode.java:63)
	at org.spockframework.runtime.PlatformSpecRunner.lambda$createMethodInfoForDoRunIteration$5(PlatformSpecRunner.java:238)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:148)
	at org.spockframework.runtime.PlatformSpecRunner.invokeRaw(PlatformSpecRunner.java:409)
	at org.spockframework.runtime.PlatformSpecRunner.invoke(PlatformSpecRunner.java:392)
	at org.spockframework.runtime.PlatformSpecRunner.runIteration(PlatformSpecRunner.java:220)
	at org.spockframework.runtime.IterationNode.around(IterationNode.java:63)
	at org.spockframework.runtime.SimpleFeatureNode.lambda$around$0(SimpleFeatureNode.java:52)
	at org.spockframework.runtime.SpockNode.sneakyInvoke(SpockNode.java:40)
	at org.spockframework.runtime.FeatureNode.lambda$around$0(FeatureNode.java:29)
	at org.spockframework.runtime.PlatformSpecRunner.lambda$createMethodInfoForDoRunFeature$4(PlatformSpecRunner.java:201)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:148)
	at org.spockframework.runtime.PlatformSpecRunner.invokeRaw(PlatformSpecRunner.java:409)
	at org.spockframework.runtime.PlatformSpecRunner.invoke(PlatformSpecRunner.java:392)
	at org.spockframework.runtime.PlatformSpecRunner.runFeature(PlatformSpecRunner.java:194)
	at org.spockframework.runtime.FeatureNode.around(FeatureNode.java:29)
	at org.spockframework.runtime.SimpleFeatureNode.around(SimpleFeatureNode.java:52)
	at org.spockframework.runtime.SimpleFeatureNode.around(SimpleFeatureNode.java:15)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
	at org.spockframework.runtime.SpockNode.sneakyInvoke(SpockNode.java:40)
	at org.spockframework.runtime.SpecNode.lambda$around$0(SpecNode.java:63)
	at org.spockframework.runtime.PlatformSpecRunner.lambda$createMethodInfoForDoRunSpec$0(PlatformSpecRunner.java:61)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:148)
	at org.spockframework.runtime.PlatformSpecRunner.invokeRaw(PlatformSpecRunner.java:409)
	at org.spockframework.runtime.PlatformSpecRunner.invoke(PlatformSpecRunner.java:392)
	at org.spockframework.runtime.PlatformSpecRunner.runSpec(PlatformSpecRunner.java:55)
	at org.spockframework.runtime.SpecNode.around(SpecNode.java:63)
	at org.spockframework.runtime.SpecNode.around(SpecNode.java:11)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
	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 org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: io.micronaut.context.exceptions.DependencyInjectionException: Failed to inject value for parameter [commandLine] of class: io.micronaut.spring.boot.ApplicationRunnerListener

Message: No bean of type [io.micronaut.core.cli.CommandLine] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new ApplicationRunnerListener(CommandLine commandLine,List commandLineRunnerList,List applicationRunnerList) --> new ApplicationRunnerListener([CommandLine commandLine],List commandLineRunnerList,List applicationRunnerList)
	at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:1955)
	at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1189)
	at io.micronaut.spring.boot.$ApplicationRunnerListener$Definition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2336)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:3281)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:3267)
	at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2820)
	at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2782)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1704)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1678)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:905)
	at io.micronaut.context.BeanLocator.findBean(BeanLocator.java:291)
	at io.micronaut.spring.beans.MicronautSpringBeanFactory.getObject(MicronautSpringBeanFactory.java:61)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:169)
	... 104 common frames omitted
Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [io.micronaut.core.cli.CommandLine] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
	at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2795)
	at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1638)
	at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:1933)
	... 117 common frames omitted

Steps To Reproduce

I pushed a branch w/ 2 example projects that demonstrate this issue

  1. Checkout branch
  2. cd to examples/micronaut-lib, run gradle publishToMavenLocal
  3. cd to examples/spring-with-micronaut-beans, run gradle test

I chatted briefly w/ @jameskleeh on gitter. The question came up whether it was a bug or not that CommandLine is a constructor arg for MicronautBeanProcessor.

Environment Information

  • macOS 12.2
  • OpenJDK 17.0.2 aarch64

Example Application

https://github.com/jamesdh/micronaut-spring/tree/mn_bean_in_spring_issue/examples

Version

3.3.3

@ConfigurationProperties bean not injected to Spring

Expected Behavior

I need to use Micronaut library in Spring.

Here example of @ConfigurationProperties bean in Micronaut:

@Singleton
@BootstrapContextCompatible
@ConfigurationProperties(ZendeskClientConfiguration.PREFIX)
@Requires(property = ZendeskClientConfiguration.PREFIX)
public class ZendeskClientConfiguration {

}

Here bean processor in MicronautHttpClientConfig:

@Configuration
public class MicronautHttpClientConfig {

    @Bean
    public MicronautBeanProcessor httpClientMicronautBeanProcessor() {
        return new MicronautBeanProcessor(
                Singleton.class,
                ConfigurationProperties.class
        );
    }

}

Spring context is not running because ZendeskClientConfiguration bean is not found. Debug not shows it in MicronautBeanProcessor:

https://monosnap.com/file/FxT66UhbNW1TotVmk47XRViMST0SsW

Actual Behaviour

Bean @BootstrapContextCompatible is available.

Steps To Reproduce

No response

Environment Information

Micronaut version 3.1.3.
Micronaut Spring 4.0.0

Example Application

No response

Version

3.1.3

Support for Spring Data JPA

Context:
I am really interested in converting an existing Spring boot based project to micronaut. The smoothest way to to transition, I think is, leaving spring annotation as-is and use micronaut-spring project.

The project relies heavily on Spring Data JPA (Pageable, Sorting, Specification for search) etc.

Question/Feature Request:
What is the way to convert the Spring Data Repos to Micronaut at compile time. I could not find any reference for that. Is that supported? If not, could this be treated as a feature request to support Spring Data JPA interfaces?

Native Image of Micronaut-spring 3.0.0 spring boot example run failed with "java.util.zip.ZipException: zip END header not found"

Thanks for reporting an issue, please review the task list below before submitting the
issue. Your issue report will be closed if the issue is incomplete and the below tasks not completed.

NOTE: If you are unsure about something and the issue is more of a question a better place to ask questions is on Stack Overflow (https://stackoverflow.com/tags/micronaut) or Gitter (https://gitter.im/micronautfw/). DO NOT use the issue tracker to ask questions.

Task List

  • Steps to reproduce provided
  • Stacktrace (if present) provided
  • Example that reproduces the problem uploaded to Github
  • Full description of the issue provided (see below)

Steps to Reproduce

  1. Follow the "https://github.com/micronaut-projects/micronaut-spring/tree/v3.0.0/examples/greeting-service", use gradlew assemble build a jar, named "greeting-service-0.1.0.jar"
    image

  2. Install GraalVM & NativeImage, the version as follows:
    D:\Code\self\micronaut\micronaut-spring\examples\greeting-service\build\libs>java -version
    openjdk version "11.0.9" 2020-10-20
    OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
    OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)

D:\Code\self\micronaut\micronaut-spring\examples\greeting-service\build\libs>native-image --version
GraalVM Version 20.3.0 (Java Version 11.0.9+10-jvmci-20.3-b06)

  1. Build Native Image successfully
    D:\Code\self\micronaut\micronaut-spring\examples\greeting-service\build\libs>native-image --no-fallback -cp greeting-service-0.1.0.jar org.springframework.boot.loader.JarLauncher
    [org.springframework.boot.loader.jarlauncher:1392] classlist: 895.58 ms, 0.96 GB
    [org.springframework.boot.loader.jarlauncher:1392] (cap): 1,469.37 ms, 0.96 GB
    [org.springframework.boot.loader.jarlauncher:1392] setup: 2,667.71 ms, 0.96 GB
    [org.springframework.boot.loader.jarlauncher:1392] (clinit): 271.55 ms, 2.29 GB
    [org.springframework.boot.loader.jarlauncher:1392] (typeflow): 7,974.15 ms, 2.29 GB
    [org.springframework.boot.loader.jarlauncher:1392] (objects): 8,374.35 ms, 2.29 GB
    [org.springframework.boot.loader.jarlauncher:1392] (features): 257.57 ms, 2.29 GB
    [org.springframework.boot.loader.jarlauncher:1392] analysis: 17,142.97 ms, 2.29 GB
    [org.springframework.boot.loader.jarlauncher:1392] universe: 398.50 ms, 2.29 GB
    [org.springframework.boot.loader.jarlauncher:1392] (parse): 1,036.94 ms, 2.29 GB
    [org.springframework.boot.loader.jarlauncher:1392] (inline): 1,156.33 ms, 2.30 GB
    [org.springframework.boot.loader.jarlauncher:1392] (compile): 7,723.41 ms, 4.75 GB
    [org.springframework.boot.loader.jarlauncher:1392] compile: 10,609.65 ms, 4.75 GB
    [org.springframework.boot.loader.jarlauncher:1392] image: 1,466.48 ms, 4.75 GB
    [org.springframework.boot.loader.jarlauncher:1392] write: 415.26 ms, 4.75 GB
    [org.springframework.boot.loader.jarlauncher:1392] [total]: 33,708.75 ms, 4.75 GB

A .exe file named org.springframework.boot.loader.jarlauncher.exe created:
D:\Code\self\micronaut\micronaut-spring\examples\greeting-service\build\libs>
image

  1. run exe file failed.
    D:\Code\self\micronaut\micronaut-spring\examples\greeting-service\build\libs>org.springframework.boot.loader.jarlauncher.exe
    Exception in thread "main" java.lang.IllegalStateException: java.util.zip.ZipException: zip END header not found
    at org.springframework.boot.loader.ExecutableArchiveLauncher.(ExecutableArchiveLauncher.java:42)
    at org.springframework.boot.loader.JarLauncher.(JarLauncher.java:36)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
    Caused by: java.util.zip.ZipException: zip END header not found
    at java.util.zip.ZipFile$Source.zerror(ZipFile.java:1567)
    at java.util.zip.ZipFile$Source.findEND(ZipFile.java:1462)
    at java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1469)
    at java.util.zip.ZipFile$Source.(ZipFile.java:1274)
    at java.util.zip.ZipFile$Source.get(ZipFile.java:1237)
    at java.util.zip.ZipFile$CleanableResource.(ZipFile.java:727)
    at java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:844)
    at java.util.zip.ZipFile.(ZipFile.java:247)
    at java.util.zip.ZipFile.(ZipFile.java:177)
    at java.util.jar.JarFile.(JarFile.java:348)
    at java.util.jar.JarFile.(JarFile.java:319)
    at java.util.jar.JarFile.(JarFile.java:285)
    at org.springframework.boot.loader.jar.JarFile.(JarFile.java:119)
    at org.springframework.boot.loader.jar.JarFile.(JarFile.java:114)
    at org.springframework.boot.loader.jar.JarFile.(JarFile.java:100)
    at org.springframework.boot.loader.jar.JarFile.(JarFile.java:91)
    at org.springframework.boot.loader.archive.JarFileArchive.(JarFileArchive.java:61)
    at org.springframework.boot.loader.archive.JarFileArchive.(JarFileArchive.java:57)
    at org.springframework.boot.loader.Launcher.createArchive(Launcher.java:127)
    at org.springframework.boot.loader.ExecutableArchiveLauncher.(ExecutableArchiveLauncher.java:39)
    ... 2 more

Expected Behaviour

run exe file successfully!

Tell us what should happen
run exe file successfully!

Actual Behaviour

run exe file failed!

Tell us what happens instead

Environment Information

  • Operating System: Windows 10 with Windows 10 SDK & x64 Native Tools Command Prompt for VS 2019
  • Micronaut Version: micronaut-spring 3.0.0
  • JDK Version:
    D:\Code\self\micronaut\micronaut-spring\examples\greeting-service\build\libs>java -version
    openjdk version "11.0.9" 2020-10-20
    OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
    OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)

D:\Code\self\micronaut\micronaut-spring\examples\greeting-service\build\libs>native-image --version
GraalVM Version 20.3.0 (Java Version 11.0.9+10-jvmci-20.3-b06)

Example Application

image

  • [ ]

micronaut graal docker build issue

With micronautVersion=1.1.0.BUILD-SNAPSHOT
getting
Could not find or load main class io.micronaut.graal.reflect.GraalClassLoadingAnalyzer

io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [java.util.concurrent.ExecutorService, java.util.concurrent.ExecutorService]

Expected Behavior

No response

Actual Behaviour

One of my private Spring Boot applications is not able to upgrade to the latest Spring Boot version 2.6.6, it looks like the problem is not on the Spring Boot side, but probably on the micronaut-spring library side.

The application failed to start with this error:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.metrics.task.TaskExecutorMetricsAutoConfiguration': Unsatisfied dependency expressed through method 'bindTaskExecutorsToRegistry' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'java.util.concurrent.ExecutorService': FactoryBean threw exception on object creation; nested exception is io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [java.util.concurrent.ExecutorService, java.util.concurrent.ExecutorService]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.resolveMethodArguments(AutowiredAnnotationBeanPostProcessor.java:767)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:719)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
	at ***.***.***.***.***Application.main(***Application.java:62)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'java.util.concurrent.ExecutorService': FactoryBean threw exception on object creation; nested exception is io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [java.util.concurrent.ExecutorService, java.util.concurrent.ExecutorService]
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:176)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1884)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1284)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:267)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1607)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1571)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1490)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1347)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.resolveMethodArguments(AutowiredAnnotationBeanPostProcessor.java:759)
	... 20 common frames omitted
Caused by: io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [java.util.concurrent.ExecutorService, java.util.concurrent.ExecutorService]
	at io.micronaut.context.DefaultBeanContext.findConcreteCandidate(DefaultBeanContext.java:2429)
	at io.micronaut.context.DefaultApplicationContext.findConcreteCandidate(DefaultApplicationContext.java:455)
	at io.micronaut.context.DefaultBeanContext.lastChanceResolve(DefaultBeanContext.java:3253)
	at io.micronaut.context.DefaultBeanContext.findConcreteCandidateNoCache(DefaultBeanContext.java:3140)
	at io.micronaut.context.DefaultBeanContext.findConcreteCandidate(DefaultBeanContext.java:3054)
	at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2750)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1704)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1678)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:905)
	at io.micronaut.context.BeanLocator.findBean(BeanLocator.java:291)
	at io.micronaut.spring.beans.MicronautSpringBeanFactory.getObject(MicronautSpringBeanFactory.java:61)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:169)
	... 32 common frames omitted

It looks like Micronaut registering two beans of ExecutorService type. I have tried to find related logs, if I didn't misread them it shows me that two beans was registered by using ExecutorFactory.

2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Finding candidate beans for type: ExecutorService
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Resolved bean candidates [Definition: io.micronaut.scheduling.executor.ExecutorFactory, Definition: io.micronaut.http.netty.channel.DefaultEventLoopGroupRegistry] for type: ExecutorService
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Finding candidate beans for type: ExecutorConfiguration
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Resolved bean candidates [Definition: io.micronaut.scheduling.executor.ScheduledExecutorServiceConfig, Definition: io.micronaut.scheduling.executor.UserExecutorConfiguration, Definition: io.micronaut.scheduling.executor.IOExecutorServiceConfig] for type: ExecutorConfiguration
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Finalized bean definitions candidates: [Definition: io.micronaut.scheduling.executor.ScheduledExecutorServiceConfig, Definition: io.micronaut.scheduling.executor.IOExecutorServiceConfig]
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Finding candidate beans for type: EventLoopGroupConfiguration
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Resolved bean candidates [Definition: io.micronaut.http.netty.channel.DefaultEventLoopGroupConfiguration] for type: EventLoopGroupConfiguration
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Finalized bean definitions candidates: []
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Finalized bean definitions candidates: [Definition: io.micronaut.scheduling.executor.ExecutorFactory, Definition: io.micronaut.scheduling.executor.ExecutorFactory]
2022-04-01 22:21:49.339 DEBUG 37467 --- [           main] io.micronaut.context.DefaultBeanContext  : Searching for @Primary for type [ExecutorService] from candidates: [Definition: io.micronaut.scheduling.executor.ExecutorFactory, Definition: io.micronaut.scheduling.executor.ExecutorFactory] 
2022-04-01 22:21:49.340  WARN 37467 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.metrics.task.TaskExecutorMetricsAutoConfiguration': Unsatisfied dependency expressed through method 'bindTaskExecutorsToRegistry' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'java.util.concurrent.ExecutorService': FactoryBean threw exception on object creation; nested exception is io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [java.util.concurrent.ExecutorService, java.util.concurrent.ExecutorService]

Probably one of ExecutorService is scheduled and another one is io:

CleanShot 2022-04-02 at 06 30 24@2x

Steps To Reproduce

I'm unable to provide the sample application, which will reproduce this error. I'm happy to provide any required information (like logs, debug, etc) to be able to investigate this bug and found the root of the problem.

Environment Information

Spring Boot: 2.6.6
Micronaut: 3.4.1
Micronaut Spring: 4.1.0

Example Application

No response

Version

3.4.1

The @ConfigurationProperties annotation injects null values when decorates a @Bean method in a @Configuration class

Hi,
The ConfigurationProperties annotation injects null values when is used to decorate a Bean method in a Configuration class. I have forked the repository and added an example bean which is configured using the configuration properties annotation. The bean values are populated correctly using only Spring Boot dependencies but the bean configuration properties are populated with null values when Micronaut is used. Here is the commit with the example:
igarciaes@1fb0d4b
I am missing something?
Thanks!

java.lang.ClassNotFoundException: org.springframework.http.server.reactive.ServerHttpRequest

I'm trying to convert a Spring Boot v1.5.2 application to micronaut and following the guide (https://micronaut-projects.github.io/micronaut-spring/latest/guide/index.html) and the sample app (https://github.com/micronaut-projects/micronaut-spring/tree/master/examples/greeting-service) and getting below exception:

2019-07-31T14:11:22,282-05:00 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Error instantiating bean of type  [io.micronaut.http.bind.DefaultRequestBinderRegistry]

Message: org/springframework/http/server/reactive/ServerHttpRequest
Path Taken: new NettyHttpServer(NettyHttpServerConfiguration serverConfiguration,ApplicationContext applicationContext,Router router,[RequestArgumentSatisfier requestArgumentSatisfier],MediaTypeCodecRegistry mediaTypeCodecRegistry,NettyCustomizableResponseTypeHandlerRegistry customizableResponseTypeHandlerRegistry,StaticResourceResolver resourceResolver,ExecutorService ioExecutor,ThreadFactory threadFactory,ExecutorSelector executorSelector,NettyServerSslBuilder nettyServerSslBuilder,List outboundHandlers) --> new NettyRequestArgumentSatisfier([RequestBinderRegistry requestBinderRegistry]) --> new DefaultRequestBinderRegistry(ConversionService conversionService,[List binders])
io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [io.micronaut.http.bind.DefaultRequestBinderRegistry]

Message: org/springframework/http/server/reactive/ServerHttpRequest
Path Taken: new NettyHttpServer(NettyHttpServerConfiguration serverConfiguration,ApplicationContext applicationContext,Router router,[RequestArgumentSatisfier requestArgumentSatisfier],MediaTypeCodecRegistry mediaTypeCodecRegistry,NettyCustomizableResponseTypeHandlerRegistry customizableResponseTypeHandlerRegistry,StaticResourceResolver resourceResolver,ExecutorService ioExecutor,ThreadFactory threadFactory,ExecutorSelector executorSelector,NettyServerSslBuilder nettyServerSslBuilder,List outboundHandlers) --> new NettyRequestArgumentSatisfier([RequestBinderRegistry requestBinderRegistry]) --> new DefaultRequestBinderRegistry(ConversionService conversionService,[List binders])
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1333)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
	at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1623)
	at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1603)
	at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:885)
Disconnected from the target VM, address: '127.0.0.1:63967', transport: 'socket'
	at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:978)
	at io.micronaut.http.server.netty.$NettyRequestArgumentSatisfierDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1319)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
	at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1623)
	at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1603)
	at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:885)
	at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:978)
	at io.micronaut.http.server.netty.$NettyHttpServerDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1319)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
	at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1623)
	at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1603)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:903)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:506)
	at io.micronaut.context.BeanLocator.findBean(BeanLocator.java:133)
	at io.micronaut.runtime.Micronaut.start(Micronaut.java:69)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:274)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:260)
	at com.loblaw.loyalty.api.inquiry.InquiryServiceApplication.main(InquiryServiceApplication.java:55)
Caused by: java.lang.NoClassDefFoundError: org/springframework/http/server/reactive/ServerHttpRequest
	at io.micronaut.spring.web.bind.$ServerHttpRequestBinderDefinition.getTypeArgumentsMap(Unknown Source)
	at io.micronaut.context.AbstractBeanDefinition.getTypeArguments(AbstractBeanDefinition.java:211)
	at io.micronaut.inject.BeanDefinition.getTypeArguments(BeanDefinition.java:194)
	at io.micronaut.inject.BeanDefinition.getTypeParameters(BeanDefinition.java:206)
	at io.micronaut.inject.BeanDefinition.getTypeParameters(BeanDefinition.java:218)
	at io.micronaut.context.DefaultBeanContext$BeanKey.<init>(DefaultBeanContext.java:2471)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1277)
	at io.micronaut.context.DefaultBeanContext.addCandidateToList(DefaultBeanContext.java:2238)
	at io.micronaut.context.DefaultBeanContext.getBeansOfTypeInternal(DefaultBeanContext.java:2166)
	at io.micronaut.context.DefaultBeanContext.getBeansOfType(DefaultBeanContext.java:754)
	at io.micronaut.context.AbstractBeanDefinition.lambda$getBeansOfTypeForConstructorArgument$10(AbstractBeanDefinition.java:1084)
	at io.micronaut.context.AbstractBeanDefinition.resolveBeanWithGenericsFromConstructorArgument(AbstractBeanDefinition.java:1680)
	at io.micronaut.context.AbstractBeanDefinition.getBeansOfTypeForConstructorArgument(AbstractBeanDefinition.java:1079)
	at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:958)
	at io.micronaut.http.bind.$DefaultRequestBinderRegistryDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1319)
	... 24 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.http.server.reactive.ServerHttpRequest
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 40 common frames omitted

From what I can see, micronaut's io.micronaut.spring.web.bind.ServerHttpRequestBinder class depends on Spring webflux code (import org.springframework.http.server.reactive.ServerHttpRequest;), but my Spring Boot app doesn't use webflux at all.

I'm wondering if the ServerHttpRequestBinder bean should only be initialized, if webflux is on the classpath? Or am I missing something?

getBean("name") throws NullPointerException if the bean is not found

Using Grails 4.0.0.M1, if a bean is attempted to be loaded via getBean('foo') or using the BeanBuilder syntax of ref('foo'), a NullPointerException is thrown from the MicronautBeanFactory.

ava.lang.NullPointerException: null
        at io.micronaut.context.DefaultBeanContext.lambda$findBeanCandidates$29(DefaultBeanContext.java:1203)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
        at java.util.concurrent.ConcurrentLinkedQueue$CLQSpliterator.forEachRemaining(ConcurrentLinkedQueue.java:857)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at io.micronaut.context.DefaultBeanContext.findBeanCandidates(DefaultBeanContext.java:1223)
Comment
        at io.micronaut.context.DefaultApplicationContext.findBeanCandidates(DefaultApplicationContext.java:196)
        at io.micronaut.context.DefaultBeanContext.findConcreteCandidateNoCache(DefaultBeanContext.java:1834)
        at io.micronaut.context.DefaultBeanContext.lambda$findConcreteCandidate$50(DefaultBeanContext.java:1829)
        at io.micronaut.core.util.clhm.ConcurrentLinkedHashMap.lambda$compute$0(ConcurrentLinkedHashMap.java:721)
        at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1688)
        at io.micronaut.core.util.clhm.ConcurrentLinkedHashMap.compute(ConcurrentLinkedHashMap.java:733)
        at io.micronaut.core.util.clhm.ConcurrentLinkedHashMap.computeIfAbsent(ConcurrentLinkedHashMap.java:710)
        at io.micronaut.context.DefaultBeanContext.findConcreteCandidate(DefaultBeanContext.java:1828)
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1624)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:533)
        at io.micronaut.spring.context.factory.MicronautBeanFactory.doGetBean(MicronautBeanFactory.java:640)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:273)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105)
        at contextnullpointer.Application$_doWithSpring_closure1.doCall(Application.groovy:20)

I believe it should throw a NoSuchBeanDefinitionException instead.

Sample Grails 4 application (sorry, no Micronaut example):
https://github.com/longwa/grails4-contextNullPointer

NonUniqueBeanException thrown when using Micronaut Kafka module in Spring Boot

Exception is, which shouldn't happen:

Caused by: io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [io.micronaut.configuration.kafka.metrics.ConsumerKafkaMetricsReporter, io.micronaut.configuration.kafka.metrics.ProducerKafkaMetricsReporter]
        at io.micronaut.context.DefaultBeanContext.findConcreteCandidate(DefaultBeanContext.java:1517)
        at io.micronaut.context.DefaultApplicationContext.findConcreteCandidate(DefaultApplicationContext.java:358)
        at io.micronaut.context.DefaultBeanContext.lastChanceResolve(DefaultBeanContext.java:2043)
        at io.micronaut.context.DefaultBeanContext.findConcreteCandidateNoCache(DefaultBeanContext.java:1984)
        at io.micronaut.context.DefaultBeanContext.lambda$findConcreteCandidate$51(DefaultBeanContext.java:1933)
        at io.micronaut.core.util.clhm.ConcurrentLinkedHashMap.lambda$compute$0(ConcurrentLinkedHashMap.java:721)
        at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1688)
        at io.micronaut.core.util.clhm.ConcurrentLinkedHashMap.compute(ConcurrentLinkedHashMap.java:733)
        at io.micronaut.core.util.clhm.ConcurrentLinkedHashMap.computeIfAbsent(ConcurrentLinkedHashMap.java:710)
        at io.

Provide Maven example

First of all, congratulations for this amazing project.

I'm trying to use micronaut-spring with Maven (I'm stick in the past, I know). For that, I've tried to "merge" one micronaut example with the official micronaut-spring example (written with Gradle). I've been able to generate a working .jar, but when I try to create Graal native image, I have an error. It seems I am including some library in Maven .jar not included in Gradle .jar causing some trouble.

The project and error information is in this repository: https://github.com/codeurjc/micronaut-spring-graal-maven-example

If you have a Maven working example, please share with us and you can forget this issue.

Support for SpringBootServletInitializer

Within an app using SpringBootServletInitializer with spring, the app doesn't work on micronaut. Required to convert a spring boot app with servelet based startup as

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

	public static final String GITHUB_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";

	public static void main(String[] args) {
		System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
		SpringApplication.run(Application.class, args);
	}
	
	@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
	
	@Bean
	public Jackson2ObjectMapperBuilder jacksonBuilder() {
		Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
		builder
			.indentOutput(true)
			.simpleDateFormat(GITHUB_DATE_FORMAT)
			.propertyNamingStrategy(new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy());
		
		return builder;
	}
}```

Page not found when converting existing spring boot application to use micronaut

I took an existing spring boot application and am trying to use the micronaut-spring annotations to convert it to use micronaut. I have stripped it down to a really basic healthcheck endpoint. I don't see any compilation errors, and the app starts up successfully. When I hit the healthCheck endpoint, it says its not found. I guess ultimately I am looking for some pointers on how to troubleshoot this. I'm running the mvn command with -e and -X to try and get as much logging as possible, but as I said compile is fine and I see no issues. It's just ignoring my controller. Thank you!

http://localhost:8080/healthCheck
{"message":"Page Not Found","_links":{"self":{"href":"/healthCheck","templated":false}}}

my Pom file looks almost exactly like the example project here, save for some additional company specific jars.

output from console:

12:37:47.566 [nioEventLoopGroup-1-4] DEBUG io.micronaut.http.server.netty.NettyHttpServer - Server localhost:8080 Received Request: GET /healthCheck
12:37:47.568 [nioEventLoopGroup-1-4] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - Matching route GET - /healthCheck
12:37:47.571 [nioEventLoopGroup-1-4] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - No matching route found for URI /healthCheck and method GET
12:37:47.599 [nioEventLoopGroup-1-4] DEBUG io.micronaut.context.event.ApplicationEventPublisher - Publishing event: io.micronaut.http.context.event.HttpRequestReceivedEvent[source=GET /healthCheck]
12:37:47.600 [nioEventLoopGroup-1-4] DEBUG io.micronaut.context.DefaultBeanContext - Resolving beans for type: io.micronaut.context.event.ApplicationEventListener
12:37:47.612 [nioEventLoopGroup-1-4] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - Encoding emitted response object [Page Not Found] using codec: io.micronaut.jackson.codec.JsonMediaTypeCodec@3eb91815
12:37:47.615 [nioEventLoopGroup-1-4] DEBUG io.micronaut.context.event.ApplicationEventPublisher - Publishing event: io.micronaut.http.context.event.HttpRequestTerminatedEvent[source=GET /healthCheck]
12:37:47.617 [nioEventLoopGroup-1-4] DEBUG io.micronaut.context.DefaultBeanContext - Resolving beans for type: io.micronaut.context.event.ApplicationEventListener

Here is my application code

@SpringBootApplication
@Import({ApplicationConfig.class})
@ImportResource({ "classpath*:/META-INF/**/spring-bootstrap.xml"})
public class Application {

	protected static boolean IS_OS_WINDOWS = SystemUtils.IS_OS_WINDOWS;
	protected static final String LOCAL_SPRING_PROFILE = "local";
	protected static final String LOCAL_RTEID = "inte";
    protected static final String KEY_RTEID = "RTEID";

	public static void main(String[] args) {
		setLocalProperties();
		Micronaut.run(Application.class);
	}

	protected static void setLocalProperties() {
		if (IS_OS_WINDOWS) {
			System.setProperty(KEY_RTEID, System.getProperty(KEY_RTEID,LOCAL_RTEID));
                        System.setProperty("SPRING_PROFILES_ACTIVE",LOCAL_SPRING_PROFILE);

		}
	}
}

And my controller file

@RestController
public class HealthCheckResource {
	
	@Autowired
	RestTemplate restTemplate;
	
	@GetMapping("/healthCheck")
    public ResponseEntity<HealthResponse> getHealthCheck() {
        HealthResponse healthResponse = new HealthResponse();
        healthResponse.setStatus(HttpStatus.OK);
        return new ResponseEntity<HealthResponse>(healthResponse, HttpStatus.OK);
    }
}

class HealthResponse {
	HttpStatus status;

	public HttpStatus getStatus() {
		return status;
	}

	public void setStatus(HttpStatus status) {
		this.status = status;
	}

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.