User: salborini
  Date: 00/10/09 11:12:28

  Added:       src/main/org/jboss/test/lock/test Main.java
  Log:
  New test for locking
  
  Revision  Changes    Path
  1.1                  jbosstest/src/main/org/jboss/test/lock/test/Main.java
  
  Index: Main.java
  ===================================================================
  package org.jboss.test.lock.test;
  
  import java.rmi.*;
  
  import java.util.HashMap;
  import java.util.StringTokenizer;
  
  import javax.naming.Context;
  import javax.naming.InitialContext;
  
  import javax.ejb.FinderException;
  
  import org.jboss.test.lock.interfaces.EnterpriseEntityHome;
  import org.jboss.test.lock.interfaces.EnterpriseEntity;
  
  
  public class Main {
        
        boolean deployed = false;
        int nbThreads;
        int iterations;
        boolean b2b;
        
        HashMap param = new HashMap();
        EnterpriseEntity entity;
        
        public static void main(String arg[]) {
                Main main = new Main(arg);
                
                main.go();
        }
        
        public Main(String arg[]) {
                
                // scanning parameters
                int i = 0;
                while (i < arg.length) {
                        StringTokenizer st = new StringTokenizer (arg[i++], "=");
                        param.put (st.nextToken (),     st.hasMoreTokens () ? 
st.nextToken () : "");
                }
        }
        
        public void go() {
                try {
                        if (param.containsKey("help") || param.containsKey("-help")) {
                                System.out.println("Valid Parameters:");
                                System.out.println("  threads=<t>     run <t> threads 
concurrently (default 2)");
                                System.out.println("  iterations=<n>  each thread will 
perform <n> calls (default 10)");
                                System.out.println("  b2b             use bean to bean 
calls (default: single bean call)");
                                System.out.println();
                                System.exit(0);
                        }
                                
                        
                        init();       // get params
                        deploy();     // deploy the bean
                        
                        Context ctx = new InitialContext();
                        EnterpriseEntityHome home = 
(EnterpriseEntityHome)ctx.lookup("EnterpriseEntity");
                        
                        try {
                                entity = home.findByPrimaryKey("seb");
                        } catch (FinderException e) {
                                entity = home.create("seb");
                        }
                        
                        if (b2b) entity.setNextEntity("daniel");
                        
                        Worker[] threads = new Worker[nbThreads];
                        
                        System.out.println("Spawning " + nbThreads + " threads for " + 
                                iterations + " iterations" + 
                                (b2b ? " with bean to bean call" : " with single bean 
call")); 
                        
                        for (int i=0; i<nbThreads; i++) {
                                threads[i] = new Worker("thread no " + (i+1));
                                threads[i].start();
                        }
                        
                        for (int i=0; i<nbThreads; i++) threads[i].join();
                
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
        
        
        private void init() {
                nbThreads = 2;
                try {
                        nbThreads = Integer.parseInt((String)param.get("threads"));
                } catch (Exception e) {
                        // ignore
                }
        
                iterations = 10;
                try {
                        iterations = Integer.parseInt((String)param.get("iterations"));
                } catch (Exception e) {
                        // ignore
                }
                
                b2b=false;
                try {
                        b2b = param.containsKey("b2b");
                } catch (Exception e) {
                        // ignore
                }
        }
        
        
        protected void deploy() throws Exception {
                if (deployed) return;
                        
                System.out.println("_____________________________________________");
                System.out.println();
                System.out.println("jBoss, the EJB Open Source Server");
                System.out.println("Copyright (C), The jBoss Organization, 2000");
                System.out.println("_____________________________________________");
                System.out.println();
                System.out.println("Welcome to the lock test v0.1");
                System.out.println("_____________________________________________");
                System.out.println();
                System.out.print("Deploying the bean...");
                System.out.flush();
                new org.jboss.jmx.client.Deployer().deploy("../deploy/locktest.jar");
                deployed = true;
                System.out.println("done!");
        }
        
        
        public class Worker extends Thread {
                public String name;
                public boolean running;
                
                public Worker(String name) {
                        this.name = name;
                        running = true;
                }
                
                public void run() {
                        long start = System.currentTimeMillis();
                        int i;
                        
                        for (i=0; i<iterations; i++) {
                                if (!running) break;
                                        
                                try { 
                                        if (b2b) {
                                                entity.setAndCopyField(name);
                                    
                                        } else {
                                                entity.setField(name);
                                        
                                        }
                                    System.out.println(name + " " + (i+1) + " 
iterations done");
                                } catch (Exception e) {
                                        System.out.println(name + " caught an 
exception, dying");
                                        e.printStackTrace();
                                        running = false;
                                }
                        }
                        
                        long end = System.currentTimeMillis();
                        System.out.println(name + ": did " + i + " iterations in " + 
(end-start) + "ms");
                }
        }          
  }
  
  
  
  

Reply via email to