<!-- Copyright (c) 1999 by BEA Systems, Inc. All Rights Reserved.-->

<!-- Here we use a Java string ("PAGETITLE") to set
     the same phrase as the title and as a head.-->
<html>
<head>
<title>
<%= pagetitle %>
</title>
</head>

<body bgcolor=#FFFFFF>

<font face="Helvetica">

<h2>
<font color=#DB1260>
<%= pagetitle %>
</font>
</h2>

<!-- Using the "import" feature.  We need the javax.naming.* for
     the Context used to lookup the Trader home interface.
     The samples.j2ee.ejb.basic.statelessSession.* is for the
     Trader related classes and stubs and skeletons.

     See the documentation for the WLE Stateless Session Bean Sample
     to understand the usage of the Trader related classes and
     stubs and skeletons. -->

<%@ page import="
    javax.naming.*,
    samples.j2ee.ejb.basic.statelessSession.*
"%>


<!-- Declarations section for variables and methods of class scope.
     Class scope objects are shared between multiple threads executing
     in the same instance of the servlet that is compiled from the JSP.

     Declarations are used to declare scripting language constructs that
     are available to all other scripting elements.  Declarations are
     initialized when the JSP page is initialized and are made available
     to other declarations, scriptlets, and expressions. -->

<%!
  static final String pagetitle = "WLEC JSP Stateless Session Bean Sample";
  static final String customerName  = "Erin";    // Default name for the customer
  static final int maxTransaction = 5;           // no. transactions to do


  // The getInitialContext() method returns an InitialContext, which the page will
  //   use to look up the Trader home interface.

  public Context getInitialContext() throws Exception {

    Hashtable env = new Hashtable();

    // Specify the name of the connection pool.
    env.put(Context.PROVIDER_URL, "wlepool://StatelessSessionPool");

    // Name of the factory to access WLE domain and global naming service.
    env.put(Context.INITIAL_CONTEXT_FACTORY,
             "com.beasys.jndi.WLEInitialContextFactory");

    return new InitialContext(env);
  }

  String getStackTraceAsString(Exception e)
  {
    // Dump the stack trace to a buffered stream, then send it's contents
    // to the JSPWriter.
    ByteArrayOutputStream ostr = new ByteArrayOutputStream();
    e.printStackTrace(new PrintWriter(ostr));
    return(ostr.toString());
  }
%>

<!-- Note that the following Java code will be inserted into the body
     of the servlet -->

<%
  Context   ctx           = null;     // To hold JNDI context
  Object    objref        = null;     // to hold object reference

  String    stockName       = null;   // Name of a stock
  int       numberOfShares  = 0;      // No. of shares to trade
  double    cashBalance     = 0.0;    // To hold balance between sessions

  TraderHome  brokerage   = null;     // To hold home interface
  Trader      trader      = null;     // To hold trader object
  TradeResult tradeResult = null;     // To hold results from a trade
%>


<p><b>Getting Initial Context</b>

<%
  try {
      // Create a new initial context based on the url, user, and password
      ctx = getInitialContext();

      if ( ctx == null ){
	    out.print("<p>Initial context is null!");
      }
%>


<p><b>Looking Up Home and Creating Trader</b>


<%
      // do a JNDI lookup for the EJB;defined in the deployment descriptor
      objref = ctx.lookup("statelessSession.TraderHome");


      /* Create a trader object, who'll later help us execute trades
       * The lookup has resulted in an Object.  We know
       * this object is actually a reference of type TraderHome,
       * so the reference is cast to that type:
       */
      brokerage = (TraderHome) objref;

      // Create the EJB on the WLE server.
      trader = brokerage.create();
%>


<p><b>Buy and Sell with TraderBean</b>

<ul>


<%
      /* Unlike the statefulSession example,
       * we have to keep track of the balance over the
       * life of our use of the session bean
       */

      for (int i = 1 ; i <= maxTransaction; i++) {
        out.print("<p><li>Start of Transaction " + i + " for " +
                            customerName);

        /* Buying
         * Stock symbol must be found in the deployment descriptor's environment
         * properties section. TraderBean EJB will check the validity of the
         * symbol, and its price using JNDI lookup on the environment
         * properties.
         */

        stockName      = "BEAS";
        numberOfShares = 100 * i;
        out.print("<br>Buying " + numberOfShares + " of " + stockName);

        // buy() is executed on the TraderBean EJB in the WLE Server
        tradeResult = trader.buy(customerName, stockName, numberOfShares);
        out.print("...Bought " + tradeResult.numberTraded + " at $" +
                           tradeResult.priceSoldAt);

        // Keep track of the change in the Cash Account
        cashBalance = cashBalance - (tradeResult.numberTraded *
                                      tradeResult.priceSoldAt);

        // Selling
        stockName      = "INTL";
        numberOfShares = 100 * (i+1);
        out.print("<br>Selling " + numberOfShares + " of " + stockName);

        // sell() is executed on the TraderBean EJB in the WLE Server
        tradeResult = trader.sell(customerName, stockName, numberOfShares);
        out.print("...Sold " + tradeResult.numberTraded + " at $" +
                           tradeResult.priceSoldAt);

        // Keep track of the change in the Cash Account
        cashBalance = cashBalance + (tradeResult.numberTraded *
                                      tradeResult.priceSoldAt);

        // Print change in Cash Account
        out.print("<br>Change in Cash Account: $" + cashBalance);
        out.print("<br>End of Transaction " + i + "\n");
      }
%>


</ul>

<p><b>Removing Trader</b>


<%
      // Remove TraderBean EJB from the WLE server.
      trader.remove();
  }
  catch (ProcessingErrorException pe) {
      out.print("<p>Processing Error: " + pe);
      out.print("<p>" + getStackTraceAsString(pe));
  }
  catch (Exception e) {
      out.print("<p>:::::::::::::: Error :::::::::::::::::");
      out.print("<p> Stack Trace:" + getStackTraceAsString(e));
  }
%>


<p><b>Trader Removed and Sample Complete!</b>

<p>
<font size=-1>
Copyright &copy; 1999 by BEA Systems, Inc. All Rights Reserved.
</font>

</font>
</body>
</html>
