You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/10/03 13:58:40 UTC
svn commit: r452441 - in /incubator/servicemix/trunk/servicemix-core/src:
main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java
test/java/org/apache/servicemix/jbi/nmr/flow/jca/JcaFlowWithTxLogTest.java
Author: gnodet
Date: Tue Oct 3 04:58:40 2006
New Revision: 452441
URL: http://svn.apache.org/viewvc?view=rev&rev=452441
Log:
SM-622: JCAFlow with Howl log throws STATUS_NO_TRANSACTION exception
Added:
incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/nmr/flow/jca/JcaFlowWithTxLogTest.java
Modified:
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java
Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java?view=diff&rev=452441&r1=452440&r2=452441
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java Tue Oct 3 04:58:40 2006
@@ -623,7 +623,9 @@
public Connector(ActiveMQDestination destination, MessageListener listener, boolean transacted) {
ra = new ActiveMQResourceAdapter();
ra.setConnectionFactory(connectionFactory);
- endpointFactory = new SingletonEndpointFactory(listener, transacted ? getTransactionManager() : null);
+ SingletonEndpointFactory ef = new SingletonEndpointFactory(listener, transacted ? getTransactionManager() : null);
+ ef.setName(INBOUND_PREFIX + broker.getContainer().getName());
+ endpointFactory = ef;
spec = new ActiveMQActivationSpec();
spec.setActiveMQDestination(destination);
}
Added: incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/nmr/flow/jca/JcaFlowWithTxLogTest.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/nmr/flow/jca/JcaFlowWithTxLogTest.java?view=auto&rev=452441
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/nmr/flow/jca/JcaFlowWithTxLogTest.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/nmr/flow/jca/JcaFlowWithTxLogTest.java Tue Oct 3 04:58:40 2006
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.jbi.nmr.flow.jca;
+
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.naming.Context;
+import javax.transaction.TransactionManager;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
+import org.apache.geronimo.transaction.ExtendedTransactionManager;
+import org.apache.geronimo.transaction.context.TransactionContextManager;
+import org.apache.geronimo.transaction.manager.TransactionLog;
+import org.apache.geronimo.transaction.manager.XidFactoryImpl;
+import org.apache.servicemix.MessageExchangeListener;
+import org.apache.servicemix.client.DefaultServiceMixClient;
+import org.apache.servicemix.components.util.ComponentSupport;
+import org.apache.servicemix.jbi.container.ActivationSpec;
+import org.apache.servicemix.jbi.container.JBIContainer;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.jbi.nmr.flow.Flow;
+import org.apache.xbean.spring.jndi.SpringInitialContextFactory;
+import org.jencks.factory.GeronimoTransactionManagerFactoryBean;
+import org.jencks.factory.HowlLogFactoryBean;
+import org.jencks.factory.TransactionContextManagerFactoryBean;
+import org.jencks.factory.TransactionManagerFactoryBean;
+
+/**
+ * @version $Revision: 426415 $
+ */
+public class JcaFlowWithTxLogTest extends TestCase {
+
+ private JBIContainer senderContainer = new JBIContainer();
+ private JBIContainer receiverContainer = new JBIContainer();
+ private BrokerService broker;
+ private TransactionManager tm;
+
+ public class MyEchoComponent extends ComponentSupport implements MessageExchangeListener {
+
+ public void onMessageExchange(MessageExchange exchange) throws MessagingException {
+ if(exchange.getStatus() == ExchangeStatus.ACTIVE && exchange instanceof InOut) {
+ InOut inOut = (InOut) exchange;
+ NormalizedMessage inMessage = inOut.getInMessage();
+ NormalizedMessage outMessage = inOut.createMessage();
+ outMessage.setContent(inMessage.getContent());
+ inOut.setOutMessage(outMessage);
+ send(inOut);
+ }
+ }
+
+ }
+
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ System.setProperty(Context.INITIAL_CONTEXT_FACTORY, SpringInitialContextFactory.class.getName());
+ System.setProperty(Context.PROVIDER_URL, "jndi.xml");
+
+ XidFactoryImpl xidFactory = new XidFactoryImpl();
+ HowlLogFactoryBean howlLogFactoryBean = new HowlLogFactoryBean();
+ howlLogFactoryBean.setXidFactory(xidFactory);
+ howlLogFactoryBean.setLogFileDir("target/txlog");
+ TransactionManagerFactoryBean tmcf = new TransactionManagerFactoryBean();
+ tmcf.setTransactionLog((TransactionLog) howlLogFactoryBean.getObject());
+ tmcf.afterPropertiesSet();
+ ExtendedTransactionManager etm = (ExtendedTransactionManager) tmcf.getObject();
+ TransactionContextManagerFactoryBean tcmfb = new TransactionContextManagerFactoryBean();
+ tcmfb.setTransactionManager(etm);
+ tcmfb.afterPropertiesSet();
+ TransactionContextManager tcm = (TransactionContextManager) tcmfb.getObject();
+ GeronimoTransactionManagerFactoryBean gtmfb = new GeronimoTransactionManagerFactoryBean();
+ gtmfb.setTransactionContextManager(tcm);
+ gtmfb.afterPropertiesSet();
+ tm = (TransactionManager) gtmfb.getObject();
+
+ broker = new BrokerService();
+ broker.setPersistenceAdapter(new MemoryPersistenceAdapter());
+ broker.addConnector("tcp://localhost:61616");
+ broker.start();
+
+ JCAFlow senderFlow = new JCAFlow();
+ senderFlow.setJmsURL("tcp://localhost:61616");
+ senderFlow.setTransactionContextManager(tcm);
+ senderContainer.setTransactionManager(tm);
+ senderContainer.setEmbedded(true);
+ senderContainer.setName("senderContainer");
+ senderContainer.setFlows(new Flow[] { senderFlow} );
+ senderContainer.setMonitorInstallationDirectory(false);
+ senderContainer.setAutoEnlistInTransaction(false);
+ senderContainer.init();
+ senderContainer.start();
+
+
+ JCAFlow receiverFlow = new JCAFlow();
+ receiverFlow.setJmsURL("tcp://localhost:61616");
+ receiverFlow.setTransactionContextManager(tcm);
+ receiverContainer.setTransactionManager(tm);
+ receiverContainer.setEmbedded(true);
+ receiverContainer.setName("receiverContainer");
+ receiverContainer.setFlows(new Flow[] { receiverFlow} );
+ receiverContainer.setMonitorInstallationDirectory(false);
+ receiverContainer.init();
+ receiverContainer.start();
+ }
+
+ protected void tearDown() throws Exception{
+ super.tearDown();
+ senderContainer.shutDown();
+ receiverContainer.shutDown();
+ broker.stop();
+ }
+
+ public void testClusteredInOut() throws Exception {
+ QName service = new QName("http://org.echo", "echo");
+ MyEchoComponent echoComponent = new MyEchoComponent();
+ echoComponent.setService(service);
+ echoComponent.setEndpoint("echo");
+ ActivationSpec activationSpec = new ActivationSpec("echo", echoComponent);
+ activationSpec.setService(service);
+ receiverContainer.activateComponent(activationSpec);
+ DefaultServiceMixClient client = new DefaultServiceMixClient(senderContainer);
+ InOut inOut = client.createInOutExchange(service, null, null);
+ NormalizedMessage inMessage = inOut.createMessage();
+ inMessage.setContent(new StringSource("<test/>"));
+ inOut.setInMessage(inMessage);
+ client.sendSync(inOut, 1000);
+ assertNotNull(inOut.getOutMessage());
+ }
+
+}