Let's sort thing out for a fair comparison: Did you compare a vanilla EJB call with your list of objects with a vanilla JAX-WS call, or did you compare your custom (and quite extravagant) server-side serialization into a byte array, followed by a stock remote EJB call of the whole byte array, followed by a client-side deserialization of your byte array into objects? Your extra-steps both on the server-side and the client seem overly complex, and for sure they result in additional CPU cycles and memory usage (both on the server- and client-side). RMI over IIOP is a quite an efficient protocol compared to WS-*, although IIOP transfers more information per call (DII - dynamic invocation interface - the client does not need to know the full structure of the parameters/return values to unmarshal the call).
[Message sent by forum member 'scotty69' (scotty69)]
http://forums.java.net/jive/thread.jspa?messageID=255703