You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by an...@apache.org on 2007/03/21 01:21:24 UTC
svn commit: r520678 - in
/webservices/synapse/trunk/java/modules/extensions/src:
main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java
Author: antelder
Date: Tue Mar 20 17:21:23 2007
New Revision: 520678
URL: http://svn.apache.org/viewvc?view=rev&rev=520678
Log:
Start updates to script mediator to support multi/single threaded script engines
Modified:
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java
Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java?view=diff&rev=520678&r1=520677&r2=520678
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMediator.java Tue Mar 20 17:21:23 2007
@@ -72,6 +72,8 @@
private String scriptSourceCode;
/** The BSF engine created to process each message through the script */
protected ScriptEngine scriptEngine;
+ /** Does the ScriptEngine support multi-threading */
+ private boolean multiThreadedEngine;
/** The compiled script. Only used for inline scripts */
private CompiledScript compiledScript;
/** The Invocable script. Only used for external scripts */
@@ -102,6 +104,12 @@
if (function != null) {
this.function = function;
}
+
+ initScriptEngine();
+ if (!(scriptEngine instanceof Invocable)) {
+ throw new SynapseException("Script engine is not an Invocable engine for language: " + language);
+ }
+ invocableScript = (Invocable)scriptEngine;
}
/**
@@ -126,6 +134,25 @@
}
boolean returnValue;
+ if (multiThreadedEngine) {
+ returnValue = invokeScript(synCtx);
+ } else {
+ // TODO: change to use a pool of script engines (requires an update to BSF)
+ synchronized (scriptEngine.getClass()) {
+ returnValue = invokeScript(synCtx);
+ }
+ }
+
+ if (shouldTrace) {
+ trace.trace("Result message after execution of script : " + synCtx);
+ trace.trace("End : Script mediator " + returnValue);
+ }
+
+ return returnValue;
+ }
+
+ private boolean invokeScript(MessageContext synCtx) {
+ boolean returnValue;
try {
Object returnObject;
@@ -144,12 +171,6 @@
handleException("Error executing inline " + language + " script", e);
returnValue = false;
}
-
- if (shouldTrace) {
- trace.trace("Result message after execution of script : " + synCtx);
- trace.trace("End : Script mediator " + returnValue);
- }
-
return returnValue;
}
@@ -215,6 +236,11 @@
* @throws ScriptException
*/
protected synchronized void prepareExternalScript(MessageContext synCtx) throws ScriptException {
+
+ // TODO: only need this synchronized method for dynamic registry entries. If there was a way
+ // to access the registry entry during mediator initialization then for non-dynamic entries
+ // this could be done just the once during mediator initialization.
+
Entry entry = synCtx.getConfiguration().getEntryDefinition(key);
boolean needsReload = (entry != null) && entry.isDynamic() && (!entry.isCached() || entry.isExpired());
@@ -226,14 +252,7 @@
scriptSourceCode = (String) o;
}
- initScriptEngine();
-
- if (!(scriptEngine instanceof Invocable)) {
- throw new SynapseException("Script engine is not an Invocable engine for language: " + language);
- }
-
scriptEngine.eval(scriptSourceCode);
- invocableScript = (Invocable)scriptEngine;
}
}
@@ -244,6 +263,8 @@
throw new SynapseException("No script engine found for language: " + language);
}
xmlHelper = XMLHelper.getArgHelper(scriptEngine);
+
+ this.multiThreadedEngine = scriptEngine.getFactory().getParameter("THREADING") != null;
}
public String getLanguage() {
Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java?view=diff&rev=520678&r1=520677&r2=520678
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/bsf/ScriptMediatorSerializationTest.java Tue Mar 20 17:21:23 2007
@@ -32,13 +32,13 @@
}
public void testScriptMediatorSerializationScenarioOne() throws XMLComparisonException {
- String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" key=\"script-key\" function=\"funOne\" language=\"myown\"></script> ";
+ String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" key=\"script-key\" function=\"funOne\" language=\"js\"></script> ";
assertTrue(serialization(inputXml, mediatorFactory, scriptMediatorSerializer));
assertTrue(serialization(inputXml, scriptMediatorSerializer));
}
public void testScriptMediatorSerializationScenarioTwo() throws XMLComparisonException {
- String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" language=\"javascript\" key=\"script-key\" ></script> ";
+ String inputXml = "<script xmlns=\"http://ws.apache.org/ns/synapse\" language=\"js\" key=\"script-key\" ></script> ";
assertTrue(serialization(inputXml, mediatorFactory, scriptMediatorSerializer));
assertTrue(serialization(inputXml, scriptMediatorSerializer));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org