package examples.sfsb; import java.rmi.RemoteException; import java.util.Properties; import javax.ejb.CreateException; import javax.ejb.RemoveException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.rmi.PortableRemoteObject; import com.sun.ejte.ccl.reporter.SimpleReporterAdapter; /** * This class illustrates calling a stateful SessionBean and performing * the following exercises: * <ul> * <li> Create a Trader * <li> Buy some shares using the Trader * <li> Sell some shares using the Trader * <li> Remove the Trader * </ul> * */ public class Client { private SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests"); private static final String JNDI_NAME = "MyTraderBean"; private String url; private TraderHome home; private String testId = null; public Client(String url) throws NamingException { this.url = url; // home = lookupHome(); } public Client () throws javax.naming.NamingException{ // home = lookupHome(); } /** * Runs this example from the command line. Example: * <p> * <p> * The parameters are optional, but if any are supplied, * they are interpreted in this order: * <p> */ public static void main(String[] args) { log("\nBeginning statefulSession.Client...\n"); try{ Client client = new Client(); client.run(); }catch(NamingException ne){ } } public void run(){ testId = "stateful-persistence::Sample Standalone-ejb-jar"; stat.addDescription("This is to test the persistence sample deploed as an standalone ejb-jar."); try { home = lookupHome(); } catch (NamingException ne) { stat.addStatus(testId, stat.FAIL); } try { example(); stat.addStatus(testId, stat.PASS); } catch (Exception e) { log("There was an exception while creating and using the Trader."); log("This indicates that there was a problem communicating with the server: "+e); stat.addStatus(testId, stat.FAIL); }finally { stat.printSummary(testId); } log("\nEnd statefulSession.Client...\n"); } /** * Runs the example. */ public void example() throws CreateException, RemoteException,RemoveException,ProcessingErrorException { String customerName = "Matt"; // Create a Trader log("Creating trader\n"); TraderRemote trader = (TraderRemote) narrow(home.create(), TraderRemote.class); // Sell some stock String stockName = "MSFT"; int numberOfShares = 200; log("Selling " + numberOfShares + " of " + stockName); TradeResult tr = trader.sell(customerName, stockName, numberOfShares); log(tr.toString()); // Buy some stock stockName = "BEAS"; numberOfShares = 250; log("Buying " + numberOfShares + " of " + stockName); tr = trader.buy(customerName, stockName, numberOfShares); log(tr.toString()); // Get change in Cash Account from EJBean log("Change in Cash Account: $" + trader.getBalance() + "\n"); log("Removing trader\n"); trader.remove(); } /** * RMI/IIOP clients should use this narrow function */ private Object narrow(Object ref, Class c) { return PortableRemoteObject.narrow(ref, c); } /** * Lookup the EJBs home in the JNDI tree */ private TraderHome lookupHome() throws NamingException { // Lookup the beans home using JNDI Context ctx = null; try { // Initialize the Context with JNDI specific properties ctx = new InitialContext(); Object home = ctx.lookup(JNDI_NAME); return (TraderHome) narrow(home, TraderHome.class); } catch (NamingException ne) { log("The client was unable to lookup the EJBHome. Please make sure "); log("that you have deployed the ejb with the JNDI name "+JNDI_NAME+" on the appserver at "+url); throw ne; } } private static void log(String s) { System.out.println(s); } }