quarkusio / quarkus

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

Error using configured datasource #1517

Closed masini closed 4 years ago

masini commented 5 years ago

Creating a project from the template, another DataSource inside the application.properties file:

quarkus.datasource.validation.url: jdbc:postgresql://WMICTLM1P.local:5432/hibernate_db
quarkus.datasource.validation.driver: org.postgresql.Driver
quarkus.datasource.validation.username: hibernate
quarkus.datasource.validation.password: hibernate

and then injecting it into a JAX-RS resource:

@Inject
@Named("validation")
DataSource validationDatasource;

the validationDataSource contains a proxy that once called with a getConnection() raise this Exception:

Caused by: java.lang.NullPointerException
    at io.quarkus.agroal.runtime.DataSourceProducer_ProducerMethod_createNamedDataSource_6d361f1d1c1160c1fbbc012cdf8a7580ba82afde_681092c8a1782295cd0972d8e74b078a6bb1ffbd_ClientProxy.getConnection(Unknown Source)
    at org.acme.quickstart.GreetingResource.hello(GreetingResource.java:42)
    at org.acme.quickstart.GreetingResource_Subclass.hello$$superaccessor2(Unknown Source)
    at org.acme.quickstart.GreetingResource_Subclass$$function$$10.apply(Unknown Source)
    at io.quarkus.arc.InvocationContextImpl.interceptorChainCompleted(InvocationContextImpl.java:151)
    at io.quarkus.arc.InvocationContextImpl.proceed(InvocationContextImpl.java:171)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:94)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:48)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:60)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:42)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
    at io.quarkus.arc.InvocationContextImpl$InterceptorInvocation.invoke(InvocationContextImpl.java:263)
    at io.quarkus.arc.InvocationContextImpl.invokeNext(InvocationContextImpl.java:143)
    at io.quarkus.arc.InvocationContextImpl.proceed(InvocationContextImpl.java:167)
    at org.acme.quickstart.GreetingResource_Subclass.hello(Unknown Source)
    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.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:152)
    at org.jboss.resteasy.core.MethodInjectorImpl.lambda$invoke$3(MethodInjectorImpl.java:123)
    at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602)
    at java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:614)
    at java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:1983)
    at java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:110)
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:123)
    at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:543)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:418)
    at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:372)
    at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:362)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:374)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:343)
    at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invoke$1(ResourceMethodInvoker.java:317)
    at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:981)
    at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2124)
    at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:110)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:317)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:476)
    ... 50 more

The same configuration for the default DataSource works well.

LightGuard commented 5 years ago

Relates to #2088

LightGuard commented 5 years ago

You should be able to use the @Datasource(datasource-name) qualifier for this currently.

gsmet commented 4 years ago

Using @DataSource is the way to go.

I'm closing this one as we have tests checking it's working well with @DataSource.