    <!-- 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 © 1999 by BEA Systems, Inc. All Rights Reserved.
    </font>

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