From: Scott M S. <st...@us...> - 2002-02-11 23:02:19
|
User: starksm Date: 02/02/11 15:02:16 Added: catalina/src/main/org/jboss/test/tomcat/servlet HelloEJB.java PrintClassLoaders.java Util.java Log: A sample test ear Revision Changes Path 1.1 contrib/catalina/src/main/org/jboss/test/tomcat/servlet/HelloEJB.java Index: HelloEJB.java =================================================================== package org.jboss.test.tomcat.servlet; import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.jboss.test.tomcat.ejb.interfaces.StatelessSessionHome; import org.jboss.test.tomcat.ejb.interfaces.StatelessSession; /** A servlet that accesses the @author Sco...@jb... @version $Revision: 1.1 $ */ public class HelloEJB extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.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>"); try { boolean speedTest = "speed".equals(request.getQueryString()); boolean trace = "trace".equals(request.getQueryString()); testBean("NonOptimized", speedTest, trace, out); testBean("Optimized", speedTest, trace, out); if( trace == true ) { out.println("<pre><h2>Servlet Trace Info:</h2>\n"); out.println(PrintClassLoaders.getClassLoaders()); out.println("<h2>JNDI ENC:</h2>\n"); Util.dumpENC(out); out.println("</pre>"); } out.println("</body>"); out.println("</html>"); } catch (Exception e) { out.println("Context not found: exception message:<pre>"); e.printStackTrace(out); out.println("</pre>"); out.println("</body>"); out.println("</html>"); } } static void testBean(String jndiName, boolean speedTest, boolean trace, PrintWriter out) throws NamingException { Context ctx = new InitialContext(); try { StatelessSessionHome home = (StatelessSessionHome)ctx.lookup(jndiName); StatelessSession bean = home.create(); jndiName = "java:comp/env/ejb/" + jndiName; out.print("<h2>Accessing EJB: " + jndiName + ", method=<tt>getMessage()</tt></h2>"); if( trace == false ) out.print(bean.getMessage()); else { out.println("<pre>\n"); out.print(bean.getMessageAndTrace()); out.println("</pre>\n"); } int iter = 1000; if (speedTest) { out.println("<h3>Speed Test ("+ iter + " iterations)</h3>"); long start = System.currentTimeMillis(); long start2 = start; for (int i = 0 ; i < iter; i++) { bean.getMessage(); if (i % 100 == 0 && i != 0) { long end = System.currentTimeMillis(); out.println("Time/call(ms):"+((end-start2)/100.0)); start2 = end; } } long end = System.currentTimeMillis(); out.println("<br>Avg. time/call(ms):"+((end-start)/(float)iter)+"</p>"); } } catch (Exception e) { out.println("<br>Call failed... Exception:"); out.println("<pre>"); e.printStackTrace(out); out.println("</pre>"); } } } 1.1 contrib/catalina/src/main/org/jboss/test/tomcat/servlet/PrintClassLoaders.java Index: PrintClassLoaders.java =================================================================== package org.jboss.test.tomcat.servlet; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import java.net.URLClassLoader; import javax.servlet.*; import javax.servlet.http.*; /** * * @author Sco...@di... * @version $Revision: 1.1 $ */ public class PrintClassLoaders extends HttpServlet { /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet</title>"); out.println("</head>"); out.println("<body><pre>"); out.println(getClassLoaders()); out.println("</body></pre>"); out.println("</html>"); out.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Returns a short description of the servlet. */ public String getServletInfo() { return "A servlet prints the request ClassLoaders"; } public static String getClassLoaders() { ClassLoader loader = Thread.currentThread().getContextClassLoader(); StringBuffer buffer = new StringBuffer(); do { buffer.append("+++ "); buffer.append(loader); buffer.append('\n'); if( loader instanceof URLClassLoader ) { URLClassLoader uloader = (URLClassLoader) loader; URL[] paths = uloader.getURLs(); for(int p = 0; p < paths.length; p ++) { buffer.append(" - "); buffer.append(paths[p]); buffer.append('\n'); } } loader = loader.getParent(); } while( loader != null ); // Write the call stack buffer.append("+++ Call stack:\n"); Throwable t = new RuntimeException(); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); buffer.append(sw.toString()); return buffer.toString(); } } 1.1 contrib/catalina/src/main/org/jboss/test/tomcat/servlet/Util.java Index: Util.java =================================================================== package org.jboss.test.tomcat.servlet; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import java.net.URLClassLoader; import java.util.Date; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.LinkRef; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.NameClassPair; import javax.naming.NameParser; /** A utility class for generating ENC and class loader dumps. @author Sco...@jb... @version $Revision: 1.1 $ */ public class Util { public static void showTree(String indent, Context ctx, PrintWriter out) throws NamingException { ClassLoader loader = Thread.currentThread().getContextClassLoader(); NamingEnumeration enum = ctx.list(""); while( enum.hasMoreElements() ) { NameClassPair ncp = (NameClassPair)enum.next(); String name = ncp.getName(); out.print(indent + " +- " + name); boolean recursive = false; boolean isLinkRef = false; try { Class c = loader.loadClass(ncp.getClassName()); if( Context.class.isAssignableFrom(c) ) recursive = true; if( LinkRef.class.isAssignableFrom(c) ) isLinkRef = true; } catch(ClassNotFoundException cnfe) { } if( isLinkRef ) { try { LinkRef link = (LinkRef) ctx.lookupLink(name); out.print("[link -> "); out.print(link.getLinkName()); out.print(']'); } catch(Throwable e) { e.printStackTrace(); out.print("[invalid]"); } } out.println(); if( recursive ) { try { Object value = ctx.lookup(name); if( value instanceof Context ) { Context subctx = (Context) value; showTree(indent + " | ", subctx, out); } else { out.println(indent + " | NonContext: "+value); } } catch(Throwable t) { out.println("Failed to lookup: "+name+", errmsg="+t.getMessage()); } } } } public static void dumpClassLoader(ClassLoader cl, PrintWriter out) { int level = 0; while( cl != null ) { String msg = "Servlet ClassLoader["+level+"]: "+cl.getClass().getName()+':'+cl.hashCode(); out.println(msg); if( cl instanceof URLClassLoader ) { URLClassLoader ucl = (URLClassLoader) cl; URL[] urls = ucl.getURLs(); msg = " URLs:"; out.println(msg); for(int u = 0; u < urls.length; u ++) { msg = " ["+u+"] = "+urls[u]; out.println(msg); } } cl = cl.getParent(); level ++; } } public static void dumpENC(PrintWriter out) throws NamingException { InitialContext iniCtx = new InitialContext(); Context enc = (Context) iniCtx.lookup("java:comp/env"); showTree("", enc, out); } public static String displayClassLoaders(ClassLoader cl) throws NamingException { StringWriter sw = new StringWriter(); PrintWriter out = new PrintWriter(sw); dumpClassLoader(cl, out); return sw.toString(); } public static String displayENC() throws NamingException { StringWriter sw = new StringWriter(); PrintWriter out = new PrintWriter(sw); dumpENC(out); return sw.toString(); } } |