camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Simmons <kray...@gmail.com>
Subject Re: Proper way to initialize Transaction management for Camel in an Application Server
Date Thu, 19 Sep 2013 10:28:26 GMT
Yes I am. Same person btw, just a different email.

Sent from my iPad

> On Sep 19, 2013, at 4:00 AM, Claus Ibsen <claus.ibsen@gmail.com> wrote:
> 
> Hi
> 
> I have logged ticket to implement the empty methods in JndiRegistry
> https://issues.apache.org/jira/browse/CAMEL-6769
> 
> Just to be sure are you using?
> http://camel.apache.org/servletlistener-component.html
> 
>> On Wed, Sep 18, 2013 at 5:12 PM, kraythe . <kraythe@gmail.com> wrote:
>> Greetings, we are running Camel routes in JBoss AS7 and the problem I ran
>> into is that there is no transaction manager initialized to work with the
>> transacted routes. In my test code I did something like the following:
>> 
>>  @Override
>> 
>>  protected CamelContext createCamelContext() throws Exception {
>> 
>>    final SimpleRegistry registry = new SimpleRegistry();
>> 
>>    final CamelContext context = new DefaultCamelContext(registry);
>> 
>> 
>>    final BrokerService broker = getAMQBroker();
>> 
>>    final ActiveMQConnectionFactory amqcf =
>> newActiveMQConnectionFactory(broker.getTransportConnectors().get(0).getUri());
>> 
>> 
>>    final PlatformTransactionManager txMgr = newJmsTransactionManager(amqcf);
>> 
>>    registry.put("transactionManager", txMgr);
>> 
>> 
>>    final SpringTransactionPolicy txPolicy = new SpringTransactionPolicy();
>> 
>>    txPolicy.setTransactionManager(txMgr);
>> 
>>    txPolicy.setPropagationBehaviorName("PROPAGATION_REQUIRED");
>> 
>>    registry.put("required", txPolicy);
>> 
>> 
>>    final ActiveMQComponent amq = (ActiveMQComponent) context.getComponent(
>> "activemq");
>> 
>>    amq.setConnectionFactory(amqcf);
>> 
>>    return context;
>> 
>>  }
>> 
>> 
>> I tried the same thing in the Lifecycle class:
>> 
>>  @Override
>> 
>>  public void beforeStart(final ServletCamelContext context,
>> finalJndiRegistry registry)
>> throws Exception {
>> 
>>    final ActiveMQConnectionFactory amqcf = (ActiveMQConnectionFactory)
>> registry.lookup("java:/activemq/ConnectionFactory");
>> 
>>    final PlatformTransactionManager txMgr = newJmsTransactionManager(amqcf);
>> 
>>    registry.bind("camel-transactionManager", txMgr);
>> 
>> 
>>    final SpringTransactionPolicy txPolicy = new SpringTransactionPolicy();
>> 
>>    txPolicy.setTransactionManager(txMgr);
>> 
>>    txPolicy.setPropagationBehaviorName("PROPAGATION_REQUIRED");
>> 
>>    registry.bind("required", txPolicy);
>> 
>>  }
>> 
>> The similar code in the CamelContextLifecycle didn't work because Camel
>> does a findByTypeWithName on the registry when looking for a transaction
>> manager and if you dig into 2.11.1 code findByType for the JNDIRegistry
>> eventually leads you to a method that returns an empty map.
>> 
>>    public <T> Map<String, T> findByTypeWithName(Class<T> type)
{
>> 
>>        // not implemented so we return an empty map
>> 
>>        return Collections.emptyMap();
>> 
>>    }
>> 
>> As you can see this find will never work so as a result I get the error
>> that there is no platform transaction manager whenever I use a transacted
>> route.
>> 
>> Furthermore spring is off the table due to people here who hate spring and
>> cannot be shifted on that and have the power to make those decisions. So
>> how do I initialize a transaction manager for transacted routes in this
>> circumstance?
>> 
>> All help is appreciated.
> 
> 
> 
> -- 
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cibsen@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen

Mime
View raw message