Author: boisvert
Date: Wed Mar  7 10:17:58 2007
New Revision: 515676

URL: http://svn.apache.org/viewvc?view=rev&rev=515676
Log:
Send message outside of afterCompletion() to avoid synchronization ordering and 
transaction blocking issues.

Modified:
    incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java

Modified: 
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java?view=diff&rev=515676&r1=515675&r2=515676
==============================================================================
--- incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java 
(original)
+++ incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeConsumer.java 
Wed Mar  7 10:17:58 2007
@@ -98,13 +98,18 @@
                 inonly.setInMessage(nmsg);
                 _ode._scheduler.registerSynchronizer(new 
Scheduler.Synchronizer() {
                     public void afterCompletion(boolean success) {
-                        if (success)
-                            try {
-                                _ode.getChannel().send(inonly);
-                            } catch (MessagingException e) {
-                                // TODO Auto-generated catch block
-                                e.printStackTrace();
-                            }
+                        if (success) {
+                            _ode._executorService.submit( new Runnable() {
+                                public void run() {
+                                    try {
+                                        _ode.getChannel().send(inonly);
+                                    } catch (MessagingException e) {
+                                        String errmsg = "Exception while 
sending in-only message to JBI for ODE mex " + odeMex;
+                                        __log.error(errmsg, e);
+                                    }
+                                }
+                            });
+                        }
                     }
 
                     public void beforeCompletion() {
@@ -119,14 +124,19 @@
                 inout.setInMessage(nmsg);
                 _ode._scheduler.registerSynchronizer(new 
Scheduler.Synchronizer() {
                     public void afterCompletion(boolean success) {
-                        if (success)
-                            try {
-                                
_outstandingExchanges.put(inout.getExchangeId(), odeMex.getMessageExchangeId());
-                                _ode.getChannel().send(inout);
-                            } catch (MessagingException e) {
-                                String errmsg = "Error sending request-only 
message to JBI for ODE mex " + odeMex;
-                                __log.error(errmsg, e);
-                            }
+                        if (success) {
+                            _ode._executorService.submit( new Runnable() {
+                                public void run() {
+                                    try {
+                                        
_outstandingExchanges.put(inout.getExchangeId(), odeMex.getMessageExchangeId());
+                                        _ode.getChannel().send(inout);
+                                    } catch (MessagingException e) {
+                                        String errmsg = "Exception while 
sending request-only message to JBI for ODE mex " + odeMex;
+                                        __log.error(errmsg, e);
+                                    }
+                                }
+                            });
+                        }
                     }
 
                     public void beforeCompletion() {


Reply via email to