1) By reference
2) Not sure of what you are asking. If the EJB is remote, the request and response data will always have to be marshalled and transferred across the network. Is that slower than accessing a local EJB? Yes! But there is no other way to access a remote EJB. If possible, cache the EJB proxy you look up from JNDI. By reusing this proxy you will at least save time by not repeatedly making the JNDI call.