You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2008/09/23 05:39:59 UTC

svn commit: r698084 - in /servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc: CxfBcProvider.java CxfBcProviderMessageObserver.java

Author: ffang
Date: Mon Sep 22 20:39:58 2008
New Revision: 698084

URL: http://svn.apache.org/viewvc?rev=698084&view=rev
Log:
[SM-1593]memory leak in cxf bc provider

Modified:
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java?rev=698084&r1=698083&r2=698084&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java Mon Sep 22 20:39:58 2008
@@ -114,6 +114,8 @@
     private Bus bus;
 
     private ConduitInitiator conduitInit;
+    
+    private Conduit conduit;
 
     private URI locationURI;
 
@@ -143,13 +145,10 @@
             ei.setAddress((String) newDestinationURI);
         }
         
-        Conduit conduit = conduitInit.getConduit(ei);
-        CxfBcProviderMessageObserver obs = new CxfBcProviderMessageObserver(
-                exchange, this);
-        conduit.setMessageObserver(obs);
         Message message = ep.getBinding().createMessage();
         message.put(MessageExchange.class, exchange);
         Exchange cxfExchange = new ExchangeImpl();
+        cxfExchange.put(MessageExchange.class, exchange);
 
         message.setExchange(cxfExchange);
         cxfExchange.setOutMessage(message);
@@ -484,6 +483,9 @@
                         ConduitInitiatorManager.class);
                 conduitInit = conduitMgr.getConduitInitiator(ei
                         .getTransportId());
+                conduit = conduitInit.getConduit(ei);
+                CxfBcProviderMessageObserver obs = new CxfBcProviderMessageObserver(this);
+                conduit.setMessageObserver(obs);
                 super.validate();
             }
         } catch (DeploymentException e) {

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java?rev=698084&r1=698083&r2=698084&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java Mon Sep 22 20:39:58 2008
@@ -59,13 +59,9 @@
 
     String contentType;
 
-    private MessageExchange messageExchange;
-
     private CxfBcProvider providerEndpoint;
 
-    public CxfBcProviderMessageObserver(MessageExchange exchange,
-            CxfBcProvider providerEndpoint) {
-        this.messageExchange = exchange;
+    public CxfBcProviderMessageObserver(CxfBcProvider providerEndpoint) {
         this.providerEndpoint = providerEndpoint;
     }
 
@@ -84,6 +80,7 @@
 
     public void onMessage(Message message) {
         try {
+            MessageExchange messageExchange = message.getExchange().get(MessageExchange.class);
             if (messageExchange.getStatus() != ExchangeStatus.ACTIVE) {
                 return;
             }
@@ -142,7 +139,7 @@
             soapMessage.setInterceptorChain(inChain);
             inChain.doIntercept(soapMessage);
            
-            setMessageStatus(soapMessage, boi);
+            setMessageStatus(soapMessage, boi, messageExchange);
             boolean txSync = messageExchange.getStatus() == ExchangeStatus.ACTIVE
                     && messageExchange.isTransacted()
                     && Boolean.TRUE.equals(messageExchange
@@ -165,7 +162,8 @@
         }
     }
 
-    private void setMessageStatus(SoapMessage soapMessage, BindingOperationInfo boi) throws MessagingException {
+    private void setMessageStatus(SoapMessage soapMessage, BindingOperationInfo boi, MessageExchange messageExchange) 
+        throws MessagingException {
         if (boi.getOperationInfo().isOneWay()) {
             messageExchange.setStatus(ExchangeStatus.DONE);
         } else if (soapMessage.get("jbiFault") != null