You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by Ludger Springmann <Lu...@innoq.com> on 2001/05/27 19:55:41 UTC

Problems using JMeter with RMI

Hello.

In our project we use JMeter 1.6 to test an application on a Sun Solaris
machine. The JMeter-GUI was supposed to run on a NT-Client. We encountered
several problems when we tried to get the whole thing working:
The first and easy to solve problem was, that some Classes were not
Serializable and so we got NotSerializableExceptions. (JMeterComponentModel
and ThreadGroup.SampleQueue)
The second problem was, that we started the application via telnet - so that
we had no X-Window-System. JMeter crashed because it wanted to instantiate
GUI-Classes (using the MenuFactory) at the server when a GenericController
was instantiated. We got a strange X-Windows-Exception. We found a
work-around - but it is not a really clean solution. We use a flag that is
set, when there is a remote method invocation. In case the flag is set the
GUI-Classes will not be instantiated.  (I put the patch-files at the end of
the of this mail.)
I would be grateful for any idea for a better solutions of this problem.

Have a nice day,
 Ludger

JMeterComponentModel.java:

---
/work/tmp/jakarta-jmeter/src/org/apache/jmeter/gui/JMeterComponentModel.java
Wed May 23 12:26:38 2001
+++ ./src/org/apache/jmeter/gui/JMeterComponentModel.java	Mon May 21
08:35:23 2001
@@ -67,7 +67,7 @@
  * @version 1.0
  */

-public interface JMeterComponentModel
+public interface JMeterComponentModel extends java.io.Serializable
 {
 	Class getGuiClass();





GenericController.java

---
/work/tmp/jakarta-jmeter/src/org/apache/jmeter/control/GenericController.jav
a	Wed May 23 12:26:38 2001
+++ ./src/org/apache/jmeter/control/GenericController.java	Wed May 23
11:32:25 2001
@@ -70,6 +70,8 @@

 public class GenericController implements SamplerController,
JMeterComponentModel, Saveable
 {
+	static final long serialVersionUID=1171986242445817621L;
+
 	protected List subControllers = new LinkedList();
 	protected SamplerController current;
 	protected Iterator controlIt;
@@ -269,6 +271,12 @@
 		configs.add(config);
 	}

+	private boolean initialized = false;
+
+	public void initForServer() {
+		initialized = true;
+	}
+
 	/************************************************************
 	 *  !ToDo (Method description)
 	 *
@@ -276,6 +284,12 @@
 	 ***********************************************************/
 	public Object clone()
 	{
+		if (!initialized)
+		{
+			addableList.add(MenuFactory.getControllerMenu());
+			addableList.add(MenuFactory.getConfigElementMenu());
+			initialized = true;
+		}
 		GenericController control = new GenericController();
 		standardCloneProc(control);
 		return control;
@@ -379,10 +393,5 @@
 				entry.addConfigElement((ConfigElement)iter.next());
 			}
 		}
-	}
-	static
-	{
-		addableList.add(MenuFactory.getControllerMenu());
-		addableList.add(MenuFactory.getConfigElementMenu());
 	}
 }




ThreadGroup.java:

--- /work/tmp/jakarta-jmeter/src/org/apache/jmeter/threads/ThreadGroup.java
Wed May 23 12:26:42 2001
+++ ./src/org/apache/jmeter/threads/ThreadGroup.java	Wed May 23 11:32:22
2001
@@ -370,7 +370,7 @@
 	 * Separate thread to deliver all SampleEvents.  This ensures that sample
listeners
 	 * will get sample events 1 at a time, and can thus ignore thread issues.
 	 */
-	private class SampleQueue implements Runnable
+	private class SampleQueue implements Runnable, java.io.Serializable
 	{
 		LinkedList occurredQ = new LinkedList();

@@ -443,6 +443,14 @@
 			{
 				ex.printStackTrace();
 			}
+		}
+	}
+
+	// LS TO-DO: Really bad workaround
+	public void initForServer() {
+		SamplerController controller = getSamplerController();
+		if (controller instanceof GenericController) {
+			((GenericController)controller).initForServer();
 		}
 	}
 }





RemoteJMeterEngine.java:

---
/work/tmp/jakarta-jmeter/src/org/apache/jmeter/engine/RemoteJMeterEngineImpl
.java	Wed May 23 12:26:38 2001
+++ ./src/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java	Mon May 21
11:10:34 2001
@@ -142,7 +142,7 @@
 	{
 		try
 		{
-			System.setErr(new PrintStream(new
FileOutputStream("c:\\development\\remote_jmeter.log")));
+			System.setErr(new PrintStream(new
FileOutputStream("remote_jmeter.log")));
 			RemoteJMeterEngine engine = new RemoteJMeterEngineImpl();
 			while(true)
 			{







ClientJMeterEngine.java:

---
/work/tmp/jakarta-jmeter/src/org/apache/jmeter/engine/ClientJMeterEngine.jav
a	Wed May 23 12:26:38 2001
+++ ./src/org/apache/jmeter/engine/ClientJMeterEngine.java	Wed May 23
11:32:18 2001
@@ -165,7 +165,11 @@
 		{
 			try
 			{
-				remote.addThreadGroup((ThreadGroup)iter.next());
+				// LS TO-DO: REALLY BAD WORKAROUND
+				ThreadGroup local_threadgroup = (ThreadGroup)iter.next();
+				local_threadgroup.initForServer();
+				remote.addThreadGroup(local_threadgroup );
+//				remote.addThreadGroup((ThreadGroup)iter.next());
 			}
 			catch(Exception ex)
 			{



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org