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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to