This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 46f8c5e5d74e CAMEL-21913: jbang - make JPA easier to use and export
(#22195)
46f8c5e5d74e is described below
commit 46f8c5e5d74e6c1dbd747c52975aa3087a7f5b43
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Apr 9 11:14:06 2026 +0200
CAMEL-21913: jbang - make JPA easier to use and export (#22195)
* CAMEL-21913: jbang - make JPA easier to use and export
- Auto-download Hibernate ORM as JPA provider when jpa component is resolved
- Add Hibernate to known dependencies for automatic class resolution
- Auto-include Hibernate in exported projects when camel-jpa is used
- Map Hibernate to quarkus-hibernate-orm extension for Quarkus export
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* CAMEL-21913: Review fixes - remove overly broad known dep, add test
- Remove org.hibernate known-dependency prefix (too broad, would match
org.hibernate.validator). DependencyDownloaderComponentResolver already
handles Hibernate download for JPA component.
- Add shouldExportWithJpaAndHibernate test verifying Hibernate is included
in exports for all runtimes (main, Spring Boot, Quarkus).
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---------
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
.../dsl/jbang/core/commands/ExportBaseCommand.java | 5 ++++
.../main/resources/quarkus-dependencies.properties | 1 +
.../camel/dsl/jbang/core/commands/ExportTest.java | 29 ++++++++++++++++++++++
.../DependencyDownloaderComponentResolver.java | 6 +++++
4 files changed, 41 insertions(+)
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 7dd45c65c6a7..5ef2beaafc7c 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -713,6 +713,11 @@ public abstract class ExportBaseCommand extends
CamelCommand {
}
}
+ // automatic add hibernate as JPA provider when using camel-jpa
+ if (answer.stream().anyMatch(s -> s.contains("camel-jpa") ||
s.equals("camel:jpa"))) {
+ answer.add("mvn:org.hibernate.orm:hibernate-core");
+ }
+
// remove duplicate versions (keep first)
Map<String, String> versions = new HashMap<>();
Set<String> toBeRemoved = new HashSet<>();
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties
index f9eca1b8d5d7..d85aba89f032 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties
@@ -16,4 +16,5 @@
## ---------------------------------------------------------------------------
org.messaginghub\:pooled-jms = io.quarkiverse.messaginghub:quarkus-pooled-jms
+org.hibernate.orm\:hibernate-core = io.quarkus:quarkus-hibernate-orm
camel\:resilience4j =
org.apache.camel.quarkus:camel-quarkus-microprofile-fault-tolerance
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index 9689bbd50d5a..f5d2e31ad1ba 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -188,6 +188,35 @@ class ExportTest {
return command;
}
+ @ParameterizedTest
+ @MethodSource("runtimeProvider")
+ public void shouldExportWithJpaAndHibernate(RuntimeType rt) throws
Exception {
+ LOG.info("shouldExportWithJpaAndHibernate {}", rt);
+ Export command = new Export(new CamelJBangMain());
+ CommandLine.populateCommand(command, "--gav=examples:route:1.0.0",
"--dir=" + workingDir,
+ "--runtime=%s".formatted(rt.runtime()), "--dep=camel:jpa",
"target/test-classes/route.yaml");
+ int exit = command.doCall();
+
+ Assertions.assertEquals(0, exit);
+ Model model = readMavenModel();
+
+ if (rt == RuntimeType.main) {
+ Assertions.assertTrue(containsDependency(model.getDependencies(),
"org.apache.camel", "camel-jpa", null));
+ Assertions.assertTrue(
+ containsDependency(model.getDependencies(),
"org.hibernate.orm", "hibernate-core", null));
+ } else if (rt == RuntimeType.springBoot) {
+ Assertions.assertTrue(
+ containsDependency(model.getDependencies(),
"org.apache.camel.springboot", "camel-jpa-starter", null));
+ Assertions.assertTrue(
+ containsDependency(model.getDependencies(),
"org.hibernate.orm", "hibernate-core", null));
+ } else if (rt == RuntimeType.quarkus) {
+ Assertions.assertTrue(
+ containsDependency(model.getDependencies(),
"org.apache.camel.quarkus", "camel-quarkus-jpa", null));
+ Assertions.assertTrue(
+ containsDependency(model.getDependencies(), "io.quarkus",
"quarkus-hibernate-orm", null));
+ }
+ }
+
@ParameterizedTest
@MethodSource("runtimeProvider")
public void shouldExportLazyBean(RuntimeType rt) throws Exception {
diff --git
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
index e9ae59772898..3dc0847b11f0 100644
---
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
+++
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
@@ -108,6 +108,12 @@ public final class DependencyDownloaderComponentResolver
extends DefaultComponen
downloadLoader(quartz.getGroupId(), quartz.getArtifactId(),
quartz.getVersion());
}
}
+ if ("jpa".equals(name)) {
+ // include hibernate as JPA provider
+ if (!downloader.alreadyOnClasspath("org.hibernate.orm",
"hibernate-core", null)) {
+ downloader.downloadDependency("org.hibernate.orm",
"hibernate-core", "${hibernate-version}");
+ }
+ }
if ("activemq".equals(name) || "activemq6".equals(name)) {
// need to include JMS connection-pool (trigger class loader to
download correct JAR)
try {