micronaut-security: java.lang.ClassNotFoundException: io.micronaut.caffeine.cache.SSLA with Micronaut session and GraalVM

Some changes did in 1.3.x for micronaut-cache doesn’t play nice with GraalVM.

Steps to Reproduce

  • git clone https://github.com/micronaut-graal-tests/micronaut-security-session-graal
  • cd micronaut-security-session-graal
  • Use GraalVM
  • ./build-native-image.sh
  • ./security-session-graal

Expected Behaviour

The app should start. The application works with Micronaut 1.2.x.

Actual Behaviour

14:25:01.091 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Error instantiating bean of type  [io.micronaut.session.binder.SessionArgumentBinder]

Message: io.micronaut.caffeine.cache.SSLA
Path Taken: new NettyHttpServer(NettyHttpServerConfiguration serverConfiguration,ApplicationContext applicationContext,Router router,[RequestArgumentSatisfier requestArgumentSatisfier],MediaTypeCodecRegistry mediaTypeCodecRegistry,NettyCustomizableResponseTypeHandlerRegistry customizableResponseTypeHandlerRegistry,StaticResourceResolver resourceResolver,ExecutorService ioExecutor,ThreadFactory threadFactory,ExecutorSelector executorSelector,ServerSslBuilder serverSslBuilder,List outboundHandlers,EventLoopGroupFactory eventLoopGroupFactory,HttpCompressionStrategy httpCompressionStrategy,HttpContentProcessorResolver httpContentProcessorResolver) --> new NettyRequestArgumentSatisfier([RequestBinderRegistry requestBinderRegistry]) --> new DefaultRequestBinderRegistry(ConversionService conversionService,[List binders]) --> new SessionArgumentBinder([SessionStore sessionStore])
io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [io.micronaut.session.binder.SessionArgumentBinder]

Message: io.micronaut.caffeine.cache.SSLA
Path Taken: new NettyHttpServer(NettyHttpServerConfiguration serverConfiguration,ApplicationContext applicationContext,Router router,[RequestArgumentSatisfier requestArgumentSatisfier],MediaTypeCodecRegistry mediaTypeCodecRegistry,NettyCustomizableResponseTypeHandlerRegistry customizableResponseTypeHandlerRegistry,StaticResourceResolver resourceResolver,ExecutorService ioExecutor,ThreadFactory threadFactory,ExecutorSelector executorSelector,ServerSslBuilder serverSslBuilder,List outboundHandlers,EventLoopGroupFactory eventLoopGroupFactory,HttpCompressionStrategy httpCompressionStrategy,HttpContentProcessorResolver httpContentProcessorResolver) --> new NettyRequestArgumentSatisfier([RequestBinderRegistry requestBinderRegistry]) --> new DefaultRequestBinderRegistry(ConversionService conversionService,[List binders]) --> new SessionArgumentBinder([SessionStore sessionStore])
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1719)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2402)
	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:1095)
	at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:1007)
	at io.micronaut.session.binder.$SessionArgumentBinderDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1693)
	at io.micronaut.context.DefaultBeanContext.addCandidateToList(DefaultBeanContext.java:2723)
	at io.micronaut.context.DefaultBeanContext.getBeansOfTypeInternal(DefaultBeanContext.java:2635)
	at io.micronaut.context.DefaultBeanContext.getBeansOfType(DefaultBeanContext.java:924)
	at io.micronaut.context.AbstractBeanDefinition.lambda$getBeansOfTypeForConstructorArgument$9(AbstractBeanDefinition.java:1123)
	at io.micronaut.context.AbstractBeanDefinition.resolveBeanWithGenericsFromConstructorArgument(AbstractBeanDefinition.java:1761)
	at io.micronaut.context.AbstractBeanDefinition.getBeansOfTypeForConstructorArgument(AbstractBeanDefinition.java:1118)
	at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:984)
	at io.micronaut.http.bind.$DefaultRequestBinderRegistryDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1693)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2402)
	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:1095)
	at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:1007)
	at io.micronaut.http.server.netty.$NettyRequestArgumentSatisfierDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1693)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2402)
	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:1095)
	at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:1007)
	at io.micronaut.http.server.netty.$NettyHttpServerDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1693)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2402)
	at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2084)
	at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2058)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1115)
	at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:628)
	at io.micronaut.context.BeanLocator.findBean(BeanLocator.java:135)
	at io.micronaut.runtime.Micronaut.start(Micronaut.java:66)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:294)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:280)
	at example.micronaut.Application.main(Application.java:8)
