Il primo client dello stateful session bean ShoppingCart che vedremo è un client per testare il componente. L'ideale, quando si sviluppa, è avere strumenti che ci consentano di farlo per unità di sviluppo in modo da essere abbastanza fiduciosi nell'integrazione successiva dei diversi componenti.
La prima parte della classe è identica a quanto visto per la classe di test dello stateless session bean. Quindi recuperiamo la virtualizzazione del container attraverso l'oggetto Context e con esso potremo accedere ai diversi servizi offerti tramite le operazioni di lookup.
Listato 1. Recupera la virtualizzazione del container
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);
System.out.println("Recupero il bean chiamato: "+ShoppingCartHome.JNDI_NAME);
ShoppingCartHome sch = (ShoppingCartHome) PortableRemoteObject.narrow(ctx.lookup(ShoppingCartHome.JNDI_NAME), ShoppingCartHome.class);
ShoppingCart cart=sch.create("Carrello Magico 4");
Il nome del componente è cablato nell'interfaccia Home, che utilizziamo per creare uno stateful session bean chiamato "Carrello Magico 4
".
Per poter simulare le operazioni sul carrello abbiamo bisogno di prodotti, per cui utilizziamo la classe Product (ricordiamo di esportare il package nel nuovo progetto client).
Listato 2. La classe virtualizza un prodotto (è un semplice javabean)
package it.html.shop;
import java.io.Serializable;
public class Product implements Serializable{
private String id;
private String title;
private double cost;
public Product(String id, String title, double cost) {
super();
this.id = id;
this.title = title;
this.cost = cost;
}
//Metodi Getter
public double getCost() {
return cost;
}
public String getId() {
return id;
}
public String getTitle() {
return title;
}
}
Listato 3. Creazione prodotti
Product p1=new Product("P01","Lettore MP4",50);
Product p2=new Product("P02","Radio Stereo",20);
Product p3=new Product("P03","Notebook Ultra 2",780);
Product p4=new Product("P04","Apple iPhone",399);
Ora possiamo testare i metodi di business, inserendo le istanze di prodotto e verificando la congruità dei metodi del carrello della spesa.
Listato 4. Aggiunge e visualizza i prodotti nel carrello
// Aggiunta
cart.add(p1);cart.add(p4);cart.add(p3);
//Visualizzazione
Collection coll=cart.getList();
Iterator it=coll.iterator();
System.out.println("CARRELLO "+cart.getCartName());
System.out.println();
while(it.hasNext()){
Product tmp=(Product)it.next();
System.out.println(tmp.getId()+"t"+tmp.getTitle()+"tt"+tmp.getCost());
}
System.out.println("-----------");
System.out.println("ttttTot "+cart.totalAmount());
Utilizzeremo il metodo add()
passando il riferimento ai prodotti creati in precedenza, poi formatteremo la visualizzazione del carrello iterando sulla lista ed infine mostreremo il totale (il metodo totalAmount()
).
Il risultato finale dell'esecuzione (nella parte alta vediamo l'output del server) è riassunto dall'immagine che segue.
Dalla seguente immagine possiamo anche vedere che dopo un certo periodo di tempo, in base alle esigenze del container, il bean creato (insieme ad altri) viene inserito in uno stato passivo.