You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2011/05/29 15:38:30 UTC

svn commit: r1128873 - in /synapse/trunk/java/modules/core/src: main/java/org/apache/synapse/ main/java/org/apache/synapse/core/axis2/ main/java/org/apache/synapse/mediators/template/ test/java/org/apache/synapse/

Author: supun
Date: Sun May 29 13:38:29 2011
New Revision: 1128873

URL: http://svn.apache.org/viewvc?rev=1128873&view=rev
Log:
fixing an issue with template initialization

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/InvokeMediator.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java
    synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java?rev=1128873&r1=1128872&r2=1128873&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java Sun May 29 13:38:29 2011
@@ -119,6 +119,17 @@ public interface MessageContext {
     public Mediator getSequence(String key);
 
     /**
+     * Return the Sequence Template with the given key from the configuration, or the local message
+     * context. This method looks up for the Template with the given key from the local
+     * message context to make this look up transactional - i.e. a request and response
+     * message pair will not see a difference in the said sequence if it was dynamic and
+     * changed in between at the registry
+     * @param key the sequence key to be looked up
+     * @return the Template mediator mapped to the key
+     */
+    public Mediator getSequenceTemplate(String key);
+
+    /**
      * Return the endpoint with the given key from the configuration, or the local message
      * context. This method looks up for the endpoint with the given key from the local
      * message context to make this look up transactional - i.e. a request and response

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java?rev=1128873&r1=1128872&r2=1128873&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java Sun May 29 13:38:29 2011
@@ -39,6 +39,7 @@ import org.apache.synapse.config.Entry;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.core.SynapseEnvironment;
 import org.apache.synapse.endpoints.Endpoint;
+import org.apache.synapse.mediators.template.TemplateMediator;
 
 import java.util.*;
 
@@ -146,6 +147,25 @@ public class Axis2MessageContext impleme
         }
     }
 
+    public Mediator getSequenceTemplate(String key) {
+        Object o = localEntries.get(key);
+        if (o != null && o instanceof Mediator) {
+            return (Mediator) o;
+        } else {
+            Mediator m = getConfiguration().getSequence(key);
+            if (m instanceof TemplateMediator) {
+                TemplateMediator templateMediator = (TemplateMediator) m;
+                synchronized (m) {
+                    if (!templateMediator.isInitialized()) {
+                        templateMediator.init(synEnv);
+                    }
+                }
+            }
+            localEntries.put(key, m);
+            return m;
+        }
+    }
+
     public Endpoint getEndpoint(String key) {
         Object o = localEntries.get(key);
         if (o != null && o instanceof Endpoint) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/InvokeMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/InvokeMediator.java?rev=1128873&r1=1128872&r2=1128873&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/InvokeMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/InvokeMediator.java Sun May 29 13:38:29 2011
@@ -65,7 +65,7 @@ public class InvokeMediator extends Abst
         }
         populateParameters(synCtx);
         //get the target function template and invoke by passing populated parameters
-        Mediator mediator = synCtx.getConfiguration().getSequence(targetTemplate);
+        Mediator mediator = synCtx.getSequenceTemplate(targetTemplate);
         if (mediator != null && mediator instanceof TemplateMediator) {
             return mediator.mediate(synCtx);
         }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java?rev=1128873&r1=1128872&r2=1128873&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java Sun May 29 13:38:29 2011
@@ -41,6 +41,8 @@ public class TemplateMediator extends Ab
 
     private String eipPatternName;
     private String fileName;
+    /** flag to ensure that each and every sequence is initialized and destroyed atmost once */
+    private boolean initialized = false;
 
     public void setParameters(Collection<String> paramNames) {
         this.paramNames = paramNames;
@@ -58,10 +60,6 @@ public class TemplateMediator extends Ab
         return eipPatternName;
     }
 
-    public void init(SynapseEnvironment env) {
-        super.init(env);
-    }
-
     public boolean mediate(MessageContext synCtx) {
         SynapseLog synLog = getLog(synCtx);
 
@@ -116,4 +114,24 @@ public class TemplateMediator extends Ab
     public String getFileName() {
         return fileName;
     }
+
+    @Override
+    public synchronized void init(SynapseEnvironment se) {
+        if (!initialized) {
+            super.init(se);
+            initialized = true;
+        }
+    }
+
+    @Override
+    public synchronized void destroy() {
+        if (initialized) {
+            super.destroy();
+            initialized = false;
+        }
+    }
+
+    public boolean isInitialized() {
+        return initialized;
+    }
 }

Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java?rev=1128873&r1=1128872&r2=1128873&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java Sun May 29 13:38:29 2011
@@ -31,6 +31,7 @@ import org.apache.synapse.endpoints.Endp
 import org.apache.synapse.mediators.base.SequenceMediator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.mediators.template.TemplateMediator;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -310,4 +311,23 @@ public class TestMessageContext implemen
     public Log getServiceLog() {
         return LogFactory.getLog(TestMessageContext.class);
     }
+
+    public Mediator getSequenceTemplate(String key) {
+        Object o = localEntries.get(key);
+        if (o != null && o instanceof Mediator) {
+            return (Mediator) o;
+        } else {
+            Mediator m = getConfiguration().getSequence(key);
+            if (m instanceof TemplateMediator) {
+                TemplateMediator templateMediator = (TemplateMediator) m;
+                synchronized (m) {
+                    if (!templateMediator.isInitialized()) {
+                        templateMediator.init(synEnv);
+                    }
+                }
+            }
+            localEntries.put(key, m);
+            return m;
+        }
+    }
 }