This is an automated email from the ASF dual-hosted git repository.
zhfeng pushed a commit to branch 3.8.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/3.8.x by this push:
new 896605ba67 Fix #6301 to resort the beans if priority is same the
default one wins (#6304) (#6307)
896605ba67 is described below
commit 896605ba67f84cb11c8df1d296f0e11724f22166
Author: Zheng Feng <[email protected]>
AuthorDate: Thu Aug 1 15:39:12 2024 +0800
Fix #6301 to resort the beans if priority is same the default one wins
(#6304) (#6307)
---
.../camel/quarkus/core/RuntimeBeanRepository.java | 33 ++++++++++++++++++++--
integration-test-groups/foundation/bean/pom.xml | 8 ++++++
.../camel/quarkus/component/bean/BeanResource.java | 10 +++++++
.../bean/src/main/resources/application.properties | 6 ++++
.../camel/quarkus/component/bean/BeanTest.java | 9 ++++++
integration-tests/foundation-grouped/pom.xml | 8 ++++++
6 files changed, 72 insertions(+), 2 deletions(-)
diff --git
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java
index deb85823c5..4522183835 100644
---
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java
+++
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java
@@ -17,6 +17,7 @@
package org.apache.camel.quarkus.core;
import java.lang.annotation.Annotation;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -27,9 +28,11 @@ import java.util.Set;
import io.quarkus.arc.Arc;
import io.quarkus.arc.ArcContainer;
+import io.quarkus.arc.InjectableBean;
import io.quarkus.arc.InstanceHandle;
import io.smallrye.common.annotation.Identifier;
import jakarta.enterprise.inject.AmbiguousResolutionException;
+import jakarta.enterprise.inject.Default;
import jakarta.enterprise.inject.literal.NamedLiteral;
import jakarta.enterprise.inject.spi.Bean;
import jakarta.enterprise.inject.spi.BeanManager;
@@ -163,8 +166,30 @@ public final class RuntimeBeanRepository implements
BeanRepository {
} else {
handles = container.listAll(type);
}
- if (handles.size() > 0) {
- return handles.get(0).get();
+
+ List<InstanceHandle<T>> sortedHandles = new
ArrayList<>(handles.size());
+ sortedHandles.addAll(handles);
+
+ if (sortedHandles.size() > 1) {
+ sortedHandles.sort((bean1, bean2) -> {
+ Integer priority2 = bean2.getBean().getPriority();
+ Integer priority1 = bean1.getBean().getPriority();
+
+ int result = priority2.compareTo(priority1);
+ // If the priority is same, the default bean wins
+ if (result == 0) {
+ if (isDefaultBean(bean1.getBean())) {
+ result = -1;
+ } else if (isDefaultBean(bean2.getBean())) {
+ result = 1;
+ }
+ }
+ return result;
+ });
+ }
+
+ if (sortedHandles.size() > 0) {
+ return sortedHandles.get(0).get();
}
}
return null;
@@ -177,4 +202,8 @@ public final class RuntimeBeanRepository implements
BeanRepository {
}
return Optional.empty();
}
+
+ private boolean isDefaultBean(InjectableBean<?> bean) {
+ return bean.isDefaultBean() ||
bean.getQualifiers().stream().anyMatch(q ->
q.annotationType().equals(Default.class));
+ }
}
diff --git a/integration-test-groups/foundation/bean/pom.xml
b/integration-test-groups/foundation/bean/pom.xml
index d48e821db8..72b48788af 100644
--- a/integration-test-groups/foundation/bean/pom.xml
+++ b/integration-test-groups/foundation/bean/pom.xml
@@ -48,6 +48,14 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-agroal</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-jdbc-h2</artifactId>
+ </dependency>
<!-- test dependencies -->
<dependency>
diff --git
a/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java
b/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java
index fc8450a354..0418a2d27c 100644
---
a/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java
+++
b/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java
@@ -21,6 +21,8 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
+import javax.sql.DataSource;
+
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
@@ -37,6 +39,7 @@ import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.quarkus.component.bean.cdi.Producers;
import org.apache.camel.quarkus.component.bean.model.Employee;
+import org.apache.camel.support.CamelContextHelper;
@Path("/bean")
@ApplicationScoped
@@ -202,4 +205,11 @@ public class BeanResource {
.map(b -> b.getName()).collect(Collectors.toSet());
}
+ @Path("/dataSource")
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String dataSourceBean() throws Exception {
+ DataSource ds = CamelContextHelper.findSingleByType(camelContext,
DataSource.class);
+ return ds.getConnection().getMetaData().getURL();
+ }
}
diff --git
a/integration-test-groups/foundation/bean/src/main/resources/application.properties
b/integration-test-groups/foundation/bean/src/main/resources/application.properties
index 06aeb9fd2b..5bfec94657 100644
---
a/integration-test-groups/foundation/bean/src/main/resources/application.properties
+++
b/integration-test-groups/foundation/bean/src/main/resources/application.properties
@@ -17,3 +17,9 @@
# A test value
my.foo.property = foo
+
+# DataSource Test
+quarkus.datasource.db-kind = h2
+
+quarkus.datasource."test".db-kind = h2
+quarkus.datasource."test".jdbc.url = jdbc:h2:mem:test
diff --git
a/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java
b/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java
index 5e61dc0d55..50b4ad8b84 100644
---
a/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java
+++
b/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java
@@ -265,4 +265,13 @@ public class BeanTest {
containsString("alternatingBean")));
}
+ @Test
+ public void testDataSourceBean() {
+ for (int i = 0; i < 10; i++) {
+ RestAssured.given()
+ .get("/bean/dataSource")
+ .then()
+ .body(containsString("mem:quarkus"));
+ }
+ }
}
diff --git a/integration-tests/foundation-grouped/pom.xml
b/integration-tests/foundation-grouped/pom.xml
index 740b26297c..4daf52e9ab 100644
--- a/integration-tests/foundation-grouped/pom.xml
+++ b/integration-tests/foundation-grouped/pom.xml
@@ -32,10 +32,18 @@
<!-- Regenerate the dependencies via `mvn process-resources -Pformat -N`
from the source tree root directory -->
<dependencies>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-agroal</artifactId>
+ </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jackson</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-jdbc-h2</artifactId>
+ </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jsonb</artifactId>