> >I call the main-method from my test class the command line. > >- The method does lookup an Entity EJB on JBoss server. > >- Get a Property from the Bean > >- Serialize the Bean using Betwixt > > > >Then I tested the same by calling the same method from an servlet, it > >slowes down dramatically: > > > > |Command Line | from Servlet > >----------+-------------+------------- > >Lookup | 144 ms | 2490 ms > >Getter | 17 ms | 2843 ms > >Serialize | 708 ms | 64147 ms > > > >Has anybody an idea what causes this slowdown, or anybody > >seen something similar before? > >Any help would be apriciated. > > Strange. How is your test set up, that is: > - Is the command-line class on the same server as JBoss?
yes, it's on the same server, but in another jvm, the tomcat-instance also. > - Is the test class in the same jar as the bean class? i didn't package the jar. just plain .class-files-directory in the classpath. > - Are you sure the Getter isn't doing another lookup? I'm sure, the getter getId() only return an Integer. Should be fast. > - I have no clue why serialization is two orders of magnitude slower... :( I was first thinking it's a problem with all the jars in the classpath and reflection, but it I run my commandline test with the same classpath and the same jvm options like tomcat, it slows down only about 5 to 10% > > Post the tested class and the test class. The Source is below: The TestClient-Class (I call this from command line or from the servlet) ------------------------------------------------------------------------ package com.triplemind.samples; import java.io.IOException; import java.io.StringWriter; import java.lang.reflect.Proxy; import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import org.apache.commons.betwixt.XMLIntrospector; import org.apache.commons.betwixt.io.BeanWriter; import org.apache.commons.betwixt.strategy.ClassNormalizer; import org.apache.commons.logging.impl.SimpleLog; import com.triplemind.accommodation.AccommodationRemote; import com.triplemind.accommodation.AccommodationRemoteHome; public class TestClient { public static void main(String[] args) throws IOException { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.PROVIDER_URL, "localhost:1099"); env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); try { Context ctx = new InitialContext(env); Object obj = ctx.lookup("Accommodation"); System.out.print("Lookuped: "); System.out.println(obj); AccommodationRemoteHome home = (AccommodationRemoteHome) javax.rmi.PortableRemoteObject. narrow( obj, AccommodationRemoteHome.class); long time = System.currentTimeMillis(); AccommodationRemote acco = home.findByPrimaryKey(new Integer(2157)); long time2 = System.currentTimeMillis(); System.out.println(acco.getId()); long time3 = System.currentTimeMillis(); System.out.println(acco.getLocation()); System.out.println("IsProxy: " + Boolean.toString(java.lang.reflect.Proxy.isProxyClass(acco.getClass()))); System.out.println(acco.getClass().toString() + " implements:"); Class[] interf = acco.getClass().getInterfaces(); for (int i = 0; i < interf.length; i++) { System.out.println(" - " + interf[i].toString()); } SimpleLog log = new SimpleLog("Logger"); log.setLevel(log.LOG_LEVEL_ALL); StringWriter outputWriter = new StringWriter(); BeanWriter beanWriter = new BeanWriter(outputWriter); XMLIntrospector ispec = beanWriter.getXMLIntrospector(); ispec.setAttributesForPrimitives(false); ispec.setLog(log); ispec.setClassNormalizer(new ClassNormalizer() { public Class normalize(Class clazz) { if (Proxy.isProxyClass(clazz) && clazz.getInterfaces().length > 0) { return clazz.getInterfaces()[0]; } return clazz; } }); beanWriter.getBindingConfiguration().setMapIDs(true); beanWriter.enablePrettyPrint(); beanWriter.writeXmlDeclaration("<?xml version='1.0' ?>"); System.out.println("write Bean..."); beanWriter.write(acco); System.out.println(outputWriter.toString()); System.out.println("Duration 1st EJB: " + Long.toString(time2 - time) + "ms"); System.out.println("Duration 1st getId: " + Long.toString(time3 - time2) + "ms"); System.out.println("Duration 1st XML: " + Long.toString(System.currentTimeMillis() - time3) + "ms"); log.setLevel(log.LOG_LEVEL_OFF); time = System.currentTimeMillis(); for (int i = 0; i < 1000; i++) { beanWriter.write(acco); } System.out.println("Duration: " + Long.toString(System.currentTimeMillis() - time) + "us"); } catch (Exception e) { e.printStackTrace(); System.out.println("Exception: " + e.getMessage()); } } } Test Servlet, this is very slow ----------------------------------------------------------------- package com.triplemind.samples; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletOutputStream; public class TestEJBServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletOutputStream out = response.getOutputStream(); out.println("<html><body><h1>TestEJBServlet</h1><p>running...</p>"); TestClient.main(new String[] {}); out.println("<p>finished!</p></body></html>"); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]