CommonAction.java
package org; import javax.servlet.ServletConfig; import javax.servlet.http.*; import javax.sql.DataSource; import org.apache.log4j.Logger; import org.apache.struts.action.*; public abstract class CommonAction extends Action { protected final Logger log = Logger.getLogger(getClass()); public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws DAOException, Exception { HttpSession session = request.getSession(); if (session.getAttribute("quotefactory") == null) { // No factory factory created yet ServletConfig conf = servlet.getServletConfig(); String managerName = conf.getInitParameter("quotefactory"); log.debug("managerName " + managerName); DbStockQuoteManagerFactoryIF factory= null; if (managerName.equals("Database")) { DataSource dataSource = getDataSource(request); factory = new DbStockQuoteManagerFactory(); log.debug("after factory creation " ); }else throw new DAOException("factory " + managerName + " is not known"); session.setAttribute("managerName", managerName); session.setAttribute("quotefactory", factory); } log.debug("before commonExecute " ); return commonExecute(mapping, form, request, response); } public abstract ActionForward commonExecute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception; }LookupAction.java
package org; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletContext; import javax.servlet.http.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.*; import org.apache.struts.action.Action; import org.apache.struts.validator.Resources; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.log4j.Logger; import javax.sql.DataSource; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; public final class LookupAction extends CommonAction { protected final Logger log = Logger.getLogger(getClass()); public ActionForward commonExecute (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { log.debug("In LookupAction start "); Double price = null; String symbol = null; Stock stockDetails = new Stock(); HttpSession session = request.getSession(); DbStockQuoteManagerFactoryIF factory = (DbStockQuoteManagerFactoryIF) session .getAttribute("quotefactory"); log.debug("In LookupAction after factory call"); StockQuoteManagerIF manager = factory.createStockQuoteManager(); LookupForm lf = (LookupForm) form; symbol = lf.getSymbol(); log.debug("In LookupAction symbol " + symbol); try { stockDetails = manager.getStockQuote(symbol); log.debug("In LookupAction price " + stockDetails.getPrice()); request.setAttribute ("PRICE", stockDetails.getPrice()); } catch (DAOException e) { // Message for the user: ActionMessages messages = new ActionMessages(); messages.add("message1", new ActionMessage( "error.stock.listfailed")); saveMessages(request, messages); // Logging the error: String message = "stock could not be listed"; // Save the chained exceptions: request.setAttribute("MYEXCEPTION", new DAOException(message, e)); // Return to the error page return (mapping.findForward("error")); } return mapping.findForward("quote"); } //execute }StockNameAction.java
package org; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import javax.sql.DataSource; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; import java.io.*; import org.apache.log4j.Logger; public class StockNameAction extends Action { protected final Logger log = Logger.getLogger(getClass()); protected String getStockName ( HttpServletRequest request, String symbol) { String stockName = null; Connection conn = null; Statement stmt = null; ResultSet rs = null; DataSource dataSource = null; try { dataSource = getDataSource(request); conn = dataSource.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery ("select stock_name from stocks where symbol = '" + symbol + "'"); if (rs.next()){ String tmp = ""; tmp = rs.getString("stock_name"); stockName = new String(tmp); System.err.println ("stockName : " + stockName); } //end rs.next else { System.err.println("Symbol not found returning null [" + symbol); } } //end try catch (SQLException sqle) { System.err.println (sqle.getMessage()); } finally { if (rs != null) { try { rs.close(); } catch (SQLException sqle) { System.err.println (sqle.getMessage()); } rs = null; } if (stmt != null) { try { stmt.close(); } //end try catch (SQLException sqle) { System.err.println (sqle.getMessage()); } stmt = null; } // end stmt not null if (conn != null) { try { conn.close(); } //end try catch (SQLException sqle) { System.err.println (sqle.getMessage()); } conn = null; } // end conn not null } //end finally if ( symbol.equalsIgnoreCase ("SUNWWWW") ) { return new String ("SUNWWWW"); } return stockName; } //end Action public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { String stockName = null; String target = new String ("success"); if (form != null ) { //Use the LookupForm to get the request parameters LookupForm lookupForm = (LookupForm) form; String symbol = lookupForm.getSymbol(); // request.getParameter(symbol); // System.err.println("In execute Symbol " + symbol); log.debug("StockNameAction " + symbol); stockName = getStockName(request, symbol); StringBuilder html = new StringBuilder(); html.append("<span id=\"stockName\">") .append("<input type=\"text\" name=\"stock_name\" id=\"sname\" value=\"") .append(stockName) .append("\" readonly>") .append("</span>"); System.out.println("Generated HTML: " + html.toString()); // Write directly to response response.setContentType("text/html;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter out = response.getWriter(); out.print(html.toString()); out.flush(); out.close(); System.out.println("=== getStockName END ==="); } return null; // Important: return null when writing directly to response } //execute }
DAOException.java
package org; public class DAOException extends Exception { public DAOException() { super(); } public DAOException(String arg0) { super(arg0); } public DAOException(Throwable arg0) { super(arg0); } public DAOException(String arg0, Throwable arg1) { super(arg0, arg1); } }
LookupForm.java
package org; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class LookupForm extends ActionForm { private String symbol = null; public String getSymbol(){ return (symbol); } public void setSymbol (String symbol) { this.symbol = symbol; } public void reset (ActionMapping mapping, HttpServletRequest request) { this.symbol = null; } }Stock.java
package org; import java.io.Serializable; /* * This a bean - and also a Value - or Data Transfer Object */ public class Stock implements Serializable { private String code; Double price = null; private String stockName; public Stock() { } public Stock(String code) { setCode(code); } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getStockName() { return stockName; } public void setStockName(String stockName) { this.stockName = stockName; } }StockQuoteManagerFactoryIF.java
package org; public interface StockQuoteManagerFactoryIF { public StockQuoteManagerIF createStockQuoteManager(); }DbStockQuoteManagerFactoryIF.java
package org; import javax.sql.DataSource; /* * This is a factory for a DVDManager DAO using a database */ public interface DbStockQuoteManagerFactoryIF extends StockQuoteManagerFactoryIF { public DataSource getDataSource(); }StockQuoteManagerIF.java
package org; import java.util.Collection; /* * This is a Data Access Object (DAO) */ public interface StockQuoteManagerIF { public void createStockQuote(String id, String title) throws DAOException; public void updateStockQuote(String id, String title) throws DAOException; public void deleteStockQuote(String id) throws DAOException; public Stock getStockQuote(String code) throws DAOException; // public Collection getAll() throws DAOException; // public Collection findStockCodeTitle(String title) throws DAOException; }DbStockQuoteManagerFactory.java
package org; import java.io.PrintWriter; import java.sql.*; import javax.sql.DataSource; /* * This is a factory for the StockQuoteManager DAO. It uses plain Db calls */ public class DbStockQuoteManagerFactory implements DbStockQuoteManagerFactoryIF { private DataSource dataSource; public DbStockQuoteManagerFactory() throws DAOException { // Load the MySQL server Db driver String driverName = "org.gjt.mm.mysql.Driver"; try { Class.forName(driverName); } catch (ClassNotFoundException e) { throw new DAOException("Db Driver " + driverName + " could not be loaded"); } dataSource = new MyDataSource(); } public DataSource getDataSource() { return dataSource; } public StockQuoteManagerIF createStockQuoteManager() { DatabaseStockQuoteManager manager = new DatabaseStockQuoteManager(); manager.setDataSource(dataSource); return manager; } private class MyDataSource implements DataSource { public int getLoginTimeout() throws SQLException { return 0; } public void setLoginTimeout(int arg0) throws SQLException { } public PrintWriter getLogWriter() throws SQLException { return null; } public void setLogWriter(PrintWriter arg0) throws SQLException { } public Connection getConnection() throws SQLException { // Create a connection to the database Connection conn = null; String serverName = "localhost"; String mydatabase = "stocks"; // String url = "Db:mysql://" + serverName + "/" + mydatabase; String url = "jdbc:mysql://localhost:3306/stocks?autoReconnect=true"; String username = "root"; String password = "mysql"; // conn = DriverManager.getConnection(url, username, password); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stocks", "root","mysql"); return conn; } public Connection getConnection(String arg0, String arg1) throws SQLException { return null; } public boolean isWrapperFor(Class<?> iface) throws SQLException { return false; } public <T> T unwrap(Class<T> iface) throws SQLException { return null; } } }DatabaseStockQuoteManager.java
package org; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import java.util.Dictionary; import javax.sql.DataSource; import org.apache.log4j.Logger; public class DatabaseStockQuoteManager implements StockQuoteManagerIF { private DataSource dataSource; protected final Logger log = Logger.getLogger(getClass()); private static Logger logger = Logger.getLogger(DatabaseStockQuoteManager.class.getName()); // Contains en Exception when an error has occured private Exception error; // Contains an error message private String message; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void createStockQuote(String id, String title) throws DAOException { Connection conn = null; PreparedStatement pstmt = null; } public Stock getStockQuote(String sCode) throws DAOException { Connection conn = null; PreparedStatement pstmt = null; ResultSet result = null; error = null; Stock stockQuote = null; log.debug("DatabaseStockQuoteManager start"); try { conn = dataSource.getConnection(); if (conn != null && !conn.isClosed()){ System.out.println("Connection Successful!"); } else { System.out.println("Connection is null or closed!"); } log.debug("DatabaseStockQuoteManager.getStockQuote, code = " + sCode); String sql = "SELECT stock_name, price FROM stocks WHERE symbol=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, sCode); result = pstmt.executeQuery(); if (result.next()) { log.debug("In getStockQuote " + result.getDouble("price")); stockQuote = new Stock(); stockQuote.setPrice(result.getDouble("price")); } else { log.debug("No stock found for symbol " + sCode); } } catch (SQLException e) { error = e; message = "Read failed"; log.debug("In SQLException" + e.getMessage()); e.printStackTrace(); } closeResult(result); closePrep(pstmt); closeConnection(conn); checkOK(); return stockQuote; } public void updateStockQuote(String id, String title) throws DAOException { if (getStockQuote(id) == null) throw new DAOException("Id " + id + " was not found"); Connection conn = null; PreparedStatement pstmt = null; error = null; } public void deleteStockQuote(String id) throws DAOException { if (getStockQuote(id) == null) throw new DAOException("Id " + id + " was not found"); Connection conn = null; PreparedStatement pstmt = null; error = null; } private void checkOK() throws DAOException { if (error != null) { throw new DAOException(message, error); } } private void closeConnection(Connection connection) { if (connection != null) { try { connection.close(); } catch (SQLException e) { if (error == null) { error = e; message = "Close conn failed"; } } } } private void closePrep(PreparedStatement prep) { if (prep != null) { try { prep.close(); } catch (SQLException e) { if (error == null) { error = e; message = "Close prep failed"; } } } } private void closeProc(CallableStatement proc) { if (proc != null) { try { proc.close(); } catch (SQLException e) { if (error == null) { error = e; message = "Close proc failed"; } } } } private void closeResult(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { if (error == null) { error = e; message = "Close result failed"; } } } } }
No comments:
Post a Comment