lunedì 16 gennaio 2012

Comportamento oggetti passati come parametro ad Ejb Remoti

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.

Nessun commento:

Posta un commento