[
https://issues.apache.org/jira/browse/CAMEL-26106?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jiri Ondrusek updated CAMEL-26106:
----------------------------------
Fix Version/s: (was: 4.22.3)
> camel-jpa: don't hard-wire the Spring based DefaultTransactionStrategy as the
> default transaction strategy
> ----------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26106
> URL: https://issues.apache.org/jira/browse/CAMEL-26106
> Project: Camel
> Issue Type: Improvement
> Components: camel-jpa
> Reporter: Jiri Ondrusek
> Assignee: Jiri Ondrusek
> Priority: Minor
> Fix For: 4.24.0
>
>
> camel-jpa creates the Spring based {{DefaultTransactionStrategy}}
> (spring-orm/spring-tx {{TransactionTemplate}}) with {{new}} whenever no
> {{TransactionStrategy}} is configured (4.23.0):
> * {{JpaComponent.createTransactionStrategy()}} (JpaComponent.java:188)
> * {{JpaEndpoint.createTransactionStrategy()}} (JpaEndpoint.java:593-594)
> * {{JpaMessageIdRepository.createDefaultTransactionStrategy()}}, used by the
> 2-arg constructor (JpaMessageIdRepository.java:61, 80-81)
> * {{JpaKeyValueRepository.doInit()}} (JpaKeyValueRepository.java:478-479)
> Runtimes without Spring can't use these defaults, even when they provide
> their own {{TransactionStrategy}}. Camel Quarkus excludes Spring from
> camel-jpa, removes {{DefaultTransactionStrategy}} and patches all 4 call
> sites by bytecode transformation to use its own
> {{QuarkusTransactionStrategy}}. Without that, GraalVM native builds fail as
> soon as one of these methods is reachable, e.g. when camel-management
> registers the repositories for reflection (apache/camel-quarkus#9385):
> {noformat}
> Discovered unresolved type during parsing:
> org.apache.camel.component.jpa.DefaultTransactionStrategy
> at JpaMessageIdRepository.<init>(JpaMessageIdRepository.java:61)
> {noformat}
> *Proposal:* when no strategy is set, first look up a {{TransactionStrategy}}
> in the registry ({{findSingleByType}}), and only then fall back to
> {{DefaultTransactionStrategy}}, created without a hard reference in these
> classes (e.g. one small factory method in a single place, or loaded via
> {{FactoryFinder}}). Runtimes like Camel Quarkus can then register their
> strategy as a bean and drop their bytecode transformations. Existing Spring
> users see no change.
> *Backport:* please also to 4.22.x (LTS), so Camel Quarkus releases on that
> line can remove their workaround as well. There {{JpaKeyValueRepository}}
> doesn't exist, so it covers the other 3 call sites.
> _Generated with [Claude Code|https://claude.com/claude-code] on behalf of
> [~jondruse]_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)