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