TradingClient.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:3k
源码类别:

Java编程

开发平台:

Java

  1. package bible.rmi.example3;
  2. import java.util.*;
  3. import javax.naming.*;
  4. import weblogic.rmi.*;
  5. /**
  6.  * Periodically enters orders to the remote server and remotely
  7.  * receive updates of executions.
  8.  */
  9. public class TradingClient extends TimerTask
  10.   implements Runnable, ExecutionAlert {
  11.   /** orderNumber           */
  12.   private static int orderNumber = 0;
  13.   /**
  14.    * notifyOfExecution
  15.    * @param exec
  16.    */
  17.   public void notifyOfExecution(Execution exec) throws java.rmi.RemoteException {
  18.     System.out.println("An order has been executed!");
  19.     System.out.println("Time: " + new Date());
  20.     System.out.println(exec + "n");
  21.   }
  22.   /**
  23.    * Places a stock order with the remote server.
  24.    */
  25.   public void run() {
  26.     System.out.println("Client now placing an order... ");
  27.     System.out.println(" Time: " + new Date() + "n");
  28.     InitialContext ctx = null;
  29.     try {
  30.       // Get the remote stub for the Price server via JNDI.
  31.       ctx = Environment.getInitialContext();
  32.       PriceServer server =
  33.         (PriceServer) ctx.lookup(PriceServer.PRICESERVERNAME);
  34.       // Get the list of securities managed by the server.
  35.       String securities [] = server.getSecurities();
  36.       // Create a new Order instance
  37.       Order  order = new Order();
  38.       Random rand  = new Random();
  39.       // Increment the order number
  40.       order.setNumber(++orderNumber);
  41.       // Choose one of the available securities at random
  42.       order.setSymbol(securities [rand.nextInt(securities.length)]);
  43.       // Choose a random number of shares
  44.       order.setShares(100 * (rand.nextInt(9) + 1));
  45.       // Enter the order via a remote call to the server.
  46.       // Pass the reference to ourselves so the server can call back.
  47.       server.enterMarketOrder(order, this);
  48.     } catch (Exception e) {
  49.       e.printStackTrace();
  50.     } finally {
  51.       try {
  52.         ctx.close();
  53.       } catch (Exception e) {
  54.         e.printStackTrace();
  55.       }
  56.     }
  57.   }
  58.   /**
  59.    * Instantiates a client and puts it on a repeating timer.
  60.    * @param args
  61.    */
  62.   public static void main(String[] args) {
  63.     try {
  64.       Timer         t      = new Timer();
  65.       TradingClient client = new TradingClient();
  66.       Context       ctx    = Environment.getInitialContext();
  67.       ctx.bind("TradingClient", client);
  68.       System.out
  69.         .println("TradingClient was started and bound in the registry "
  70.                  + "to the name TradingClient");
  71.       t.schedule(client, 5000, 45000);
  72.     } catch (Exception e) {
  73.       e.printStackTrace();
  74.       System.exit(1);
  75.     }
  76.   }
  77. }