Federico Mariani created CAMEL-24072:
----------------------------------------

             Summary: camel-jms: component-level transacted=true breaks 
ConnectionFactory autowiring - startup fails with "connectionFactory must be 
specified"
                 Key: CAMEL-24072
                 URL: https://issues.apache.org/jira/browse/CAMEL-24072
             Project: Camel
          Issue Type: Bug
          Components: camel-jms
    Affects Versions: 4.21.0
            Reporter: Federico Mariani
         Attachments: JmsTransactedAutowiredConnectionFactoryTest.java

h3. Problem
{{JmsComponent.doInit()}} guards the registry ConnectionFactory autowiring with 
{{configuration.getOrCreateTransactionManager() == null}} 
(JmsComponent.java:1129). With {{transacted=true}} and the default 
{{lazyCreateTransactionManager=true}}, {{getOrCreateTransactionManager()}} 
*eagerly creates* a {{JmsTransactionManager}} (JmsConfiguration.java:1258-1263 
-> 1877-1881), which calls {{getOrCreateConnectionFactory()}} -> 
{{createConnectionFactory()}} -> {{ObjectHelper.notNull(connectionFactory, 
"connectionFactory")}} - and throws, because the ConnectionFactory is still 
null: the registry autowiring that would supply it is the *body of the very if 
statement being evaluated*.

h3. Failure scenario
{{camel.component.jms.transacted=true}} plus exactly one {{ConnectionFactory}} 
bean in the registry (the standard camel-main / Spring Boot / Quarkus setup) -> 
context startup fails deterministically with {{IllegalArgumentException: 
connectionFactory must be specified}}. Removing {{transacted=true}} makes it 
start.

Workaround: {{lazyCreateTransactionManager=false}}.

h3. History
The guard itself is CAMEL-14213 (intentional: don't autowire a CF when a TM is 
configured). CAMEL-14220 changed {{getTransactionManager()}} -> 
{{getOrCreateTransactionManager()}} to fix camel-activemq, whose 
{{createConnectionFactory()}} override builds a CF from {{brokerURL}} - plain 
camel-jms has no such override, so it throws instead. No test pins this.

h3. Reproducer
Attached {{JmsTransactedAutowiredConnectionFactoryTest.java}} (place in 
{{components/camel-jms/src/test/java/org/apache/camel/component/jms/}}). No 
broker needed - the failure happens during component initialization.

----
_This issue was researched and filed by Claude Code on behalf of [~croway] 
(GitHub: Croway), as part of a deep code review of camel-jms and camel-amqp. A 
failing JUnit reproducer is attached; it fails deterministically on current 
main (4.22.0-SNAPSHOT)._



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to