📄 stockratehelper.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 + -