-
Notifications
You must be signed in to change notification settings - Fork 3k
Closed
Description
Describe the bug
Injecting an AgroalDataSource
causes @QuarkusTest
tests to fail.
Expected behavior
Tests to run without error.
Actual behavior
Attempting to run tests produces to following output without running any test code:
Jun 13, 2019 11:53:47 AM io.quarkus.deployment.QuarkusAugmentor run
INFO: Beginning quarkus augmentation
Jun 13, 2019 11:53:47 AM org.jboss.threads.Version <clinit>
INFO: JBoss Threads version 3.0.0.Beta4
org.junit.jupiter.api.extension.TestInstantiationException: TestInstanceFactory [io.quarkus.test.junit.QuarkusTestExtension] failed to instantiate test class [org.acme.datasource.GreetingResourceTest]: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkus.arc.deployment.ArcAnnotationProcessor#build threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type io.agroal.api.AgroalDataSource and qualifiers [@Default]
- java member: org.acme.datasource.GreetingResource#dataSource
- declared on CLASS bean [types=[org.acme.datasource.GreetingResource, java.lang.Object], qualifiers=[@Default, @Any], target=org.acme.datasource.GreetingResource]
- available beans:
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.invokeTestInstanceFactory(ClassTestDescriptor.java:314)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:289)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:281)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateAndPostProcessTestInstance(ClassTestDescriptor.java:269)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstancesProvider$2(ClassTestDescriptor.java:259)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstancesProvider$3(ClassTestDescriptor.java:263)
at java.util.Optional.orElseGet(Optional.java:267)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstancesProvider$4(ClassTestDescriptor.java:262)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:98)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:97)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75)
at java.util.ArrayList.forEach(ArrayList.java:1257)
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:139)
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:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.util.ArrayList.forEach(ArrayList.java:1257)
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:139)
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:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
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.DefaultLauncher.execute(DefaultLauncher.java:229)
at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkus.arc.deployment.ArcAnnotationProcessor#build threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type io.agroal.api.AgroalDataSource and qualifiers [@Default]
- java member: org.acme.datasource.GreetingResource#dataSource
- declared on CLASS bean [types=[org.acme.datasource.GreetingResource, java.lang.Object], qualifiers=[@Default, @Any], target=org.acme.datasource.GreetingResource]
- available beans:
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
at io.quarkus.runner.RuntimeRunner.run(RuntimeRunner.java:145)
at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:236)
at io.quarkus.test.junit.QuarkusTestExtension.createTestInstance(QuarkusTestExtension.java:302)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.invokeTestInstanceFactory(ClassTestDescriptor.java:299)
... 47 more
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkus.arc.deployment.ArcAnnotationProcessor#build threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type io.agroal.api.AgroalDataSource and qualifiers [@Default]
- java member: org.acme.datasource.GreetingResource#dataSource
- declared on CLASS bean [types=[org.acme.datasource.GreetingResource, java.lang.Object], qualifiers=[@Default, @Any], target=org.acme.datasource.GreetingResource]
- available beans:
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
at io.quarkus.builder.Execution.run(Execution.java:124)
at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:137)
at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:113)
at io.quarkus.runner.RuntimeRunner.run(RuntimeRunner.java:110)
... 50 more
Caused by: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type io.agroal.api.AgroalDataSource and qualifiers [@Default]
- java member: org.acme.datasource.GreetingResource#dataSource
- declared on CLASS bean [types=[org.acme.datasource.GreetingResource, java.lang.Object], qualifiers=[@Default, @Any], target=org.acme.datasource.GreetingResource]
- available beans:
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:804)
at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:294)
at io.quarkus.arc.processor.BeanProcessor.process(BeanProcessor.java:156)
at io.quarkus.arc.deployment.ArcAnnotationProcessor.build(ArcAnnotationProcessor.java:282)
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 io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:507)
at io.quarkus.builder.BuildContext.run(BuildContext.java:414)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1538)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1429)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:479)
Caused by: javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type io.agroal.api.AgroalDataSource and qualifiers [@Default]
- java member: org.acme.datasource.GreetingResource#dataSource
- declared on CLASS bean [types=[org.acme.datasource.GreetingResource, java.lang.Object], qualifiers=[@Default, @Any], target=org.acme.datasource.GreetingResource]
- available beans:
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
- PRODUCER METHOD bean [types=[java.io.Serializable, java.sql.Wrapper, java.lang.AutoCloseable, javax.sql.CommonDataSource, javax.sql.DataSource, io.agroal.api.AgroalDataSource, java.lang.Object], qualifiers=[@Default, @Any], target=io.agroal.api.AgroalDataSource createDefaultDataSource(), declaringBean=io.quarkus.agroal.runtime.DataSourceProducer]
at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:393)
at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:366)
at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:286)
... 14 more
To Reproduce
Steps to reproduce the behavior:
- Create project with
mvn io.quarkus:quarkus-maven-plugin:0.16.1:create -DprojectGroupId=org.acme -DprojectArtifactId=agroal-datasources -DclassName="org.acme.datasource.GreetingResource" -Dpath="/hello" -Dextentions="agroal,jdbc-h2,narayana-jta"
@Inject
anAgroalDataSource
inGreetingResource
- Configure a data source in application.properties
- Run GreetingResourceTest
Configuration
quarkus.datasource.url=jdbc:h2:tcp://localhost/mem:default
quarkus.datasource.driver=org.h2.Driver
quarkus.datasource.username=username-default
Environmen:
- Output of
uname -a
orver
: Linux graaf 5.1.7-1-default Switch to the Maven distributed copy of the SubstrateVM annotations #1 SMP Tue Jun 4 07:56:54 UTC 2019 (55f2451) x86_64 x86_64 x86_64 GNU/Linux - Output of
java -version
:
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (IcedTea 3.12.0) (build 1.8.0_212-b4 suse-1.2-x86_64)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
- GraalVM version (if different from Java): N/A
- Quarkus version or git rev: 0.16.1
Additional context
The application itself starts correctly and it doesn't matter if every bean which injects AgroalDataSource
is actually overriden by an @Alternative
bean. Also happens with postgresql through agroal.