helidon-io / helidon

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

4.x: OCI archetype server module throws `UnsatisfiedResolutionException` #8833

Open barchetta opened 1 month ago

barchetta commented 1 month ago

Environment Details

Problem Description

Running the OCI archetype project server results in an exception (see below). This works with 4.0.7. Two problems:

  1. The exception does not clearly indicate what class is not resolvable.
  2. The sample fails to run
Exception in thread "main" jakarta.enterprise.inject.UnsatisfiedResolutionException
    at java.base/java.util.Optional.orElseThrow(Optional.java:403)
    at io.helidon.integrations.oci.sdk.cdi.OciExtension.lambda$installBasicAdp$25(OciExtension.java:1176)
    at org.jboss.weld.bootstrap.events.configurator.BeanConfiguratorImpl$CreateCallback.create(BeanConfiguratorImpl.java:372)
    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.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:679)
    at org.jboss.weld.bean.builtin.InstanceImpl.getBeanInstance(InstanceImpl.java:262)
    at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:114)
    at org.jboss.weld.util.ForwardingWeldInstance.get(ForwardingWeldInstance.java:44)
    at io.helidon.integrations.oci.sdk.cdi.OciExtension.produceClient(OciExtension.java:1325)
    at io.helidon.integrations.oci.sdk.cdi.OciExtension.lambda$installServiceClient$27(OciExtension.java:1279)
    at org.jboss.weld.bootstrap.events.configurator.BeanConfiguratorImpl$CreateCallback.create(BeanConfiguratorImpl.java:372)
    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.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:679)
    at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:784)
    at org.jboss.weld.injection.ParameterInjectionPointImpl.getValueToInject(ParameterInjectionPointImpl.java:76)
    at org.jboss.weld.injection.StaticMethodInjectionPoint.getParameterValues(StaticMethodInjectionPoint.java:134)
    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.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:308)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:286)
    at jakarta.enterprise.inject.spi.ObserverMethod.notify(ObserverMethod.java:142)
    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:311)
    at io.helidon.common.context.Contexts.runInContext(Contexts.java:137)
    at io.helidon.microprofile.cdi.HelidonContainerImpl.start(HelidonContainerImpl.java:258)
    at io.helidon.microprofile.cdi.Main.main(Main.java:80)

Steps to reproduce

helidon init --version 4.0.8 --flavor mp --archetype oci --batch
cd oci-mp
mvn package
java -jar server/target/oci-mp-server.jar
barchetta commented 1 month ago

Possibly related to PR #8486

ljnelson commented 1 month ago

The root cause is this: https://github.com/helidon-io/helidon/blob/4.0.8/archetypes/archetypes/src/main/archetype/mp/oci/oci-mp.xml#L85

Those values are not documented as being supported by the OciExtension portable extension: https://helidon.io/docs/v4/apidocs/io.helidon.integrations.oci.sdk.cdi/io/helidon/integrations/oci/sdk/cdi/OciExtension.html#configuration-heading

This has been true for a while; see (arbitrarily) version 4.0.0: https://github.com/helidon-io/helidon/blob/4.0.0/integrations/oci/sdk/cdi/src/main/java/io/helidon/integrations/oci/sdk/cdi/OciExtension.java#L324-L330

barchetta commented 1 month ago

Work-around is to edit the server/src/main/resources/META-INF/*.properties files and change occurrences of:

For example:

oci.auth-strategy=config-file,instance-principals,resource-principal
ljnelson commented 1 month ago

An easier workaround is to supply values on the command line as system properties. Also note the OciExtension javadoc that lists supported keys and values.