User: salborini
  Date: 00/11/28 17:15:13

  Added:       src/main/org/jboss/test/bench/servlet ConfigData.java
                        Dispatcher.java EJBTester.java FullTester.java
                        SimpleServlet.java
  Log:
  benchmark test
  
  Revision  Changes    Path
  1.1                  jbosstest/src/main/org/jboss/test/bench/servlet/ConfigData.java
  
  Index: ConfigData.java
  ===================================================================
  package org.jboss.test.bench.servlet;
  
  import java.util.ArrayList;
  import java.util.Hashtable;
  
  public class ConfigData {
        ArrayList names = new ArrayList();
        Hashtable infos = new Hashtable();
  
        public ConfigData() {
                setInfo("Hardware", "");
                setInfo("CPU", "");
                setInfo("RAM", "");
                setInfo("OS", "");
                setInfo("JDK Vendor/Version", "");
                setInfo("EJB Server", "");
                setInfo("Servlet Engine", "");
                setInfo("Web Server", "");
                setInfo("DB", "");
        }
  
        public int size() {
                return infos.size();
        }
  
        public String getName(int i) {
                return (String)names.get(i);
        }
  
        public String getValue(int i) {
                return (String)infos.get(names.get(i));
        }
  
        public void setInfo(String name, String value) {
                if (!infos.containsKey(name)) names.add(name);
                infos.put(name, value);
        }
  }
  
  
  
  
  1.1                  jbosstest/src/main/org/jboss/test/bench/servlet/Dispatcher.java
  
  Index: Dispatcher.java
  ===================================================================
  package org.jboss.test.bench.servlet;
  
  import java.util.Hashtable;
  import java.util.Enumeration;
  
  import javax.servlet.ServletException;
  
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  
  public class Dispatcher extends HttpServlet {
  
        public static String[] params = {"hw", "os", "ram", "cpu", "jdk", "ejb", 
"web", "servlet" };
  
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, java.io.IOException {
                try {
  
                resp.setHeader("Location", req.getContextPath() + "/");
  
                if (req.getParameter("gototest") != null)
                        // save config and go to tests
                        saveInfo(req, resp);
                
                else if (req.getParameter("goejb") != null)
                        // test ejb
                        testEjb(req, resp);
  
                else if (req.getParameter("goall") != null)
                        // test the whole stack
                        testAll(req, resp);
                
                else 
                        // should not get there, go back to the main page
                        req.getRequestDispatcher("/index.jsp").include(req, resp);
                } catch (Throwable t) { 
                        t.printStackTrace();
                }
  
        }
  
      /** 
         * Saves the info from the request in the session object                
         */
        void saveInfo(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, java.io.IOException {
                
                HttpSession session = req.getSession();
                ConfigData conf = (ConfigData)session.getAttribute("conf");
  
                for (int i=0; i<conf.size(); i++) {
                        conf.setInfo(conf.getName(i), 
req.getParameter(conf.getName(i)));
                }
                
                req.getRequestDispatcher("/tests.jsp").include(req, resp);
                
        }               
        
      void testEjb(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, java.io.IOException {
  
                EJBTester ejbTester = new EJBTester(req);
                
                // do the test
            ejbTester.test();
                
                req.setAttribute("ejbTester", ejbTester);
  
                // finally include to the correct jsp page
  
                req.getRequestDispatcher("/ejbResult.jsp").include(req, resp);
                
        }
  
        void testAll(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, java.io.IOException {
  
                FullTester fullTester = new FullTester(req);
                
                // do the test
            fullTester.test();
                
                req.setAttribute("fullTester", fullTester);
  
                // finally include to the correct jsp page
                req.getRequestDispatcher("/allResult.jsp").include(req, resp);
  
        }
  
  }
  
  
  
  
  
  1.1                  jbosstest/src/main/org/jboss/test/bench/servlet/EJBTester.java
  
  Index: EJBTester.java
  ===================================================================
  package org.jboss.test.bench.servlet;
  
  import java.util.ArrayList;
  
  import javax.servlet.http.HttpServletRequest;
  
  import javax.naming.Context;
  import javax.naming.InitialContext;
  
  import org.jboss.test.bench.interfaces.MySession;
  import org.jboss.test.bench.interfaces.MySessionHome;
  import org.jboss.test.bench.interfaces.SimpleEntity;
  import org.jboss.test.bench.interfaces.SimpleEntityHome;
  import org.jboss.test.bench.interfaces.ComplexEntity;
  import org.jboss.test.bench.interfaces.ComplexEntityHome;
  import org.jboss.test.bench.interfaces.AComplexPK;
  
  
  
  public class EJBTester {
        int maxClients;
        Context ctx;
        
        HttpServletRequest req;
  
        // only the "depth" first items of this array will be used
        public static final int nbClients[] = { 1, 10, 50, 100, 200, 500 };
        public int depth;
        public int nbTests = 0;
        int nbCalls;
        int dataSize = 1024;
  
        ArrayList testNames = new ArrayList();
        ArrayList testResults = new ArrayList();
  
        public EJBTester(HttpServletRequest req) {
                
                maxClients = Integer.parseInt(req.getParameter("maxClients"));
                nbCalls = Integer.parseInt(req.getParameter("nbCalls"));
                
                this.req = req;
  
                depth = nbClients.length;
                for (int i = 0; i< nbClients.length; i++) if (nbClients[i] > 
maxClients) {
                        depth = i; 
                        break;
                }
  
                try {
                        
                        
System.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                        System.setProperty("java.naming.provider.url","localhost");
                        
System.setProperty("java.naming.factory.url.pkgs","org.jboss.naming;");
                        
                        ctx = new InitialContext();
                        
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
  
        public String getTestName(int i) {
                return (String)testNames.get(i);
        }
  
        public float getTestResult(int i, int j) {
                return ((float[])testResults.get(i))[j];
        }
  
        public void test() {
                try {
                        if (req.getParameter("createSimpleEntity") != null) {
                                SimpleEntityHome home;
                                float[] result;
                                
                                home = (SimpleEntityHome)ctx.lookup("SimpleEntity");
                                result = testSimpleCreateEntity(home);
                                testNames.add("Simple Entity Bean creation 
(optimized)");
                                testResults.add(result);
                                nbTests++;
                                
                                home = 
(SimpleEntityHome)ctx.lookup("NonOptSimpleEntity");
                                result = testSimpleCreateEntity(home);
                                testNames.add("Simple Entity Bean creation 
(serialized)");
                                testResults.add(result);
                                nbTests++;
                        }
                        if (req.getParameter("createComplexEntity") != null) {
                                ComplexEntityHome home;
                                float[] result;
                                
                                home = (ComplexEntityHome)ctx.lookup("ComplexEntity");
                                result = testComplexCreateEntity(home);
                                testNames.add("Complex Entity Bean creation 
(optimized)");
                                testResults.add(result);
                                nbTests++;
                                
                                home = 
(ComplexEntityHome)ctx.lookup("NonOptComplexEntity");
                                result = testComplexCreateEntity(home);
                                testNames.add("Complex Entity Bean creation 
(serialized)");
                                testResults.add(result);
                                nbTests++;
                        }
                        if (req.getParameter("readEntity") != null) {
                                SimpleEntityHome home;
                                float[] result;
                                
                                home = (SimpleEntityHome)ctx.lookup("SimpleEntity");
                                result = readEntity(home);
                                testNames.add("Read-only call on an entity bean 
(optimized)");
                                testResults.add(result);
                                nbTests++;
                                
                                home = 
(SimpleEntityHome)ctx.lookup("NonOptSimpleEntity");
                                result = readEntity(home);
                                testNames.add("Read-only call on an entity bean 
(serialized)");
                                testResults.add(result);
                                nbTests++;
                        }
                        if (req.getParameter("writeEntity") != null) {
                                ComplexEntityHome home;
                                float[] result;
                                
                                home = (ComplexEntityHome)ctx.lookup("ComplexEntity");
                                result = writeEntity(home);
                                testNames.add("Write call to entity (optimized)");
                                testResults.add(result);
                                nbTests++;
                                
                                home = 
(ComplexEntityHome)ctx.lookup("NonOptComplexEntity");
                                result = writeEntity(home);
                                testNames.add("Write call to entity (serialized)");
                                testResults.add(result);
                                nbTests++;
                        }
                        if (req.getParameter("callSF") != null) {
                                MySessionHome home;
                                float[] result;
                                
                                home = (MySessionHome)ctx.lookup("StatefulSession");
                                result = callSession(home);
                                testNames.add("Call to stateful session (optimized)");
                                testResults.add(result);
                                nbTests++;
                        }
                        if (req.getParameter("callSL") != null) {
                                MySessionHome home;
                                float[] result;
                                                                
                                home = (MySessionHome)ctx.lookup("StatelessSession");
                                result = callSession(home);
                                testNames.add("Call to stateless session (optimized)");
                                testResults.add(result);
                                nbTests++;
                        }
                        
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
  
        public float[] testSimpleCreateEntity(SimpleEntityHome home) throws Exception {
  
                Thread[] threads = new Thread[maxClients];
                float[] result = new float[depth];
  
                class Worker extends Thread {
                        int startId = 0;
                        int numBeans = 0;
                        SimpleEntityHome home;
                        
                        public Worker(int startId, int numBeans, SimpleEntityHome 
home) {
                                this.startId = startId;
                                this.numBeans = numBeans;
                                this.home = home;
                        }
  
                        public void run() {
                                for (int i=0; i<numBeans; i++) {
                                        try {
                                                SimpleEntity bean = 
home.create(startId + i);
                                        } catch (Exception e) {
                                        }
                                }
                        }
                }
  
                for (int i = 0; i < depth; i++) {
                        
                        System.out.println("Testing simple bean creation with " + 
nbClients[i] + " clients");
                        
                        int numBeans = nbCalls / nbClients[i];
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                Worker worker = new Worker(i * nbCalls + threadNumber 
* numBeans, numBeans, home);
                                threads[threadNumber] = worker;
                        }
                        
                        long start = System.currentTimeMillis();
                        
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                threads[threadNumber].start();
                        }
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                try {
                                        threads[threadNumber].join();
                                } catch (InterruptedException e) {
                                        // ignore
                                }
                        }
  
                        long stop = System.currentTimeMillis();
                        
                        result[i] = ((float)(stop-start)) / (numBeans * nbClients[i]);
                        
                }
                
                return result;
        }
  
        public float[] testComplexCreateEntity(ComplexEntityHome home) throws 
Exception {
  
                Thread[] threads = new Thread[maxClients];
                float[] result = new float[depth];
  
                class Worker extends Thread {
                        long aLong;
                        double aDouble;
                        int numBeans = 0;
                        ComplexEntityHome home;
                        String aString = new String(new char[dataSize]);
                        
                        public Worker(long aLong, double aDouble, int numBeans, 
ComplexEntityHome home) {
                                this.aLong = aLong;
                                this.aDouble = aDouble;
                                this.numBeans = numBeans;
                                this.home = home;
                        }
  
                        public void run() {
                                for (int i=0; i<numBeans; i++) {
                                        try {
                                                ComplexEntity bean = home.create(true, 
i, aLong, aDouble, aString);
                                        } catch (Exception e) {
                                        }
                                }
                        }
                }
  
                for (int i = 0; i < depth; i++) {
                        
                        System.out.println("Testing complex bean creation with " + 
nbClients[i] + " clients");
                        
                        int numBeans = nbCalls / nbClients[i];
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
  
                                Worker worker = new Worker((long)i, 
(double)threadNumber, numBeans, home);
                                threads[threadNumber] = worker;
                        }
                        
                        long start = System.currentTimeMillis();
                        
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                threads[threadNumber].start();
                        }
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                try {
                                        threads[threadNumber].join();
                                } catch (InterruptedException e) {
                                        // ignore
                                }
                        }
  
                        long stop = System.currentTimeMillis();
                        
                        result[i] = ((float)(stop-start)) / (numBeans * nbClients[i]);
                        
                }
                
                return result;
        }
  
        public float[] readEntity(SimpleEntityHome home) throws Exception {
                Thread[] threads = new Thread[maxClients];
                float[] result = new float[depth];
  
                class Worker extends Thread {
                        int loops;
                        SimpleEntity bean;
                        
                        public Worker(int beanId, SimpleEntityHome home, int loops) 
throws Exception {
                                this.loops = loops;
                                
                                try { 
                                        bean = home.findByPrimaryKey(new 
Integer(beanId));
                                } catch (Exception e) {
                                        bean = home.create(beanId);
                                }
                        }
  
                        public void run() {
                                for (int i=0; i<loops; i++) {
                                        try {
                                                int field = bean.getField();
                                        } catch (Exception e) {
                                        }
                                }
                        }
                }
  
                for (int i = 0; i < depth; i++) {
                        
                        System.out.println("Testing read-only call on simple entity 
with " + nbClients[i] + " clients");
                        
                        int loops = nbCalls / nbClients[i];
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
  
                                Worker worker = new Worker(threadNumber, home, loops);
                                threads[threadNumber] = worker;
                        }
                        
                        long start = System.currentTimeMillis();
                        
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                threads[threadNumber].start();
                        }
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                try {
                                        threads[threadNumber].join();
                                } catch (InterruptedException e) {
                                        // ignore
                                }
                        }
  
                        long stop = System.currentTimeMillis();
                        
                        result[i] = ((float)(stop-start)) / (loops * nbClients[i]);
                        
                }
                
                return result;
        }
  
        public float[] writeEntity(ComplexEntityHome home) throws Exception {
                Thread[] threads = new Thread[maxClients];
                float[] result = new float[depth];
  
                class Worker extends Thread {
                        int loops;
                        String otherField = new String(new char[dataSize]);
                        ComplexEntity bean;
                        
                        public Worker(int beanId, ComplexEntityHome home, int loops) 
throws Exception {
                                this.loops = loops;
                                
                                try { 
                                        bean = home.findByPrimaryKey(new 
AComplexPK(true, beanId, (long)0, (double)0, "empty"));
                                } catch (Exception e) {
                                        bean = home.create(true, beanId, (long)0, 
(double)0, "empty");
                                }
                        }
  
                        public void run() {
                                for (int i=0; i<loops; i++) {
                                        try {
                                                bean.setOtherField(otherField + i);
                                        } catch (Exception e) {
                                        }
                                }
                        }
                }
  
                for (int i = 0; i < depth; i++) {
                        
                        System.out.println("Testing call with db write on complex 
entity with " + nbClients[i] + " clients");
                        
                        int loops = nbCalls / nbClients[i];
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
  
                                Worker worker = new Worker(i * maxClients + 
threadNumber, home, loops);
                                threads[threadNumber] = worker;
                        }
                        
                        long start = System.currentTimeMillis();
                        
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                threads[threadNumber].start();
                        }
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                try {
                                        threads[threadNumber].join();
                                } catch (InterruptedException e) {
                                        // ignore
                                }
                        }
  
                        long stop = System.currentTimeMillis();
                        
                        result[i] = ((float)(stop-start)) / (loops * nbClients[i]);
                        
                }
                
                return result;
        }
  
        public float[] callSession(MySessionHome home) throws Exception {
                Thread[] threads = new Thread[maxClients];
                float[] result = new float[depth];
  
                class Worker extends Thread {
                        int loops;
                        MySession bean;
                        
                        public Worker(MySessionHome home, int loops) throws Exception {
                                this.loops = loops;
                                
                                bean = home.create();
                        }
  
                        public void run() {
                                for (int i=0; i<loops; i++) {
                                        try {
                                                int res = bean.getInt();
                                        } catch (Exception e) {
                                                e.printStackTrace();
                                        }
                                }
                        }
                }
  
                for (int i = 0; i < depth; i++) {
                        
                        System.out.println("Testing call to session bean " + 
nbClients[i] + " clients");
                        
                        int loops = nbCalls / nbClients[i];
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
  
                                Worker worker = new Worker(home, loops);
                                threads[threadNumber] = worker;
                        }
                        
                        long start = System.currentTimeMillis();
                        
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                threads[threadNumber].start();
                        }
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                try {
                                        threads[threadNumber].join();
                                } catch (InterruptedException e) {
                                        // ignore
                                }
                        }
  
                        long stop = System.currentTimeMillis();
                        
                        result[i] = ((float)(stop-start)) / (loops * nbClients[i]);
                        
                }
                
                return result;
        }
  
                
  
  }
  
  
  
  1.1                  jbosstest/src/main/org/jboss/test/bench/servlet/FullTester.java
  
  Index: FullTester.java
  ===================================================================
  package org.jboss.test.bench.servlet;
  
  import java.net.URL;
  import java.util.ArrayList;
  
  import javax.servlet.http.HttpServletRequest;
  
  public class FullTester {
        int maxClients;
        
        HttpServletRequest req;
  
        // only the "depth" first items of this array will be used
        public static final int nbClients[] = { 1, 10, 50, 100, 200, 500 };
        public int depth;
        public int nbTests = 0;
        int nbCalls;
  
        ArrayList testNames = new ArrayList();
        ArrayList testResults = new ArrayList();
  
        public FullTester(HttpServletRequest req) {
                
                maxClients = Integer.parseInt(req.getParameter("maxClients"));
                nbCalls = Integer.parseInt(req.getParameter("nbCalls"));
                
                this.req = req;
  
                depth = nbClients.length;
                for (int i = 0; i< nbClients.length; i++) if (nbClients[i] > 
maxClients) {
                        depth = i; 
                        break;
                }
        }
  
        public String getTestName(int i) {
                return (String)testNames.get(i);
        }
  
        public float getTestResult(int i, int j) {
                return ((float[])testResults.get(i))[j];
        }
  
        public void test() {
                try {
                        if (req.getParameter("servlet") != null) {
                                float[] result = 
testURL("http://localhost:8080/bench/servlet/SimpleServlet?dest=none");
                                testNames.add("Servlet alone");
                                testResults.add(result);
                                nbTests++;
  
                        }
                        if (req.getParameter("servlet2SL") != null) {
                                float[] result = 
testURL("http://localhost:8080/bench/servlet/SimpleServlet?dest=SL");
                                testNames.add("Servlet calling stateless session");
                                testResults.add(result);
                                nbTests++;
  
                        }
                        if (req.getParameter("servlet2Entity") != null) {
                                float[] result = 
testURL("http://localhost:8080/bench/servlet/SimpleServlet?dest=Entity");
                                testNames.add("Servlet calling entity");
                                testResults.add(result);
                                nbTests++;
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
  
        public float[] testURL(String url) throws Exception {
  
                Thread[] threads = new Thread[maxClients];
                float[] result = new float[depth];
  
  
                class Worker extends Thread {
                        String url;
                        int loops;
  
                        public Worker(int loops, String url) {
                                this.loops = loops;
                                this.url = url;
                        }
  
                        public void run() {
                                for (int i=0; i<loops; i++) {
                                        try {
                                                URL theUrl = new URL(url);
                                                Object obj = theUrl.getContent();
  
                                        } catch (Exception e) {
                                        }
                                }
                        }
                }
  
                for (int i = 0; i < depth; i++) {
                        
                        System.out.println("Calling url " + url + " with " + 
nbClients[i] + " clients");
                        
                        int loops = nbCalls / nbClients[i];
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                Worker worker = new Worker(loops, url);
                                threads[threadNumber] = worker;
                        }
                        
                        long start = System.currentTimeMillis();
                        
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                threads[threadNumber].start();
                        }
  
                        for (int threadNumber = 0; threadNumber < nbClients[i]; 
threadNumber++) {
                                try {
                                        threads[threadNumber].join();
                                } catch (InterruptedException e) {
                                        // ignore
                                }
                        }
  
                        long stop = System.currentTimeMillis();
                        
                        result[i] = ((float)(stop-start)) / (loops * nbClients[i]);
                        
                }
                
                return result;
        }
  
  }
  
  
  
  1.1                  
jbosstest/src/main/org/jboss/test/bench/servlet/SimpleServlet.java
  
  Index: SimpleServlet.java
  ===================================================================
  package org.jboss.test.bench.servlet;
  
  import java.util.Hashtable;
  import java.util.Enumeration;
  import java.util.Random;
  import java.io.PrintWriter;
  
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  
  import javax.naming.Context;
  import javax.naming.InitialContext;
  
  import org.jboss.test.bench.interfaces.*;
  
  public class SimpleServlet extends HttpServlet {
        PrintWriter out;
  
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, java.io.IOException {
  
                String dest = req.getParameter("dest");
  
                resp.setContentType("text/html");
                out = resp.getWriter();
                
                out.println("<html>");
                out.println("<head>");
                
                out.println("<title>HelloEJB</title>");
                out.println("</head>");
                        
                out.println("<body>");
                
                out.println("<h1>Servlet calling EJB</h1>");
                                        
                if ("SL".equals(dest)) callStateless();
                else if ("Entity".equals(dest)) callEntity();
                
                out.println("</body>");
                out.println("</html>");
        }
  
        Context getContext() throws Exception {
                
System.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                System.setProperty("java.naming.provider.url","localhost");
                System.setProperty("java.naming.factory.url.pkgs","org.jboss.naming;");
                
                return new InitialContext();
                
        }
        
        void callStateless() {
                try {
                        Context ctx = getContext();
                        MySessionHome home = 
(MySessionHome)ctx.lookup("StatelessSession");
                        MySession bean = home.create();
  
                        out.println("called stateless session and it said: " + 
bean.getInt());
                        
                } catch (Exception e) {
                        out.println("<pre>");
                        e.printStackTrace(out);
                        out.println("</pre>");
                }
        }
        
        void callEntity() {
                try {
                        Context ctx = getContext();
                        SimpleEntityHome home = 
(SimpleEntityHome)ctx.lookup("SimpleEntity");
                        SimpleEntity bean = home.create(50000+ new Random().nextInt());
  
                        out.println("called entity and it said: " + bean.getField());
                        
                } catch (Exception e) {
                        out.println("<pre>");
                        e.printStackTrace(out);
                        out.println("</pre>");
                }
        }
        
  }
  
  
  
  
  

Reply via email to