Come al solito, dopo aver effettuato il deploy del componente, effettuiamo un test di unità per vederne il funzionamento. Come detto più volte, per questioni di performance è bene sempre prevedere dei session bean come wrapper di entity bean, ma per questi semplici esempi non ci preoccupiamo di questo aspetto.
Listato 1. Crezione dell'ambiente di esecuzione dell'ejb
Properties props=new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
Context ctx=new InitialContext(props);
Come prima cosa, creiamo l'ambiente di esecuzione da cui recuperare le risorse attraverso l'interrogazione della struttura dati JNDI.
Listato 2. Recupero Home remota
UserHome uh=(UserHome) ctx.lookup("User");
//Creazione di alcune entry
try {
uh.create("squake", "Pasquale", "Congiusti", "oldmail@html.it", "3111234567");
uh.create("nonnap", "Nonna", "Papera", "npapera@paperiscali.it", "KLD - 555 - 123");
uh.create("giusgar", "Giuseppe", "Garibaldi", "g.garibaldi@1000.it", "000 - 111");
} catch (LoginException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
Dopo aver recuperato la home remota (che utilizzeremo in tutto l'esempio), creiamo una serie di voci che in seguito interrogheremo.
Listato 3. Creiamo delle voci che interrogheremo in futuro
try {
//Cerco l'utente
User user=uh.findByPrimaryKey("squake");
//e visualizzo le informazioni
System.out.println("Utente #"+user.getLogin()+" - "+user.getNome()+" "+user.getCognome()+", "
+user.getEmail()+", "+user.getTelefono());
//Cambio delle informazioni
user.setEmail("newmail@html.it");
//Mostriamo di nuovo le informazioni
System.out.println("Utente #"+user.getLogin()+" - "+user.getNome()+" "+user.getCognome()+", "
+user.getEmail()+", "+user.getTelefono());
} catch (RemoteException e) {
e.printStackTrace();
} catch (FinderException e) {
System.out.println("Non esiste nessun utente - squake");
}
La prima è un'operazione di ricerca sulla chiave primaria. Sulla base della primary key scelta, recuperiamo l'utente ed effettuiamo operazioni di modifica.
Come ultima operazione, effettuiamo la visualizzazione di tutti i dati presenti nella tabella User.
Listato 4. Mostriamo tutti gli utenti del database
System.out.println("Dump database");
Collection c;
try {
c = uh.findAll();
Iterator i=c.iterator();
while(i.hasNext()){
User user=(User) i.next();
System.out.println("Utente #"+user.getLogin()+" - "+user.getNome()+" "+user.getCognome()+", "
+user.getEmail()+", "+user.getTelefono());
}
} catch (RemoteException e) {
e.printStackTrace();
} catch (FinderException e) {
System.out.println("Nessun utente trovato!");
}
Lato server vediamo che i metodi load e store (sincronizzazione con il database) sono richiamati molto spesso. Le opzioni avanzate degli application server consentono peraltro una gestione più efficiente attraverso il meccanismo di caching dei dati (di cui non discuteremo in questa guida, in quanto operazione dipendente dal server).