Caused by: java.lang.IllegalStateException: io.micronaut.caffeine.cache.SSLA
	at io.micronaut.caffeine.cache.LocalCacheFactory.newBoundedLocalCache(LocalCacheFactory.java:101)
	at io.micronaut.caffeine.cache.BoundedLocalCache$BoundedLocalManualCache.<init>(BoundedLocalCache.java:3392)
	at io.micronaut.caffeine.cache.BoundedLocalCache$BoundedLocalManualCache.<init>(BoundedLocalCache.java:3388)
	at io.micronaut.caffeine.cache.Caffeine.build(Caffeine.java:988)
	at io.micronaut.session.InMemorySessionStore.newSessionCache(InMemorySessionStore.java:129)
	at io.micronaut.session.InMemorySessionStore.<init>(InMemorySessionStore.java:62)
	at io.micronaut.session.$InMemorySessionStoreDefinition.build(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1693)
	... 40 common frames omitted
Caused by: java.lang.ClassNotFoundException: io.micronaut.caffeine.cache.SSLA
	at com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:60)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:229)
	at io.micronaut.caffeine.cache.LocalCacheFactory.newBoundedLocalCache(LocalCacheFactory.java:95)
	... 47 common frames omitted

Environment Information

  • Operating System: Linux Mint
  • Micronaut Version: 1.3.4.BUILD-SNAPSHOT
  • JDK Version: 1.8

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 16 (13 by maintainers)

Most upvoted comments

@welovelain I got the “same” error when I tried to use micronaut-kubernetes with graalVM

I fixed it with this:

@TypeHint(
        value = {
                io.micronaut.kubernetes.client.v1.Port.class,
                io.micronaut.kubernetes.client.v1.Address.class,
                io.micronaut.kubernetes.client.v1.KubernetesObject.class,
                io.micronaut.kubernetes.client.v1.Metadata.class,
                io.micronaut.kubernetes.client.v1.endpoints.Endpoints.class,
                io.micronaut.kubernetes.client.v1.endpoints.EndpointsList.class,
                io.micronaut.kubernetes.client.v1.endpoints.EndpointsSubset.class,
                io.micronaut.kubernetes.client.v1.services.Service.class,
                io.micronaut.kubernetes.client.v1.services.ServiceList.class,
                io.micronaut.kubernetes.client.v1.services.ServiceSpec.class,
                io.micronaut.kubernetes.client.v1.pods.ContainerStatus.class,
                io.micronaut.kubernetes.client.v1.pods.Pod.class,
                io.micronaut.kubernetes.client.v1.pods.PodStatus.class,
                io.micronaut.kubernetes.client.v1.secrets.Secret.class,
                io.micronaut.kubernetes.client.v1.secrets.SecretList.class,
                io.micronaut.kubernetes.client.v1.configmaps.ConfigMap.class,
                io.micronaut.kubernetes.client.v1.configmaps.ConfigMapList.class,
                io.micronaut.kubernetes.client.v1.configmaps.ConfigMapWatchEvent.class,
        },
        typeNames = {
                "io.micronaut.caffeine.cache.SSAW",
                "io.micronaut.caffeine.cache.PSAW"
        },
        accessType = {
                TypeHint.AccessType.ALL_DECLARED_CONSTRUCTORS,
                TypeHint.AccessType.ALL_PUBLIC_METHODS,
                TypeHint.AccessType.ALL_DECLARED_FIELDS
        }
)
public class Application {

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

Also it would be great to add this settings to micronaut-kubernetes to make it easier to use.