Monday, July 07, 2014

LoadRunner 11.52 and weird compilation issues

I've had a perfectly working LoadRunner Java over HTTP script for ages. This stopped working once it was tried on 11.50 and 11.52.

It "compiles" inside the VUGen but fails to run inside VUGen or Controller and produces the following error:

Error: at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at DummyClassLoader.loadClass(DummyClassLoader.java:15)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at ScriptFactory.getScriptObject(ScriptFactory.java:51)
Error: Can't create script object.
Error: Exception was raised when calling abort-cleanup function in extension java_int.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION
Warning: Extension trans.dll reports error -1 on call to function ExtAbortCleanup
Notify: Found jdk version: 1.6.0.
Notify: classpath=C:\LoadRunnerScripts\FUBAR\;c:\hp\loadrunner\classes\srv;c:\hp\loadrunner\classes;C:\LoadRunnerScripts\WebClasses\fubar\Arialuni.jar;C:\LoadRunnerScripts\WebClasses\fubar\commons-collections-2.1.jar;C:\LoadRunnerScripts\WebClasses\myclient.jar;C:\LoadRunnerScripts\WebClasses\fubar\commons-logging-1.0.2.jar;C:\LoadRunnerScripts\WebClasses\fubar\djt.jar;C:\LoadRunnerScripts\WebClasses\fubar\itext-1.3.1.jar;C:\LoadRunnerScripts\WebClasses\fubar\iTextAsian.jar;C:\LoadRunnerScripts\WebClasses\fubar\jasperreports-3.0.0.jar;C:\LoadRunnerScripts\WebClasses\fubar\jcommon-1.0.0.jar;C:\LoadRunnerScripts\WebClasses\fubar\jfreechart.jar;C:\LoadRunnerScripts\WebClasses\fubar\JScript.jar;C:\LoadRunnerScripts\WebClasses\fubar\poi-3.0.1-FINAL-20070705.jar;;;;c:\hp\loadrunner\lib\xstream-1.3.jar;c:\hp\loadrunner\lib\xpp3-1.1.4c.jar
Notify: Path=C:\Java\jdk1.6.0_75\jre\bin\client;C:\HP\LOADRU~1\bin;C:\HP\LoadRunner\Bin;C:\HP\LoadRunner\Bin\tulip\bin;C:\Java\jdk1.6.0_75\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\HP\LoadRunner\strawberry-perl\perl\bin
Notify: VM Params: .
Error: at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at DummyClassLoader.loadClass(DummyClassLoader.java:15)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at ScriptFactory.getScriptObject(ScriptFactory.java:51)


Error: Can't create script object.
Error: Exception was raised when calling abort-cleanup function in extension java_int.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION
Warning: Extension trans.dll reports error -1 on call to function ExtAbortCleanup




After raising a call with HP, their suggestion was to move all of the <Vector> and List declarations to global sections, not inside methods.

Like this:
@@ -436,14 +437,27 @@ public class Actions {
         *
         * @return
         * @throws Throwable
-        */
+       */             
+      
+       Vector<Vector<String>> pterryPack = null;
+        Vector<Vector<String>> ankhmorphocContents;
+        //Vector<String> vetrinari_results;
+        Vector<String> fubarDetails;
+        Vector<String> snafuDetails;
+        Vector<String> fibbsDetails;
+        Vector<String> gremlinsDetails;
+        Vector<String> rincewindConfig;
+        Vector<Vector<String>> ConanDetails;
+        Vector<Vector<String>> unseenuniversityDetails;
+        Vector<Vector<String>> discworldData;

OK, in many ways my Vector etc. declarations are a bit funny wrt to the modern Java coding standards but it is the way the legacy code I work with is written so I shouldn't get the flack. The funny thing is it works with Java 1.6 and LoadRunner 11.0 but not 11.52, it -looks- like a classpath issue based on various discussions on the net but it isn't. It looks like the parser LoadRunner uses to create the runtime classes for data injection can't handle such Vector and List declarations (legitimately) peppered around the code and must observe them up front and prepare itself.

Beware.

No comments: