Remote EJB is 3x slower than WebService in 7.1 latest from git
willreichert Apr 7, 2012 1:14 AMWe are testing with the Specj application where the same bean is exposed as both an EJB and a Web Service. The benchmark results were showing the remote EJB calls took 3x longer than calls to the same bean via the web service. I created a sample application that returns the same object (to minimize gc overhead) and exposed it as both a Web Service and Remote EJB. The sample also demonstrates a 3x increase in response time when using the EJB interface. I am running on the latest build from git master and use a single threaded app to drive load so I doubt concurrency is part of the problem. I ran the test with OProfile and the highest sampled Java method was Ljava/io/DataOutputStream.write(). I unfortunately cannot get the full callstack because attaching byteman to that method results in an infinite loop (unless someone has a more sophisticated way to attach without capturing the logging for log files).
Sample Applicaiton
The payload for the test
public class CalendarPayload implements Serializable{ private static final long serialVersionUID = 696756365558432253L; private int int1; private int int2; private Calendar calendar; public CalendarPayload(){ int1 = 1; int2 = 2; calendar = new GregorianCalendar()); } public int getFirst(){return int1;} public int getSecond(){return int2;} public Calendar getCalendar(){return calendar;} }
The service
@Stateless @WebService public class SimpleBean implements Simple { private CalendarPayload payload = new CalendarPayload(); @Override @WebMethod public int getInt() {return 0;} @Override @WebMethod public Integer getInteger() {return new Integer(1);} @Override @WebMethod public Calendar getCalendar() {return new GregorianCalendar();} @Override @WebMethod public CalendarPayload getPayload() {return new CalendarPayload();} @Override public CalendarPayload getStaticPayload() {return payload;} }
-
StatelessCalendarEAR.ear 2.9 KB