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

Java编程

开发平台:

Java

  1. package bible.rmi.example4;
  2. import java.util.*;
  3. import javax.naming.*;
  4. import weblogic.rmi.*;
  5. // Implement the PriceServer remote interface.
  6. /**
  7.  * Class PriceServerImpl
  8.  *
  9.  *
  10.  * @author
  11.  * @version %I%, %G%
  12.  */
  13. public class PriceServerImpl implements PriceServer {
  14.   // Stock price database, implemented as a Hashtable.
  15.   /** stockTable           */
  16.   private Hashtable stockTable = null;
  17.   // Default constructor - create a stock price database.
  18.   /**
  19.    * Constructor PriceServerImpl
  20.    *
  21.    *
  22.    */
  23.   public PriceServerImpl() {
  24.     stockTable = new Hashtable();
  25.     Float f = new Float(0);
  26.     stockTable.put("SUNW", f.valueOf("20"));
  27.     stockTable.put("INTC", f.valueOf("30"));
  28.     stockTable.put("BEAS", f.valueOf("40"));
  29.   }
  30.   // Return the price of the given security.
  31.   /**
  32.    * Method getPrice
  33.    *
  34.    *
  35.    * @param symbol
  36.    *
  37.    * @return
  38.    *
  39.    */
  40.   public float getPrice(String symbol) throws java.rmi.RemoteException {
  41.     Float f = (Float) stockTable.get(symbol);
  42.     System.out.println("PriceServer: Call to getPrice for symbol : "
  43.                        + symbol);
  44.     return f.floatValue();
  45.   }
  46.   // Set the price of the given security.
  47.   /**
  48.    * Method setPrice
  49.    *
  50.    *
  51.    * @param symbol
  52.    * @param price
  53.    *
  54.    */
  55.   public void setPrice(String symbol, float price) throws java.rmi.RemoteException{
  56.     Float f = new Float(price);
  57.     stockTable.put(symbol, f);
  58.     System.out.println("PriceServer: Call to  setPrice for " + symbol
  59.                        + " to " + price);
  60.   }
  61.   // Return all ticker symbols in this server's database.
  62.   /**
  63.    * Method getSecurities
  64.    *
  65.    *
  66.    * @return
  67.    *
  68.    */
  69.   public String[] getSecurities() throws java.rmi.RemoteException {
  70.     if (stockTable.size() > 0) {
  71.       String[]    securities = new String [stockTable.size()];
  72.       Enumeration enum       = stockTable.keys();
  73.       int         i          = 0;
  74.       while (enum.hasMoreElements()) {
  75.         securities [i] = (String) enum.nextElement();
  76.         i++;
  77.       }
  78.       return securities;
  79.     }
  80.     return null;
  81.   }
  82.   // Submit an order on a client's behalf, then notify the submitting
  83.   // client when the order is executed.
  84.   /**
  85.    * Method enterMarketOrder
  86.    *
  87.    *
  88.    * @param order
  89.    * @param client
  90.    *
  91.    */
  92.   public void enterMarketOrder(Order order, ExecutionAlert client) throws java.rmi.RemoteException{
  93.     // The ExecuteTrade bean will return immediately and call back
  94.     // the client when the trade has been executed.
  95.     try {
  96.       // Create a context with which to lookup the bean
  97.       Hashtable ht = new Hashtable();
  98.       ht.put(Context.INITIAL_CONTEXT_FACTORY, Environment.JNDI_FACTORY);
  99.       ht.put(Context.PROVIDER_URL, Environment.WEBLOGIC_URL);
  100.       Context ctx2 = new InitialContext(ht);
  101.       // Get a reference to the bean object
  102.       Object objref = ctx2.lookup("ExecuteTrade");
  103.       // Get a reference to the bean's home interface
  104.       ExecuteTradeHome home =
  105.         (ExecuteTradeHome) javax.rmi.PortableRemoteObject.narrow(objref,
  106.           ExecuteTradeHome.class);
  107.       // Get a reference to the bean's remote interface
  108.       ExecuteTradeRemote executionBean = home.create();
  109.       // Invoke the bean's remote method to execute the trade
  110.       executionBean.executeTrade(order, client);
  111.     } catch (Exception e) {
  112.       e.printStackTrace();
  113.     }
  114.   }
  115.   /**
  116.    * Method main
  117.    *
  118.    *
  119.    * @param args
  120.    *
  121.    */
  122.   public static void main(String[] args) {
  123.     try {
  124.       PriceServerImpl server = new PriceServerImpl();
  125.       Context         ctx    = new InitialContext();
  126.       ctx.bind(PRICESERVERNAME, server);
  127.       System.out.println("PriceServer was started and bound in the registry "
  128.                          + "to the name " + PRICESERVERNAME);
  129.     } catch (Exception e) {
  130.       e.printStackTrace();
  131.       System.exit(1);
  132.     }
  133.   }
  134. }