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;
+ }
+ }
}