[jboss-svn-commits] JBL Code SVN: r26615 - in labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss: soa/esb/client and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue May 19 07:32:27 EDT 2009


Author: kevin.conner at jboss.com
Date: 2009-05-19 07:32:27 -0400 (Tue, 19 May 2009)
New Revision: 26615

Modified:
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
Log:
Pulled across 'special' cleanup of InVM couriers: JBESB-2523

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java	2009-05-19 11:21:37 UTC (rev 26614)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java	2009-05-19 11:32:27 UTC (rev 26615)
@@ -28,41 +28,25 @@
 
 public class DefaultInVMReplyToEpr extends InVMEpr {
 
-    private static ThreadLocal<InVMEPRThreadTracker> invmThreadReplyTracker = new ThreadLocal<InVMEPRThreadTracker>();
+    private static volatile long counter = 0;
 
     public DefaultInVMReplyToEpr(InVMEpr epr) {
-        super(getThreadEPR());
+        super(createEprAndCourier());
     }
 
-    private static EPR getThreadEPR() {
-        // We assign an InVMEpr/Courier to each thread
+    private static EPR createEprAndCourier() {
+        try {
+            InVMEpr epr;
 
-        InVMEPRThreadTracker tracker = invmThreadReplyTracker.get();
+            synchronized (DefaultInVMReplyToEpr.class) {
+                counter++;
+                epr = new InVMEpr(URI.create("invm://thread-" + Thread.currentThread().getId() + "-" + counter));
+            }
+            CourierFactory.getInstance().addInVMCourier(epr);
 
-        if(tracker == null) {
-            tracker = new InVMEPRThreadTracker();
-            invmThreadReplyTracker.set(tracker);
-        } else if(tracker.lastEPR != null) {
-            // Deactivate the last InVMCourier used on this thread...
-            CourierFactory.getInstance().removeInVMCourier(tracker.lastEPR);
-            tracker.lastEPR = null;
-        }
-
-        try {
-            // Create a brand new EPR for this invocation and register a
-            // new InVMCourier for it...
-            tracker.counter++;
-            tracker.lastEPR = new InVMEpr(URI.create("invm://thread-" + Thread.currentThread().getId() + "-" + tracker.counter));
-            CourierFactory.getInstance().addInVMCourier(tracker.lastEPR);
+            return epr;
         } catch (URISyntaxException e) {
             throw new RuntimeException("Unexpected Exception creating replyTo InVMEpr.", e);
         }
-
-        return tracker.lastEPR;
     }
-
-    private static class InVMEPRThreadTracker {
-        private InVMEpr lastEPR;
-        private long counter = 0;
-    }
 }
\ No newline at end of file

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2009-05-19 11:21:37 UTC (rev 26614)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2009-05-19 11:32:27 UTC (rev 26615)
@@ -34,6 +34,7 @@
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.MalformedEPRException;
 import org.jboss.soa.esb.addressing.PortReference;
+import org.jboss.soa.esb.addressing.eprs.InVMEpr;
 import org.jboss.soa.esb.addressing.util.DefaultReplyTo;
 import org.jboss.soa.esb.common.Configuration;
 import org.jboss.soa.esb.common.Environment;
@@ -622,12 +623,24 @@
 
                     throw new MessageDeliverException("Caught unexpected throwable during send. Bailing-out!", t);
                 } finally {
-                    CourierUtil.cleanCourier(courier);
+                    EPR replyToEpr = null;
+                    
+                    try {
+                        CourierUtil.cleanCourier(courier);
+                        // put back the old To since we will have changed it.
 
-                    // put back the old To since we will have changed it.
-
-                    call.setTo(currentToEpr) ;
-                    call.setReplyTo(currentReplyToEpr) ;
+                        replyToEpr = call.getReplyTo();
+                        call.setTo(currentToEpr);
+                        call.setReplyTo(currentReplyToEpr);
+                    } finally {
+                        // Need to do "special" cleanup for InVM replyTo couriers.  Of course, this may
+                        // not be most "pure" to the courier architecture, but we can't use Courier.cleanup because it
+                        // is getting called multiple times between async delivery and pickup, which totally breaks
+                        // InVM delivery because it zaps the in-mem queue.
+                        if (replyToEpr instanceof InVMEpr) {
+                            CourierFactory.getInstance().removeInVMCourier((InVMEpr) replyToEpr);
+                        }
+                    }
                 }
             }
 




More information about the jboss-svn-commits mailing list