Java è un linguaggio dove gli oggetti sono passati byReference.
Negli Ejb Remoti tuttavia quando passiamo un oggetto al server è passato soltanto lo stato, non l'oggetto stesso, quindi questa regola del pass by reference non vale.
Esempio:
Interfaccia Remota
@Remote
public interface RemoteInt {
public void manipulate(Data d);
}
Implementazione
import javax.ejb.Stateless;
@Stateless
public class RemoteImpl implements RemoteInt {
@Override
public void manipulate(Data d) {
d.setAmount(100);
}
}
Ora richiamandolo in questo modo da un client Java :
Properties p=new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
p.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
Context context = new InitialContext(p);
RemoteInt sr=(RemoteInt)context.lookup("RemoteImpl/remote");
Data d=new Data();
d.setAmount(10);
sr.manipulate(d);
System.out.println(d.getAmount());
Otterremo il risultato di avere in output dalla System.out il valore 10 e non , come sarebbe stato nel caso di un qualsiasi metodo Java normalmente chiamato, 100.
Negli Ejb Remoti tuttavia quando passiamo un oggetto al server è passato soltanto lo stato, non l'oggetto stesso, quindi questa regola del pass by reference non vale.
Esempio:
Interfaccia Remota
@Remote
public interface RemoteInt {
public void manipulate(Data d);
}
Implementazione
import javax.ejb.Stateless;
@Stateless
public class RemoteImpl implements RemoteInt {
@Override
public void manipulate(Data d) {
d.setAmount(100);
}
}
Ora richiamandolo in questo modo da un client Java :
Properties p=new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
p.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
Context context = new InitialContext(p);
RemoteInt sr=(RemoteInt)context.lookup("RemoteImpl/remote");
Data d=new Data();
d.setAmount(10);
sr.manipulate(d);
System.out.println(d.getAmount());
Otterremo il risultato di avere in output dalla System.out il valore 10 e non , come sarebbe stato nel caso di un qualsiasi metodo Java normalmente chiamato, 100.
Nessun commento:
Posta un commento