helidon-io / helidon

Java libraries for writing microservices
https://helidon.io
Apache License 2.0
3.52k stars 566 forks source link

mp + database + ucp + oracledb fails at runtime with native-image #7357

Open romain-grecourt opened 1 year ago

romain-grecourt commented 1 year ago

Environment Details


An application created with the Helidon Starter (MP + database + ucp + oracledb) fails at runtime with native-image.

https://helidon.io/starter/3.2.2?step=5&flavor=mp&app-type=database&db.cp=ucp&db.server=oracledb

Compilation works fine with native image using JDK 17/Graal 23.0. Fails at runtime with:

2023.08.10 10:54:57 INFO io.helidon.common.LogConfig Thread[main,5,main]: Logging at runtime configured using classpath: /logging.properties
2023.08.10 10:54:57 INFO org.hibernate.jpa.internal.util.LogHelper Thread[main,5,main]: HHH000204: Processing PersistenceUnitInfo [name: pu1]
Exception in thread "main" org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load proxy class for bean Configurator Bean [class io.helidon.integrations.datasource.ucp.cdi.UCPBackedDataSourceExtension, types: UniversalConnectionPoolAdapter, PoolDataSourceImpl, CommonDataSource, DataSource, Object, Serializable, Referenceable, ObjectFactory, Wrapper, PoolDataSource, qualifiers: @Default @Any @Named] with class class java.lang.Object
    at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:450)
    at org.jboss.weld.bean.proxy.ProxyFactory.run(ProxyFactory.java:403)
    at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:395)
    at org.jboss.weld.bean.proxy.ClientProxyFactory.create(ClientProxyFactory.java:83)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:205)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.access$500(ClientProxyProvider.java:44)
    at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxyForType.apply(ClientProxyProvider.java:85)
    at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxyForType.apply(ClientProxyProvider.java:59)
    at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$new$0(ReentrantMapBackedComputingCache.java:55)
    at org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
    at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
    at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
    at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getCastValue(ReentrantMapBackedComputingCache.java:78)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:236)
    at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:688)
    at org.jboss.weld.bean.builtin.InstanceImpl.getBeanInstance(InstanceImpl.java:252)
    at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:114)
    at io.helidon.integrations.cdi.jpa.JtaDataSourceProvider.getDataSource(JtaDataSourceProvider.java:232)
    at io.helidon.integrations.cdi.jpa.JtaDataSourceProvider$Proxy$_$$_WeldClientProxy.getDataSource(Unknown Source)
    at io.helidon.integrations.cdi.jpa.PersistenceUnitInfoBean.getJtaDataSource(PersistenceUnitInfoBean.java:715)
    at java.base@17.0.6/java.lang.reflect.Method.invoke(Method.java:568)
    at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106)
    at io.helidon.integrations.cdi.jpa.PersistenceUnitInfo$_$$_WeldClientProxy.getJtaDataSource(Unknown Source)
    at org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor.getJtaDataSource(PersistenceUnitInfoDescriptor.java:48)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.normalizeDataAccess(EntityManagerFactoryBuilderImpl.java:958)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.normalizeSettings(EntityManagerFactoryBuilderImpl.java:597)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.mergeSettings(EntityManagerFactoryBuilderImpl.java:538)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:251)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:189)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:35)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:102)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:169)
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:142)
    at org.hibernate.jpa.HibernatePersistenceProvider$Proxy$_$$_WeldClientProxy.createContainerEntityManagerFactory(Unknown Source)
    at io.helidon.integrations.cdi.jpa.EntityManagerFactories.createContainerManagedEntityManagerFactory(EntityManagerFactories.java:189)
    at io.helidon.integrations.cdi.jpa.JpaExtension.lambda$addContainerManagedEntityManagerFactoryBeans$1(JpaExtension.java:1031)
    at org.jboss.weld.bootstrap.events.configurator.BeanConfiguratorImpl$CreateCallback.create(BeanConfiguratorImpl.java:372)
    at org.jboss.weld.bootstrap.events.configurator.BeanConfiguratorImpl$CreateCallback.access$700(BeanConfiguratorImpl.java:339)
    at org.jboss.weld.bootstrap.events.configurator.BeanConfiguratorImpl$ImmutableBean.create(BeanConfiguratorImpl.java:511)
    at org.jboss.weld.contexts.AbstractContext.get(AbstractContext.java:96)
    at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100)
    at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
    at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:102)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:105)
    at io.helidon.integrations.cdi.jpa.EntityManagerFactory$_$$_WeldClientProxy.isOpen(Unknown Source)
    at io.helidon.integrations.cdi.jpa.JpaExtension.onStartup(JpaExtension.java:2043)
    at java.base@17.0.6/java.lang.reflect.Method.invoke(Method.java:568)
    at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:95)
    at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:85)
    at org.jboss.weld.injection.MethodInvocationStrategy$DefaultMethodInvocationStrategy.invoke(MethodInvocationStrategy.java:144)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:330)
    at org.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:123)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:308)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:286)
    at jakarta.enterprise.inject.spi.ObserverMethod.notify(ObserverMethod.java:125)
    at org.jboss.weld.util.Observers.notify(Observers.java:166)
    at org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:285)
    at org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:273)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:96)
    at io.helidon.microprofile.cdi.HelidonContainerImpl.doStart(HelidonContainerImpl.java:340)
    at io.helidon.common.context.Contexts.runInContext(Contexts.java:137)
    at io.helidon.microprofile.cdi.HelidonContainerImpl.start(HelidonContainerImpl.java:250)
    at io.helidon.microprofile.cdi.Main.main(Main.java:80)
Caused by: java.lang.IllegalStateException: Cannot define class in native image. Class name: io.helidon.integrations.datasource.ucp.cdi.UniversalConnectionPoolAdapter$CommonDataSource$DataSource$ObjectFactory$PoolDataSource$Referenceable$Serializable$Wrapper$_$$_WeldClientProxy, original class: io.helidon.integrations.datasource.ucp.cdi.UCPBackedDataSourceExtension
    at io.helidon.microprofile.cdi.HelidonProxyServices.defineClassPrivateLookup(HelidonProxyServices.java:129)
    at io.helidon.microprofile.cdi.HelidonProxyServices.defineClass(HelidonProxyServices.java:108)
    at org.jboss.weld.bean.proxy.ProxyFactory.toClass(ProxyFactory.java:1067)
    at org.jboss.weld.bean.proxy.ProxyFactory.createProxyClass(ProxyFactory.java:625)
    at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:442)
    ... 63 more
ljnelson commented 7 months ago

See #8436 and #8199.