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 2007/06/27 10:34:11 UTC

svn commit: r551091 - in /incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src: main/java/org/apache/servicemix/bean/ main/java/org/apache/servicemix/bean/support/ test/java/org/apache/servicemix/bean/ test/java/org/apache/servicem...

Author: gnodet
Date: Wed Jun 27 01:34:09 2007
New Revision: 551091

URL: http://svn.apache.org/viewvc?view=rev&rev=551091
Log:
SM-892: memory leak in org.apache.servicemix.bean.BeanEndpoint

Modified:
    incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java
    incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java
    incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java
    incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java
    incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java

Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java Wed Jun 27 01:34:09 2007
@@ -393,8 +393,8 @@
     protected void checkEndOfRequest(Request request, Object corId) {
         if (request.getExchange().getStatus() != ExchangeStatus.ACTIVE) {
             ReflectionUtils.callLifecycleMethod(request.getBean(), PreDestroy.class);
-            request.setBean(null);
-            request.setExchange(null);
+            //request.setBean(null);
+            //request.setExchange(null);
             requests.remove(corId);
         }
     }

Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/main/java/org/apache/servicemix/bean/support/Request.java Wed Jun 27 01:34:09 2007
@@ -27,10 +27,10 @@
 public class Request {
     private Object bean;
     private MessageExchange exchange;
-    private Set<String> sentExchanges = new HashSet<String>();
+    private Set<String> sentExchanges;
     // Keep track of callbacks already called, so that the same callback
     // can not be called twice
-    private Map<Method, Boolean> callbacks = new HashMap<Method, Boolean>();
+    private Map<Method, Boolean> callbacks;
     
     public Request() {
     }
@@ -69,6 +69,9 @@
      * @param id the id of the exchange sent 
      */
     public void addSentExchange(String id) {
+        if (sentExchanges == null) {
+            sentExchanges = new HashSet<String>();
+        }
         sentExchanges.add(id);
     }
 
@@ -76,7 +79,10 @@
      * @return the callbacks
      */
     public Map<Method, Boolean> getCallbacks() {
+        if (callbacks == null) {
+            callbacks = new HashMap<Method, Boolean>();
+        }
         return callbacks;
     }
 
-}
\ No newline at end of file
+}

Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/ListenerBeanEndpointTest.java Wed Jun 27 01:34:09 2007
@@ -18,6 +18,7 @@
 
 import javax.jbi.messaging.ExchangeStatus;
 import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.InOut;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.servicedesc.ServiceEndpoint;
 
@@ -46,6 +47,30 @@
         exchange.setEndpoint(se);
         exchange.getInMessage().setContent(new StringSource("<hello>world</hello>"));
         client.sendSync(exchange);
+
+        assertExchangeWorked(exchange);
+
+        ListenerBean bean = (ListenerBean) getBean("listenerBean");
+        MessageExchange answer = bean.getLastExchange();
+
+        log.info("Bean's process() method has been invoked: " + answer);
+
+        assertNotNull("Bean's process() method should bave been invoked", answer);
+    }
+
+    public void testSendingInOutToDynamicEndpointForExchangeProcessorBeanWithFooOperation() throws Exception {
+        // now lets make a request on this endpoint
+        DefaultServiceMixClient client = new DefaultServiceMixClient(jbi);
+
+        DocumentFragment epr = URIResolver.createWSAEPR("bean:listenerBean");
+        ServiceEndpoint se = client.getContext().resolveEndpointReference(epr);
+        assertNotNull("We should find a service endpoint!", se);
+
+        InOut exchange = client.createInOutExchange();
+        exchange.setEndpoint(se);
+        exchange.getInMessage().setContent(new StringSource("<hello>world</hello>"));
+        client.sendSync(exchange);
+        client.done(exchange);
 
         assertExchangeWorked(exchange);
 

Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/SpringComponentTest.java Wed Jun 27 01:34:09 2007
@@ -18,6 +18,7 @@
 
 import javax.jbi.messaging.ExchangeStatus;
 import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.InOut;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
 import javax.xml.namespace.QName;
@@ -50,6 +51,24 @@
         log.info("The bean has been invoked: " + bean.getLastExchange());
     }
 
+    public void testSendingInOutToStaticEndpoint() throws Exception {
+        DefaultServiceMixClient client = new DefaultServiceMixClient(jbi);
+        InOut me = client.createInOutExchange();
+        me.setService(new QName("urn:test", "service"));
+        NormalizedMessage message = me.getInMessage();
+
+        message.setProperty("name", "cheese");
+        message.setContent(new StringSource("<hello>world</hello>"));
+
+        client.sendSync(me);
+        client.done(me);
+        assertExchangeWorked(me);
+
+        ListenerBean bean = (ListenerBean) getBean("listenerBean");
+        assertNotNull("Bean should bave been invoked", bean.getLastExchange());
+
+        log.info("The bean has been invoked: " + bean.getLastExchange());
+    }
 
     protected void assertExchangeWorked(MessageExchange me) throws Exception {
         if (me.getStatus() == ExchangeStatus.ERROR) {

Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java?view=diff&rev=551091&r1=551090&r2=551091
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-bean/src/test/java/org/apache/servicemix/bean/beans/ListenerBean.java Wed Jun 27 01:34:09 2007
@@ -19,12 +19,14 @@
 import javax.annotation.Resource;
 import javax.jbi.messaging.DeliveryChannel;
 import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.MessagingException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.servicemix.MessageExchangeListener;
+import org.apache.servicemix.jbi.util.MessageUtil;
 
 /**
  * A simple POJO which implements the {@link MessageExchangeListener} interface
@@ -44,8 +46,13 @@
     public void onMessageExchange(MessageExchange exchange) throws MessagingException {
         this.lastExchange = exchange;
         LOG.info("Received exchange: " + exchange);
-        exchange.setStatus(ExchangeStatus.DONE);
-        channel.send(exchange);
+        if (exchange instanceof InOnly) {
+            exchange.setStatus(ExchangeStatus.DONE);
+            channel.send(exchange);
+        } else if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
+            MessageUtil.transferInToOut(exchange, exchange);
+            channel.send(exchange);
+        }
     }
 
     public MessageExchange getLastExchange() {