⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stockratehelper.java

📁 Oracle的J2EE Sample
💻 JAVA
字号:
/*
 * @author : Elangovan
 * @version 1.0
 *
 * Development Environment : Oracle9i JDeveloper
 * Name of the File        : StockRateHelper.java
 * 
 * Creation / Modification History
 *   Elangovan           19-Aug-2003        Created
 *
 */
package oracle.otnsamples.ibfbs.trademanagement.helper;

import java.util.Collection;
import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;

import oracle.toplink.tools.sessionmanagement.SessionManager;
import oracle.toplink.sessions.UnitOfWork;
import oracle.toplink.tools.sessionconfiguration.XMLLoader;
import oracle.toplink.threetier.ServerSession;
import oracle.toplink.threetier.ClientSession;
import oracle.toplink.expressions.ExpressionBuilder;
import oracle.toplink.queryframework.ReadObjectQuery;
import oracle.toplink.queryframework.ReportQuery;
import oracle.toplink.exceptions.DatabaseException;

import oracle.otnsamples.ibfbs.toplink.Stockrate;

import oracle.otnsamples.ibfbs.trademanagement.exception.TradeManagementEventException;

/**
 * This class encapsulates all calls to stock rates. It loads and fetches stock 
 * rates to/from datasource using Toplink persistence framkework.
 * 
 * @see oracle.otnsamples.ibfbs.toplink.Stockrate.java
 */
public class StockRateHelper {

  // Toplink Server session
  private ServerSession server = null;

  /**
   * Creates a new instance of StockRateHelper.
   * 
   * @exception TradeManagementEventException if initializing Toplink server session fails
   */
  public StockRateHelper() 
    throws TradeManagementEventException{
    try {
      // Initialize ServerSession from session.xml 
      server = (ServerSession) SessionManager.getManager().getSession(new XMLLoader(),
                                "FBSServerSession",
                                Thread.currentThread().getContextClassLoader());
    }catch(DatabaseException dbEx) {
      throw new TradeManagementEventException(" Error initializing Server Session :"+dbEx);
    }
    
  }

  /**
   * Method to get the Stock Rates for the specified symbol.
   * @param symbol Stock Symbol of the Company in which user is interested.
   * @return Stockrate instance
   * @exception TradeManagementEventException if retrieving latest rates fails
   * 
   */
  public Stockrate getLatestRate(String symbol)
      throws TradeManagementEventException {

    Stockrate rate = null;
    try {
      
      // Initialize client session
      ClientSession client = server.acquireClientSession();
      
      // Initialize read query to read single Stockrate
      ReadObjectQuery readRate = new ReadObjectQuery(Stockrate.class);      
      ExpressionBuilder rateBuilder = new ExpressionBuilder();
      ExpressionBuilder symbolBuilder = new ExpressionBuilder();
      
      // Initialize read query to read max of stockdate
      ReportQuery subQuery = new ReportQuery(Stockrate.class, symbolBuilder);
  
      // SELECT MAX(StockDate) FROM StockRate WHERE Symbol = ?
      subQuery.addMaximum("stockdate");      
      subQuery.setSelectionCriteria(symbolBuilder.get("symbol").equalsIgnoreCase(symbol));      
      
      // SELECT * FROM StockRate WHERE StockDate = ? AND Symbol = ?
      readRate.setSelectionCriteria(rateBuilder.get("stockdate").equal(subQuery)
                              .and(rateBuilder.get("symbol").equalsIgnoreCase(symbol)));
      
      rate = (Stockrate) client.executeQuery(readRate);

    } catch (DatabaseException ex) {     
      throw new TradeManagementEventException(" Error while getting "
                                     + " Stock Rate:\n" + ex.toString());
    } 

    return rate;        
  }

  /**
   * Returns the stock rate for the symbol specified in the request.
   * 
   * @param req HttpServletRequest instance that has a SYMBOL parameter
   * @return  Stock rate for the symbol
   * @exception TradeManagementEventException if fetching stock rate fails
   */
  public Stockrate getQuote(HttpServletRequest req) 
    throws TradeManagementEventException {
    
    String symbol = req.getParameter("SYMBOL");
    
    if( symbol == null ) return null;
    
    return this.getLatestRate(symbol.trim().toUpperCase());
  }

  /**
   * Retrieves the stock rates for the specified array of symbols.
   * 
   * @param symbols Array of symbols 
   * @return  Stock rates corresponding to the specified symbols
   * @exception TradeManagementEventException if fetching rates fail
   */
  public Collection getLatestRate(String[] symbols)
      throws TradeManagementEventException {

    ClientSession client = null;
    
    ArrayList rateList = new ArrayList(symbols.length);
    
    try {
      // Initialize client session  
      client = server.acquireClientSession();
      
      ExpressionBuilder rateBuilder = new ExpressionBuilder();
      ExpressionBuilder symbolBuilder = new ExpressionBuilder();
      
      ReadObjectQuery readRate = new ReadObjectQuery(Stockrate.class);
            
      ReportQuery subQuery = new ReportQuery(Stockrate.class, symbolBuilder);      
      subQuery.addMaximum("stockdate");
      
      for(int i=0;i<symbols.length;i++) {
      
        // SELECT MAX(StockDate) FROM StockRate WHERE Symbol = ?
        subQuery.setSelectionCriteria(symbolBuilder.get("symbol").equalsIgnoreCase(symbols[i]));
        
        // SELECT * FROM StockRate WHERE StockDate = ? AND Symbol = ?                
        readRate.setSelectionCriteria( rateBuilder.get("stockdate").equal(subQuery).and(
                                  rateBuilder.get("symbol").equalsIgnoreCase(symbols[i])));
                                  
        rateList.add(client.executeQuery(readRate));
                         
      }
    } catch (DatabaseException ex) {     
      throw new TradeManagementEventException(" Error while getting "
                                     + " Stock Rate:\n" + ex.toString());
    } 
    return rateList;    
  }

  /**
   * Method to populate StockRates into datasource.
   * 
   * @param stockRates Collection of stockrates to be populated
   * @exception DatabaseException if loading rates fails
   * 
   */
  public void loadRates(Collection stockRates)  
    throws DatabaseException {
    
    // Initialize  client session
    ClientSession client = server.acquireClientSession();
    
    // Enable batch-writing [ Write Optimization ]
    client.getLogin().useBatchWriting();
    
    // Sequence pre-allocation has been enabled in project.xml with size of 50
    
    // Get a transaction
    UnitOfWork uow = client.acquireUnitOfWork();
    
    // Register the objects with transaction
    uow.registerAllObjects(stockRates);
    
    // Commit
    uow.commit();  

  }
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -