Author: sebb
Date: Sat May  3 13:10:41 2008
New Revision: 653124

URL: http://svn.apache.org/viewvc?rev=653124&view=rev
Log:
BSF Sampler now works properly with Javascript

Modified:
    jakarta/jmeter/trunk/docs/changes.html
    
jakarta/jmeter/trunk/src/protocol/java/org/apache/jmeter/protocol/java/sampler/BSFSampler.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: jakarta/jmeter/trunk/docs/changes.html
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/changes.html?rev=653124&r1=653123&r2=653124&view=diff
==============================================================================
--- jakarta/jmeter/trunk/docs/changes.html (original)
+++ jakarta/jmeter/trunk/docs/changes.html Sat May  3 13:10:41 2008
@@ -398,6 +398,11 @@
                                                </li>
                                                                        
 
+                                                                               
                <li     >
+                                                               BSF Sampler now 
works properly with Javascript
+                                               </li>
+                                                                       
+
                                                </ul>
                                                                                
                                                                                
<h4     >
                                                                Improvements

Modified: 
jakarta/jmeter/trunk/src/protocol/java/org/apache/jmeter/protocol/java/sampler/BSFSampler.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/java/org/apache/jmeter/protocol/java/sampler/BSFSampler.java?rev=653124&r1=653123&r2=653124&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/java/org/apache/jmeter/protocol/java/sampler/BSFSampler.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/java/org/apache/jmeter/protocol/java/sampler/BSFSampler.java
 Sat May  3 13:10:41 2008
@@ -21,6 +21,7 @@
 import java.io.FileInputStream;
 
 import org.apache.bsf.BSFEngine;
+import org.apache.bsf.BSFException;
 import org.apache.bsf.BSFManager;
 import org.apache.commons.io.IOUtils;
 import org.apache.jmeter.samplers.AbstractSampler;
@@ -51,10 +52,7 @@
        private static final String PARAMETERS = "BSFSampler.parameters"; 
//$NON-NLS-1$
        //- JMX file attributes
 
-       private transient BSFManager mgr;
-
        public BSFSampler() {
-               mgr = new BSFManager();
        }
 
        public String getFilename() {
@@ -102,15 +100,29 @@
        public SampleResult sample(Entry e)// Entry tends to be ignored ...
        {
                final String label = getLabel();
-               log.info(label + " " + getFilename());
+        final String request = getScript();
+        final String fileName = getFilename();
+               log.debug(label + " " + fileName);
                SampleResult res = new SampleResult();
                res.setSampleLabel(label);
                FileInputStream is = null;
-               
-               res.sampleStart();
+               BSFEngine bsfEngine = null;
+               // There's little point saving the manager between invocations
+               // as we need to reset most of the beans anyway
+        BSFManager mgr = new BSFManager();
+
+        // TODO: find out how to retrieve these from the script
+        // At present the script has to use SampleResult methods to set them.
+        res.setResponseCode("200"); // $NON-NLS-1$
+        res.setResponseMessage("OK"); // $NON-NLS-1$
+        res.setSuccessful(true);
+        res.setDataType(SampleResult.TEXT); // Default (can be overridden by 
the script)
+
+        JMeterContext jmctx = JMeterContextService.getContext();
+        JMeterVariables vars = jmctx.getVariables();
+
+        res.sampleStart();
                try {
-                       final String request = getScript();
-                       final String fileName = getFilename();
                        
                        mgr.declareBean("log", log, log.getClass()); // 
$NON-NLS-1$
                        mgr.declareBean("Label",label, String.class); // 
$NON-NLS-1$
@@ -120,26 +132,18 @@
                        
mgr.declareBean("args",args,args.getClass());//$NON-NLS-1$
                        mgr.declareBean("SampleResult", res, res.getClass()); 
// $NON-NLS-1$
                        
-                       // TODO: find out how to retrieve these from the script
-                       // At present the script has to use SampleResult 
methods to set them.
-                       res.setResponseCode("200"); // $NON-NLS-1$
-                       res.setResponseMessage("OK"); // $NON-NLS-1$
-                       res.setSuccessful(true);
-
                        // These are not useful yet, as have not found how to 
get updated values back
                        //mgr.declareBean("ResponseCode", "200", String.class); 
// $NON-NLS-1$
                        //mgr.declareBean("ResponseMessage", "OK", 
String.class); // $NON-NLS-1$
                        //mgr.declareBean("IsSuccess", Boolean.TRUE, 
Boolean.class); // $NON-NLS-1$
 
-                       res.setDataType(SampleResult.TEXT); // Default (can be 
overridden by the script)
-
                        // Add variables for access to context and variables
-                       JMeterContext jmctx = JMeterContextService.getContext();
-                       JMeterVariables vars = jmctx.getVariables();
                        mgr.declareBean("ctx", jmctx, jmctx.getClass()); // 
$NON-NLS-1$
                        mgr.declareBean("vars", vars, vars.getClass()); // 
$NON-NLS-1$
 
-                       BSFEngine bsfEngine = 
mgr.loadScriptingEngine(getScriptLanguage());
+                       // N.B. some engines (e.g. Javascript) cannot handle 
certain declareBean() calls
+                       // after the engine has been initialised, so create the 
engine last
+                       bsfEngine = 
mgr.loadScriptingEngine(getScriptLanguage());
 
                        Object bsfOut = null;
                        if (fileName.length()>0) {
@@ -154,19 +158,23 @@
                        if (bsfOut != null) {
                            res.setResponseData(bsfOut.toString().getBytes());
                        }
-               } catch (NoClassDefFoundError ex) {
-                       log.warn("", ex);
-                       res.setSuccessful(false);
-                       res.setResponseCode("500"); // $NON-NLS-1$
-                       res.setResponseMessage(ex.toString());
-               } catch (Exception ex) {
-                       log.warn("", ex);
+        } catch (BSFException ex) {
+            log.warn("BSF error", ex);
+            res.setSuccessful(false);
+            res.setResponseCode("500"); // $NON-NLS-1$
+            res.setResponseMessage(ex.toString());
+               } catch (Exception ex) {// Catch evaluation errors
+                       log.warn("Problem evaluating the script", ex);
                        res.setSuccessful(false);
                        res.setResponseCode("500"); // $NON-NLS-1$
                        res.setResponseMessage(ex.toString());
                } finally {
                        res.sampleEnd();
                        IOUtils.closeQuietly(is);
+                       if (bsfEngine != null) {
+                           bsfEngine.terminate();
+                       }
+               mgr.terminate();
                }
 
                return res;

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=653124&r1=653123&r2=653124&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Sat May  3 13:10:41 2008
@@ -131,6 +131,7 @@
 <li>Bug 44912 - Filter not working in Log Parser</li>
 <li>The BeanShell and BSF component documentation made some incorrect 
references to the "SampleResponse" object;
 this has been corrected to "SampleResult"</li>
+<li>BSF Sampler now works properly with Javascript</li>
 </ul>
 
 <h4>Improvements</h4>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to