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 {

Reply via email to