[jboss-svn-commits] JBL Code SVN: r25241 - in labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb: couriers and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 12 09:05:17 EST 2009


Author: tfennelly
Date: 2009-02-12 09:05:17 -0500 (Thu, 12 Feb 2009)
New Revision: 25241

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java
Log:
https://jira.jboss.org/jira/browse/JBESB-2398

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java	2009-02-12 09:59:56 UTC (rev 25240)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/addressing/eprs/DefaultInVMReplyToEpr.java	2009-02-12 14:05:17 UTC (rev 25241)
@@ -19,7 +19,6 @@
 
 package org.jboss.internal.soa.esb.addressing.eprs;
 
-import org.jboss.internal.soa.esb.couriers.InVMCourier;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.eprs.InVMEpr;
 import org.jboss.soa.esb.couriers.CourierFactory;
@@ -29,7 +28,7 @@
 
 public class DefaultInVMReplyToEpr extends InVMEpr {
 
-    private static ThreadLocal<InVMEpr> invmReplyToEPRTL = new ThreadLocal<InVMEpr>();
+    private static ThreadLocal<InVMEPRThreadTracker> invmThreadReplyTracker = new ThreadLocal<InVMEPRThreadTracker>();
 
     public DefaultInVMReplyToEpr(InVMEpr epr) {
         super(getThreadEPR());
@@ -38,23 +37,32 @@
     private static EPR getThreadEPR() {
         // We assign an InVMEpr/Courier to each thread
 
-        InVMEpr threadEPR = invmReplyToEPRTL.get();
+        InVMEPRThreadTracker tracker = invmThreadReplyTracker.get();
 
-        if(threadEPR == null) {
-            try {
-                threadEPR = new InVMEpr(URI.create("invm://thread-" + Thread.currentThread().getId()));
-                invmReplyToEPRTL.set(threadEPR);
-                CourierFactory.getInstance().addInVMCourier(threadEPR);
-            } catch (URISyntaxException e) {
-                throw new RuntimeException("Unexpected Exception creating replyTo InVMEpr.", e);
-            }
+        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;
         }
 
-        // Rest the courier in case there are stale messages there
-        // waiting to be picked up...
-        InVMCourier threadCourier = CourierFactory.getInstance().getInVMCourier(threadEPR);
-        threadCourier.reset();
+        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);
+        } catch (URISyntaxException e) {
+            throw new RuntimeException("Unexpected Exception creating replyTo InVMEpr.", e);
+        }
 
-        return threadEPR;
+        return tracker.lastEPR;
     }
+
+    private static class InVMEPRThreadTracker {
+        private InVMEpr lastEPR;
+        private long counter = 0;
+    }
 }
\ No newline at end of file

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java	2009-02-12 09:59:56 UTC (rev 25240)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java	2009-02-12 14:05:17 UTC (rev 25241)
@@ -336,6 +336,11 @@
 
     public void setActive(boolean active) {
         isActive = active;
+
+        if(!active && !messageQueue.isEmpty()) {
+            logger.error("Deactivated non-empty InVM Queue.  Undelivered messages will be lost.");
+            messageQueue.clear();
+        }
     }
 
     public void clean() {




More information about the jboss-svn-commits mailing list