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 se...@apache.org on 2009/02/26 03:32:32 UTC

svn commit: r747989 - in /jakarta/jmeter/trunk: bin/ src/core/org/apache/jmeter/ src/core/org/apache/jmeter/engine/ xdocs/ xdocs/usermanual/

Author: sebb
Date: Thu Feb 26 02:32:31 2009
New Revision: 747989

URL: http://svn.apache.org/viewvc?rev=747989&view=rev
Log:
Bug 46636 - rmi ports
Remote server now uses port defined by the property server.rmi.localport if present
Simplified Client / Server classes
Show remote object connections on console

Modified:
    jakarta/jmeter/trunk/bin/jmeter.properties
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngine.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml

Modified: jakarta/jmeter/trunk/bin/jmeter.properties
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/jmeter.properties?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/jmeter.properties (original)
+++ jakarta/jmeter/trunk/bin/jmeter.properties Thu Feb 26 02:32:31 2009
@@ -123,6 +123,10 @@
 # To change the default port (1099) used to access the server:
 #server.rmi.port=1234
 
+# To use a specific port for the JMeter server engine, define
+# the following property before starting the server:
+#server.rmi.localport=4000
+
 # From JMeter 2.3.1, the jmeter server creates the RMI registry as part of the server process.
 # To stop the server creating the RMI registry:
 #server.rmi.create=false

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java Thu Feb 26 02:32:31 2009
@@ -664,7 +664,7 @@
 
     private void startServer(int port) {
         try {
-            new RemoteJMeterEngineImpl(port);
+            RemoteJMeterEngineImpl.startServer(port);
         } catch (Exception ex) {
             log.error("Giving up, as server failed with:", ex);
             System.err.println("Server failed to start: "+ex);

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java Thu Feb 26 02:32:31 2009
@@ -21,7 +21,9 @@
 import java.net.MalformedURLException;
 import java.rmi.Naming;
 import java.rmi.NotBoundException;
+import java.rmi.Remote;
 import java.rmi.RemoteException;
+import java.rmi.server.RemoteObject;
 import java.util.Properties;
 
 import org.apache.jmeter.testelement.TestListener;
@@ -37,30 +39,32 @@
 public class ClientJMeterEngine implements JMeterEngine, Runnable {
     private static final Logger log = LoggingManager.getLoggerForClass();
 
-    RemoteJMeterEngine remote;
+    private RemoteJMeterEngine remote;
 
-    HashTree test;
+    private HashTree test;
 
-    SearchByClass testListeners;
-
-    ConvertListeners sampleListeners;
-
-    private String host;
+    private final String host;
 
     private static RemoteJMeterEngine getEngine(String h) throws MalformedURLException, RemoteException,
             NotBoundException {
-        return (RemoteJMeterEngine) Naming.lookup("//" + h + "/JMeterEngine"); // $NON-NLS-1$ $NON-NLS-2$
+       final String name = "//" + h + "/" + RemoteJMeterEngineImpl.JMETER_ENGINE_RMI_NAME; // $NON-NLS-1$ $NON-NLS-2$
+       Remote remobj = Naming.lookup(name);
+       if (remobj instanceof RemoteJMeterEngine){
+           final RemoteJMeterEngine rje = (RemoteJMeterEngine) remobj;
+           if (remobj instanceof RemoteObject){
+               RemoteObject robj = (RemoteObject) remobj;
+               System.out.println("Using remote object: "+robj.getRef().remoteToString());
+           }
+           return rje;           
+       }
+       throw new RemoteException("Could not find "+name);
     }
 
     public ClientJMeterEngine(String host) throws MalformedURLException, NotBoundException, RemoteException {
-        this(getEngine(host));
+        this.remote = getEngine(host);
         this.host = host;
     }
 
-    public ClientJMeterEngine(RemoteJMeterEngine remote) {
-        this.remote = remote;
-    }
-
     protected HashTree getTestTree() {
         return test;
     }
@@ -71,10 +75,6 @@
         test = cloner.getClonedTree();
     }
 
-    public void setHost(String host) {
-        this.host = host;
-    }
-
     public void runTest() {
         log.info("about to run remote test");
         new Thread(this).start();
@@ -110,8 +110,8 @@
      */
     public void run() {
         log.info("running clientengine run method");
-        testListeners = new SearchByClass(TestListener.class);
-        sampleListeners = new ConvertListeners();
+        SearchByClass testListeners = new SearchByClass(TestListener.class);
+        ConvertListeners sampleListeners = new ConvertListeners();
         HashTree testTree = getTestTree();
         PreCompiler compiler = new PreCompiler(true); // limit the changes to client only test elements
         synchronized(testTree) {
@@ -123,8 +123,6 @@
 
         try {
             JMeterContextService.startTest();
-            remote.setHost(host);
-            log.info("sent host =" + host);
             remote.configure(test);
             log.info("sent test");
             remote.runTest();

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java Thu Feb 26 02:32:31 2009
@@ -31,8 +31,6 @@
 
     void reset();
 
-    void setHost(String host);
-
     void setProperties(Properties p);
 
     void exit();

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngine.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngine.java?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngine.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngine.java Thu Feb 26 02:32:31 2009
@@ -33,8 +33,6 @@
 
     void reset() throws RemoteException;
 
-    void setHost(String host) throws RemoteException;
-
     void setProperties(Properties p) throws RemoteException;
 
     void exit() throws RemoteException;

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java Thu Feb 26 02:32:31 2009
@@ -37,6 +37,8 @@
 public class RemoteJMeterEngineImpl extends java.rmi.server.UnicastRemoteObject implements RemoteJMeterEngine {
     private static final Logger log = LoggingManager.getLoggerForClass();
 
+    static final String JMETER_ENGINE_RMI_NAME = "JMeterEngine"; // $NON-NLS-1$
+
     private JMeterEngine backingEngine;
 
     private String hostName;
@@ -44,16 +46,26 @@
     public static final int DEFAULT_RMI_PORT =
         JMeterUtils.getPropDefault("server.rmi.port", 1099); // $NON-NLS-1$
 
+    private static final int DEFAULT_LOCAL_PORT =
+        JMeterUtils.getPropDefault("server.rmi.localport", 0); // $NON-NLS-1$
+
+    static{
+        if (DEFAULT_LOCAL_PORT != 0){
+            System.out.println("Using local port: "+DEFAULT_LOCAL_PORT);
+        }
+    }
     // Should we create our own copy of the RMI registry?
     private static final boolean createServer =
         JMeterUtils.getPropDefault("server.rmi.create", true); // $NON-NLS-1$
 
-    public RemoteJMeterEngineImpl() throws RemoteException {
-        init(DEFAULT_RMI_PORT);
+    private RemoteJMeterEngineImpl(int port) throws RemoteException {
+        super(port); // Create this object using the specified port (0 means anonymous)
+        System.out.println("Created remote object: "+this.getRef().remoteToString());
     }
 
-    public RemoteJMeterEngineImpl(int port) throws RemoteException {
-        init(port == 0 ? DEFAULT_RMI_PORT : port);
+    public static void startServer(int port) throws RemoteException {
+        RemoteJMeterEngineImpl engine = new RemoteJMeterEngineImpl(DEFAULT_LOCAL_PORT);
+        engine.init(port == 0 ? DEFAULT_RMI_PORT : port);
     }
 
     private void init(int port) throws RemoteException {
@@ -85,7 +97,7 @@
             Registry reg = LocateRegistry.getRegistry(port);
             log.info("Creating JMeter engine on host "+hostName);
             backingEngine = new StandardJMeterEngine(hostName);// see setHost()
-            reg.rebind("JMeterEngine", this); // $NON-NLS-1$
+            reg.rebind(JMETER_ENGINE_RMI_NAME, this);
             log.info("Bound to registry on port " + port);
         } catch (Exception ex) {
             log.error("rmiregistry needs to be running to start JMeter in server " + "mode\n\t" + ex.toString());
@@ -94,13 +106,6 @@
         }
     }
 
-    // TODO: is this really needed? The hostname is passed in when the engine is created
-    public void setHost(String host) {
-        hostName=host;
-        log.info("received host: " + host);
-        backingEngine.setHost(host);
-    }
-
     /**
      * Adds a feature to the ThreadGroup attribute of the RemoteJMeterEngineImpl
      * object.

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Thu Feb 26 02:32:31 2009
@@ -223,6 +223,7 @@
 <li>Read XML JTL files more efficiently - pass samples to visualisers as they are read, rather than saving them all and then processing them</li>
 <li>Added locales.add property to allow for new Locales</li>
 <li>Bug 40045 - Allow Results monitor to select a specific connector</li>
+<li>Bug 46636 - rmi ports</li>
 </ul>
 
 <h3>Non-functional changes</h3>

Modified: jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml?rev=747989&r1=747988&r2=747989&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml Thu Feb 26 02:32:31 2009
@@ -45,8 +45,9 @@
 </p>
 <p>
 However, remote mode does use more resources than running the same number of non-GUI tests independently.
+If many server instances are used, the client JMeter can become overloaded, as can the client network connection.
 </p>
-<p>Note that while you can indeed execute the JMeterEngine on your application 
+<p>Note that while you can execute the JMeterEngine on your application 
 server, you need to be mindful of the fact that this will be adding processing 
 overhead on the application server and thus your testing results will be 
 somewhat tainted.  The recommended approach is to have one or more machines on
@@ -63,6 +64,11 @@
 there is no need to start RMI registry separately.
 To revert to the previous behaviour, define the JMeter property server.rmi.create=false on the server host systems.
 </p>
+<p>
+By default, RMI uses a dynamic port for the JMeter server engine. This can cause problems for firewalls,
+so versions of JMeter after 2.3.2 will check for the JMeter property <b>server.rmi.localport</b>.
+If this is non-zero, it will be used as the local port number for the server engine.
+</p>
 <p><b>Step 2: Add the server IP to your client's Properties File</b></p>
 <p>Edit the properties file <i>on the controlling JMeter machine</i>.  In /bin/jmeter.properties, find the property named, "remote_hosts", and   
 add the value of your running JMeter server's IP address.  Multiple such servers can be added, comma-delimited.</p>



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