User: schulze 
  Date: 00/10/13 13:11:36

  Modified:    src/main/org/jboss/test/load/test Client.java Worker.java
  Log:
  some fine tuning for the load test
  
  Revision  Changes    Path
  1.3       +60 -29    jbosstest/src/main/org/jboss/test/load/test/Client.java
  
  Index: Client.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/jbosstest/src/main/org/jboss/test/load/test/Client.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Client.java       2000/10/10 02:17:56     1.2
  +++ Client.java       2000/10/13 20:11:36     1.3
  @@ -2,6 +2,7 @@
   
   import java.util.Properties;
   import java.util.StringTokenizer;
  +import java.util.Hashtable;
   
   import org.jboss.jmx.client.Deployer;
   
  @@ -21,7 +22,7 @@
   * </dl>
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a>
  -* @version $Id: Client.java,v 1.2 2000/10/10 02:17:56 schulze Exp $
  +* @version $Id: Client.java,v 1.3 2000/10/13 20:11:36 schulze Exp $
   */
   public class Client
   {
  @@ -48,6 +49,20 @@
         System.out.println("Welcome to the Load Test v0.1");
         System.out.println("_____________________________________________");
         System.out.println();
  +      System.out.println("the following optional parameters are supported:");
  +      System.out.println("   loops=<number> number of test loops per thread");
  +      System.out.println("   beans=<number> number of beans used per thread");
  +      System.out.println("   threads=<number> number of threads getting started");
  +      System.out.println("   delay=<millisec> delay between the thread start");
  +      System.out.println("   verbose - gives infos about bean creation/removing");
  +      System.out.println("   noremove - keeps the created beans after finish");
  +      System.out.println("   nodeploy - does not deploy anything");
  +      System.out.println("       (by default the testbeans.jar from this 
testsuite");
  +      System.out.println("        is deployed (the test needs the 
nextgen.EnterpriseEntity)");
  +      System.out.println("   name=<string> name of the threads");
  +      System.out.println("for batch use: in case of any failure it returns != 0");
  +      System.out.println ();
  +      
         if (param.get ("nodeploy") == null)
         {
            System.out.print("Deploying test beans...");
  @@ -85,43 +100,55 @@
   
      private int test1 ()
      {
  -      //System.out.println("Test (I):");
  +      Hashtable config = new Hashtable ();
  +      
   
  -      boolean verbose = false;
  -      verbose = param.getProperty ("verbose") != null;
  +      config.put ("verbose", new Boolean (param.getProperty ("verbose") != null));
  +      config.put ("noremove", new Boolean (param.getProperty ("noremove") != null));
   
  -      int threads = 50;
  -      try {
  -      threads = Integer.parseInt (param.getProperty ("threads"));
  -      } catch (Exception _e){
  -         System.out.println("no (or wrong) thread number specified. using default: 
" + threads);
  -      }
         int beans = 5;
         try {
         beans = Integer.parseInt (param.getProperty ("beans"));
         } catch (Exception _e) {
            System.out.println("no (or wrong) number of beans (per thread) specified. 
using default: " + beans);
         }
  +      config.put ("beans", new Integer (beans));
  +
         int loops = 100;
         try {
         loops = Integer.parseInt (param.getProperty ("loops"));
         } catch (Exception _e){
            System.out.println("no (or wrong) number of loops specified. using 
default: " + loops);
         }
  -      String name = param.getProperty ("name", "daniel");
  +      config.put ("loops", new Integer (loops));
  +
  +      config.put ("name", param.getProperty ("name", "daniel") );
  +
  +      int threads = 50;
  +      try {
  +      threads = Integer.parseInt (param.getProperty ("threads"));
  +      } catch (Exception _e){
  +         System.out.println("no (or wrong) thread number specified. using default: 
" + threads);
  +      }
  +      int delay = 1000;
  +      try {
  +      delay = Integer.parseInt (param.getProperty ("delay"));
  +      } catch (Exception _e){
  +         System.out.println("no (or wrong) delay (millisec between each thread 
start) specified. using default: " + delay);
  +      }
         System.out.println ("start test1 with "+threads+" threads, "+beans+" beans 
per thread in "+loops+" loops.");
         System.out.println("------------------------------------------------------");
   
   
         ThreadGroup threadGroup = new ThreadGroup ("workers");
  -      Thread[] workers = new Thread[threads];
  -
  -      long start = System.currentTimeMillis ();
  +      Worker[] workers = new Worker[threads];
   
         // create and start threads...
         for (int i = 0; i < threads; ++i)
         {
  -         workers[i] = new Worker (threadGroup, i, name, verbose, beans, loops);
  +         Hashtable cfg = (Hashtable)config.clone ();
  +         cfg.put ("number", new Integer (i));
  +         workers[i] = new Worker (threadGroup, cfg);
            workers[i].start ();
            // because of problems with Windows 2000...
            // (on W2000 the server couldnt serve this many connection
  @@ -129,7 +156,7 @@
            // .. this hack:
            try
            {
  -            Thread.currentThread ().sleep (500);
  +            Thread.currentThread ().sleep (delay);
            } catch (InterruptedException _ie)
            { // shoudnt happen...
            }
  @@ -146,15 +173,21 @@
            System.out.print ("Main thread interrupted?!");
         }
   
  -      long stop = System.currentTimeMillis ();
  -      int time = (int)(stop - start)/1000;
  -
  -      // determine success...
  +      // make statistic...
         int failed = 0;
  +      int tx = 0;
  +      int time = 0;
         for (int i = 0; i < threads; ++i)
  -         if (((Worker)workers[i]).failed ())
  +      {
  +         Hashtable cfg = workers[i].getConfig ();
  +         if (((Boolean)cfg.get("failed")).booleanValue ())
               ++failed;
   
  +         tx += ((Integer)cfg.get("transactions")).intValue ();  
  +         time += ((Integer)cfg.get("time")).intValue ();
  +      }
  +      
  +
         System.out.println("------------------------------------------------------");
         if (failed > 0)
         {
  @@ -165,17 +198,15 @@
         {
            System.out.println("Congratulations the test succeeded! :-)");
            System.out.println("All threads finished clean.");
  -         int transactions = threads*beans*loops*2;
  -         int h = time/3600;
  -         int m = (time-h*3600)/60;
  -         System.out.println("statistic: "+transactions+" transactions in "+h+" h 
"+m+" min.");
  -         System.out.println("             transactions per second: 
"+(transactions/time));
  -         System.out.println("             (on short runs the bean creation/deletion 
may influence the result!)");
         }
  +      
  +      int h = time/3600;
  +      int m = (time-h*3600)/60;
  +      System.out.println("");
  +      System.out.println("statistic: "+tx+" transactions in "+h+" h "+m+" min.");
  +      System.out.println("             transactions per second: "+(tx/time));
         return failed;
      }
  -
  -
   
   
   
  
  
  
  1.2       +57 -35    jbosstest/src/main/org/jboss/test/load/test/Worker.java
  
  Index: Worker.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/jbosstest/src/main/org/jboss/test/load/test/Worker.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Worker.java       2000/10/08 00:03:02     1.1
  +++ Worker.java       2000/10/13 20:11:36     1.2
  @@ -1,8 +1,10 @@
   package org.jboss.test.load.test;
   
  +import java.util.Hashtable;
   
   import javax.naming.Context;
   import javax.naming.InitialContext;
  +import java.lang.reflect.UndeclaredThrowableException;
   
   import javax.ejb.*;
   
  @@ -15,42 +17,38 @@
   * After completition the beans are removed on fail the beans are not removed.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a>
  -* @version $Id: Worker.java,v 1.1 2000/10/08 00:03:02 schulze Exp $
  +* @version $Id: Worker.java,v 1.2 2000/10/13 20:11:36 schulze Exp $
   */
   public class Worker
   extends Thread
   {
  -   // beans per thread
  -   int beans;
  -   // loops per thread
  -   int loops;
  -   // for the log
  -   String logTag;
  -   // some more info...
  -   boolean verbose;
      // succcess or not?
  -   boolean failed = false;
  +   Hashtable config;
   
  -   Worker (ThreadGroup _group, int _number, String _name, boolean _verbose, int 
_beans, int _loops)
  +   Worker (ThreadGroup _group, Hashtable _config)
      {
  -      super (_group, _name + "_" + _number);
  -      beans = _beans;
  -      loops = _loops;
  -
  -      verbose = _verbose;
  -
  -      logTag = "["+getName ()+"] ";
  +      super (_group, (String)_config.get ("name") + "_" + 
_config.get("number").toString ());
  +      config = _config;
      }
   
   
      /** for the client to ask for success */
  -   public boolean failed ()
  +   public Hashtable getConfig ()
      {
  -      return failed;
  +      return config;
      }
   
      public void run()
      {
  +      // get the configuration
  +      int beans = ((Integer)config.get ("beans")).intValue ();
  +      int loops = ((Integer)config.get ("loops")).intValue ();
  +      boolean verbose = ((Boolean)config.get ("verbose")).booleanValue ();
  +      boolean remove = !((Boolean)config.get ("noremove")).booleanValue ();
  +      String logTag = "["+getName ()+"] ";
  +
  +      int txs = 0;
  +      long start =  System.currentTimeMillis ();
   
         EnterpriseEntity[] entity = new EnterpriseEntity[beans];
         try
  @@ -61,7 +59,7 @@
            {
               System.out.println (logTag + "EJBHomeInterface lookup returned null?!");
               System.out.println (logTag + "died.");
  -            failed = true;
  +            prepareExit (true, txs, start, System.currentTimeMillis ());
               return;
            }
            for (int i = 0; i < beans; ++i)
  @@ -75,9 +73,10 @@
                  {
                     System.out.println (logTag + "EJBHome.findByPrimaryKey () 
returned null?!");
                     System.out.println (logTag + "died.");
  -                  failed = true;
  +                  prepareExit (true, txs, start, System.currentTimeMillis ());
                     return;
                  }
  +               ++txs;
                  if (verbose) System.out.println (logTag + "reuse bean: 
"+entity[i].getPrimaryKey ());
               }
               catch (FinderException _fe)
  @@ -88,19 +87,22 @@
                  {
                     System.out.println (logTag + "EJBHome.create () returned null?!");
                     System.out.println (logTag + "died.");
  -                  failed = true;
  +                  prepareExit (true, txs, start, System.currentTimeMillis ());
                     return;
                  }
  +               ++txs;
                  if (verbose) System.out.println (logTag + "create bean: 
"+entity[i].getPrimaryKey ());
               }
            }
  -
         }
         catch (Exception _e)
         {
            System.out.println (logTag+ "problem while finding/creating beans: 
"+_e.toString ());
  +         if (_e instanceof UndeclaredThrowableException) 
  +            System.out.println(logTag+ "target exception: " + 
((UndeclaredThrowableException)_e).getUndeclaredThrowable().toString());
  +         
            System.out.println (logTag+" died!");
  -         failed = true;
  +         prepareExit (true, txs, start, System.currentTimeMillis ());
            return;
         }
   
  @@ -110,12 +112,13 @@
            try
            {
               entity[b].setOtherField (0);
  +            ++txs;
            }
            catch (Exception _e)
            {
               System.out.println (logTag+ "cannot prepare bean #"+b+": "+_e.toString 
());
               System.out.println (logTag+" died!");
  -            failed = true;
  +            prepareExit (true, txs, start, System.currentTimeMillis ());
               return;
            }
         }
  @@ -129,9 +132,11 @@
               try
               {
                  value = entity[b].getOtherField ();
  +               ++txs;
               }
               catch (Exception _e)
               {
  +               prepareExit (true, txs, start, System.currentTimeMillis ());
                  System.out.println (logTag + "error in getOtherField () on bean 
#"+b+" in loop "+l+ ": "+_e.toString ());
                  if (value != l)
                     System.out.println (logTag + "unexpected value in bean #"+b+" in 
loop "+l);
  @@ -140,27 +145,44 @@
               try
               {
                  entity[b].setOtherField (l + 1);
  +               ++txs;
               }
               catch (Exception _e)
               {
  +               prepareExit (true, txs, start, System.currentTimeMillis ());
                  System.out.println (logTag + "error in setOtherField () on bean 
#"+b+" in loop "+l+ ": "+_e.toString ());
               }
            }
         }
   
  +
         // remove the beans...
  -      for (int b = 0; b < beans; ++b)
  +      if (remove) 
         {
  -         try
  -         {
  -            if (verbose) System.out.println (logTag + "remove bean #"+b);
  -            entity[b].remove ();
  -         }
  -         catch (Exception _e)
  +         for (int b = 0; b < beans; ++b)
            {
  -            System.out.println (logTag + "error in removing bean #"+b+": 
"+_e.toString ());
  -            //_e.printStackTrace (System.out);
  +            try
  +            {
  +               if (verbose) System.out.println (logTag + "remove bean #"+b);
  +               entity[b].remove ();
  +               ++txs;
  +            }
  +            catch (Exception _e)
  +            {
  +               System.out.println (logTag + "error in removing bean #"+b+": 
"+_e.toString ());
  +               prepareExit (true, txs, start, System.currentTimeMillis ());
  +               //_e.printStackTrace (System.out);
  +            }
            }
         }
  +      prepareExit (false, txs, start, System.currentTimeMillis ());
  +   }
  +   
  +   private void prepareExit (boolean _failed, int _transactions, long _start, long 
_stop)
  +   {
  +      config.put ("transactions", new Integer (_transactions));
  +      config.put ("time", new Integer ((int)(_stop - _start) / 1000));
  +      config.put ("failed", new Boolean (_failed));
      }
  +   
   }
  
  
  

Reply via email to