Du you consider to raise a JIRA and attach a patch and unit test? http://camel.apache.org/contributing.html
Best, Christian On Thu, Feb 7, 2013 at 2:32 PM, xanko <xanko....@gmail.com> wrote: > I found a solution really simple... I edited directly the camel-hazelcast > component ^^ Indeed it's a mix between the components seda & hazelcast and > the transactions are never started. > > I don't know if it's the best solution but it works :) > > Prerequisite : > > The transactions are configured with camel > > First step, add the accessor into HazelcastSedaEndpoint.java to get the > hazelcast instance (See below) : > > public class HazelcastSedaEndpoint extends HazelcastDefaultEndpoint { > > // Attributs > private HazelcastInstance hazelcastInstance; > > public HazelcastSedaEndpoint(final HazelcastInstance hazelcastInstance, > final String uri, final HazelcastComponent component, final > HazelcastSedaConfiguration configuration) { > ... > this.hazelcastInstance = hazelcastInstance; > ... > } > > public HazelcastInstance getHazelcastInstance() { > return hazelcastInstance; > } > > } > > Second step, change the method "run" of HazelcastSedaConsumer.java to open > a > transaction before poll the message in seda queue : > > public void run() { > final BlockingQueue<?> queue = endpoint.getQueue(); > > while (queue != null && isRunAllowed()) { > final Exchange exchange = this.getEndpoint().createExchange(); > > final Transaction transaction = > endpoint.getHazelcastInstance().getTransaction(); > if (transaction != null && transaction.getStatus() == > Transaction.TXN_STATUS_NO_TXN) { > transaction.begin(); > } > try { > final Object body = > queue.poll(endpoint.getConfiguration().getPollInterval(), > TimeUnit.MILLISECONDS); > if (body != null) { > if (body instanceof DefaultExchangeHolder) { > DefaultExchangeHolder.unmarshal(exchange, > (DefaultExchangeHolder) body); > } else { > exchange.getIn().setBody(body); > } > try { > // process using the asynchronous routing engine > processor.process(exchange, new AsyncCallback() { > public void done(boolean asyncDone) { > // noop > } > }); > if (exchange.getException() != null) { > if (transaction != null) { > transaction.rollback(); > } > getExceptionHandler().handleException("Error > processing exchange", exchange, exchange.getException()); > } > } catch (Exception e) { > if (transaction != null) { > transaction.rollback(); > } > LOG.error("Hzlq Exception caught: " + e, e); > } > } > // It's OK > if (exchange.getException() == null && transaction != null > && transaction.getStatus() == Transaction.TXN_STATUS_ACTIVE) { > transaction.commit(); > } > } catch (InterruptedException e) { > if (LOG.isDebugEnabled()) { > LOG.debug("Hzlq Consumer Interrupted: " + e, e); > } > continue; > } catch (Throwable e) { > if (transaction != null) { > transaction.rollback(); > } > getExceptionHandler().handleException("Error processing > exchange", exchange, e); > } > } > > > Thanks to this change, my files in mapstore are deleted only when my > transaction is commited. > > > > > -- > View this message in context: > http://camel.465427.n5.nabble.com/camel-hazelcast-Transactions-tp5726943p5727121.html > Sent from the Camel - Users mailing list archive at Nabble.com. > --