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 2008/09/04 13:56:08 UTC

svn commit: r691983 - in /servicemix/smx3/trunk/core/servicemix-core/src: main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java test/java/org/apache/servicemix/jbi/messaging/ExchangeListenerTest.java

Author: gnodet
Date: Thu Sep  4 04:56:07 2008
New Revision: 691983

URL: http://svn.apache.org/viewvc?rev=691983&view=rev
Log:
SM-1550: Exchange listeners may not be receiving all events

Added:
    servicemix/smx3/trunk/core/servicemix-core/src/test/java/org/apache/servicemix/jbi/messaging/ExchangeListenerTest.java
Modified:
    servicemix/smx3/trunk/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java

Modified: servicemix/smx3/trunk/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java?rev=691983&r1=691982&r2=691983&view=diff
==============================================================================
--- servicemix/smx3/trunk/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java (original)
+++ servicemix/smx3/trunk/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java Thu Sep  4 04:56:07 2008
@@ -485,6 +485,16 @@
                 // if (messageExchangeImpl.getSyncSenderThread() != null) {
                 resumeTx(me);
                 // }
+                // Call input listeners
+                ExchangeListener[] l = (ExchangeListener[]) container.getListeners(ExchangeListener.class);
+                ExchangeEvent event = new ExchangeEvent(me, ExchangeEvent.EXCHANGE_ACCEPTED);
+                for (int i = 0; i < l.length; i++) {
+                    try {
+                        l[i].exchangeSent(event);
+                    } catch (Exception e) {
+                        LOG.warn("Error calling listener: " + e.getMessage(), e);
+                    }
+                }
                 result = true;
             } else {
                 // JBI 5.5.2.1.3: the exchange should be set to ERROR status

Added: servicemix/smx3/trunk/core/servicemix-core/src/test/java/org/apache/servicemix/jbi/messaging/ExchangeListenerTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/core/servicemix-core/src/test/java/org/apache/servicemix/jbi/messaging/ExchangeListenerTest.java?rev=691983&view=auto
==============================================================================
--- servicemix/smx3/trunk/core/servicemix-core/src/test/java/org/apache/servicemix/jbi/messaging/ExchangeListenerTest.java (added)
+++ servicemix/smx3/trunk/core/servicemix-core/src/test/java/org/apache/servicemix/jbi/messaging/ExchangeListenerTest.java Thu Sep  4 04:56:07 2008
@@ -0,0 +1,80 @@
+/*
+ * 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.messaging;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import javax.xml.namespace.QName;
+import javax.jbi.JBIException;
+import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.MessageExchange;
+
+import junit.framework.TestCase;
+import org.apache.servicemix.jbi.container.JBIContainer;
+import org.apache.servicemix.jbi.event.ExchangeListener;
+import org.apache.servicemix.jbi.event.ExchangeEvent;
+import org.apache.servicemix.jbi.api.ServiceMixClient;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.components.util.EchoComponent;
+
+public class ExchangeListenerTest extends TestCase {
+
+    protected JBIContainer container;
+
+    @Override
+    protected void setUp() throws Exception {
+        // Create jbi container
+        container = new JBIContainer();
+        container.setEmbedded(true);
+        container.setFlowName("st");
+        container.init();
+        container.start();
+    }
+
+    public void test() throws JBIException {
+        TestListener listener = new TestListener();
+        container.addListener(listener);
+
+        EchoComponent echo = new EchoComponent(new QName("echo"), "endpoint");
+        container.activateComponent(echo, "echo");
+
+        ServiceMixClient c = container.getClientFactory().createClient();
+        InOut me = c.createInOutExchange();
+        me.getInMessage().setContent(new StringSource("<hello/>"));
+        me.setService(new QName("echo"));
+        c.sendSync(me);
+        c.done(me);
+
+        assertEquals(6, listener.events.size());
+    }
+
+    public static class TestListener implements ExchangeListener {
+
+        public List<ExchangeEvent> events = new ArrayList<ExchangeEvent>();
+
+        public void exchangeSent(ExchangeEvent e) {
+            System.err.println((e.getType() == ExchangeEvent.EXCHANGE_ACCEPTED ? "accepted" : "sent    ") + " " + e.getExchange().getStatus() + " " + (e.getExchange().getRole() == MessageExchange.Role.CONSUMER ? "consumer" : "provider"));
+            events.add(e);
+        }
+
+        public void exchangeAccepted(ExchangeEvent e) {
+            System.err.println((e.getType() == ExchangeEvent.EXCHANGE_ACCEPTED ? "accepted" : "sent    ") + " " + e.getExchange().getStatus() + " " + (e.getExchange().getRole() == MessageExchange.Role.CONSUMER ? "consumer" : "provider"));
+            events.add(e);
+        }
+    }
+}