You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by de...@apache.org on 2006/03/06 09:12:51 UTC

svn commit: r383492 - in /webservices/axis2/trunk/java/modules/core/src/org/apache/axis2: context/MessageContext.java description/OutOnlyAxisOperation.java engine/AxisEngine.java

Author: deepal
Date: Mon Mar  6 00:12:49 2006
New Revision: 383492

URL: http://svn.apache.org/viewcvs?rev=383492&view=rev
Log:
-moved thread creation logic from OutOnlyOperationClient to AxisEngine , and operation client will be set a flag in msgctx
if he want to invoke the transport sender in a separate thread 

Modified:
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java?rev=383492&r1=383491&r2=383492&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/context/MessageContext.java Mon Mar  6 00:12:49 2006
@@ -40,7 +40,7 @@
     public final static int IN_FAULT_FLOW = 3;
 
     public final static int OUT_FLOW = 2;
-    public final static int OUT_FAUTT_FLOW = 4;
+    public final static int OUT_FAULT_FLOW = 4;
 
     public static final String REMOTE_ADDR = "REMOTE_ADDR";
 
@@ -87,6 +87,13 @@
     // to keep a ref to figure out which path your are in the execution (send or
     // receive)
     public int FLOW = IN_FLOW;
+
+    /**
+     * To invoke fireAndforget method we have to hand over transport sening logic to a thread
+     * other wise user has to wait till it get transport response (in the case of HTTP its HTTP
+     * 202)
+     */
+    public static final String TRANSPORT_NON_BLOCKING = "transportNonBlocking";
 
     /**
      * Field processingFault

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java?rev=383492&r1=383491&r2=383492&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java Mon Mar  6 00:12:49 2006
@@ -12,8 +12,6 @@
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.ListenerManager;
 import org.apache.axis2.util.UUIDGenerator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.ws.commons.om.OMElement;
 import org.apache.wsdl.WSDLConstants;
 
@@ -336,12 +334,10 @@
         addReferenceParameters(mc);
         // ship it out
         AxisEngine engine = new AxisEngine(cc);
-        if (block) {
-            engine.send(mc);
-        } else {
-            sc.getConfigurationContext().getThreadPool().execute(
-                    new FireAndForgetInvocationWorker(mc, engine));
+        if (!block) {
+            mc.setProperty(MessageContext.TRANSPORT_NON_BLOCKING, Boolean.TRUE);
         }
+        engine.send(mc);
         // all done
         completed = true;
     }
@@ -370,26 +366,4 @@
         }
     }
 
-    /**
-     * This class is the workhorse for a non-blocking invocation that uses a two
-     * way transport.
-     */
-    private class FireAndForgetInvocationWorker implements Runnable {
-        private Log log = LogFactory.getLog(getClass());
-        private MessageContext msgctx;
-        private AxisEngine axisEngine;
-
-        public FireAndForgetInvocationWorker(MessageContext msgctx, AxisEngine axisEngine) {
-            this.msgctx = msgctx;
-            this.axisEngine = axisEngine;
-        }
-
-        public void run() {
-            try {
-                axisEngine.send(msgctx);
-            } catch (Exception e) {
-                log.info(e.getMessage());
-            }
-        }
-    }
 }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java?rev=383492&r1=383491&r2=383492&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java Mon Mar  6 00:12:49 2006
@@ -248,16 +248,16 @@
     private void extractFaultInformationFromMessageContext(MessageContext context, SOAPFault fault,
                                                            Throwable e) {
         SOAPProcessingException soapException = null;
-        String soapNamespaceURI;
-
-        // get the current SOAP version
-        if (!context.isSOAP11()) {
-
-            // defaulting to SOAP 1.2
-            soapNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-        } else {
-            soapNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-        }
+//        String soapNamespaceURI;
+//
+//        // get the current SOAP version
+//        if (!context.isSOAP11()) {
+//
+//            // defaulting to SOAP 1.2
+//            soapNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+//        } else {
+//            soapNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+//        }
 
         if (e instanceof SOAPProcessingException) {
             soapException = (SOAPProcessingException) e;
@@ -272,7 +272,7 @@
         Object faultCode = context.getProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME);
         String soapFaultCode = "";
 
-        Throwable exception = null;
+        Throwable exception;
         if (faultCode != null) {
             fault.setCode((SOAPFaultCode) faultCode);
         } else if (soapException != null) {
@@ -505,7 +505,17 @@
             TransportOutDescription transportOut = msgContext.getTransportOut();
             TransportSender sender = transportOut.getSender();
 
-            sender.invoke(msgContext);
+            // This boolean property only used in client side fireAndForget invocation
+            //It will set a property into message context and if some one has set the
+            //property then transport sender will invoke in a diffrent thread
+            Object isTranportBlocking = msgContext.getProperty(
+                    MessageContext.TRANSPORT_NON_BLOCKING);
+            if (isTranportBlocking != null && ((Boolean) isTranportBlocking).booleanValue()) {
+                msgContext.getConfigurationContext().getThreadPool().execute(
+                        new TranportNonBlockingInvocationWorker(msgContext, sender));
+            } else {
+                sender.invoke(msgContext);
+            }
         }
     }
 
@@ -524,7 +534,7 @@
             ArrayList faultExecutionChain = axisOperation.getPhasesOutFaultFlow();
 
             msgContext.setExecutionChain((ArrayList) faultExecutionChain.clone());
-            msgContext.setFLOW(MessageContext.OUT_FLOW);
+            msgContext.setFLOW(MessageContext.OUT_FAULT_FLOW);
             invoke(msgContext);
         }
 
@@ -546,5 +556,28 @@
         return SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(soapNamespace.getName())
                 ? SOAP12Constants.SOAP_DEFAULT_NAMESPACE_PREFIX + ":" + SOAP12Constants.FAULT_CODE_SENDER
                 : SOAP12Constants.SOAP_DEFAULT_NAMESPACE_PREFIX + ":" + SOAP11Constants.FAULT_CODE_SENDER;
+    }
+
+    /**
+     * This class is the workhorse for a non-blocking invocation that uses a two
+     * way transport.
+     */
+    private class TranportNonBlockingInvocationWorker implements Runnable {
+        private Log log = LogFactory.getLog(getClass());
+        private MessageContext msgctx;
+        private TransportSender sender;
+
+        public TranportNonBlockingInvocationWorker(MessageContext msgctx, TransportSender sender) {
+            this.msgctx = msgctx;
+            this.sender = sender;
+        }
+
+        public void run() {
+            try {
+                sender.invoke(msgctx);
+            } catch (Exception e) {
+                log.info(e.getMessage());
+            }
+        }
     }
 }