Can't a ArrayList be passed as a parameter?
If I pass a ArrayList as a parameter, the changes made to that ArrayList inside the container don't return to the client!
Consider this simple interface:
import java.util.ArrayList;
import javax.ejb.Remote;
@Remote
public interface Echo {
public ArrayList doEcho(ArrayList myList);
}
And the corresponding Session bean:
import java.io.Serializable;
import java.util.ArrayList;
import javax.ejb.Stateful;
@Stateful
public class EchoBean
implements Echo, Serializable
{
public ArrayList doEcho(ArrayList myList)
{
myList.add("ECHO");
return myList;
}
}
And the folowing test:
ArrayList myList = new ArrayList();
InitialContext ctx = new InitialContext();
Echo myEcho = (Echo) ctx.lookup(Echo.class.getName());
Echo myLocalEcho = new EchoBean();
myLocalEcho.doEcho(myList); // After this point we have one item on myList
myEcho.doEcho(myList); // After this point myList should have two items, but still only has one!
myList = myEcho.doEcho(myList); // Ok, now we have two items on the List!
Does this mean that we have a behavior for remote calls diferent from the local call, and we need to return the ArrayList like a function? Am I wrong or is this a bug?
I'm using JBoss 4.0.3SP1 on Windows XP.
Thanks,
Jose
Please ignore this post! I'm so ashamed I posted this question...
Of course this isn't a bug.
Remote calls are pass-by-value, and Local calls are pass-by reference.
Stupid little me!
Well, at least I hope this helps you newbies to EJB out there!