package org.ahmadsoft.stream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.antlr.stringtemplate.StringTemplate; import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.language.DefaultTemplateLexer; import sun.misc.BASE64Encoder; /** * A servlet that implements a streaming architecture. * @author Amin Ahmad */ public class StreamingServlet extends HttpServlet { private StringTemplateGroup presidentTemplate; public void init(ServletConfig config) throws ServletException { InputStreamReader in = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("org/ahmadsoft/stream/template/presidents.stg")); presidentTemplate = new StringTemplateGroup(in, DefaultTemplateLexer.class); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { long a = System.nanoTime(); StringTemplate header = presidentTemplate.getInstanceOf("header"); PrintWriter out = new PrintWriter(new OutputStreamWriter(response .getOutputStream())); long b = System.nanoTime(); out.print(header.toString()); long c = -1; try { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager .getConnection("jdbc:mysql://localhost/mysql?user=root&password=foo&defaultFetchSize=10&useCursorFetch=true"); Statement stmt = connection.createStatement(); stmt.setFetchDirection(ResultSet.FETCH_FORWARD); ResultSet rs = stmt.executeQuery("SELECT * FROM PRESIDENT"); BASE64Encoder base64 = new BASE64Encoder(); while (rs.next()) { if (c == -1) c = System.nanoTime(); President p = new President(); p.setName(rs.getString("TX_NAME")); p.setOfficeStart(rs.getDate("DT_OFFICE_ST")); p.setOfficeEnd(rs.getDate("DT_OFFICE_END")); p.setSummary(rs.getString("TX_SUMMARY")); p.setThumbnail(Util.getBytes(rs.getBlob("BL_THUMBNAIL"))); StringTemplate line = presidentTemplate.getInstanceOf("line"); line.setAttribute("president", p); line.setAttribute("thumbnail", base64.encode(p.getThumbnail())); out.print(line.toString()); } connection.close(); } catch (Exception e) { e.printStackTrace(out); } long d = System.nanoTime(); StringTemplate footer = presidentTemplate.getInstanceOf("footer"); footer.setAttribute("timeByte1", Long.valueOf(b-a)); footer.setAttribute("timeRow1" , Long.valueOf(c-a)); footer.setAttribute("timeClose", Long.valueOf(d-a)); out.print(footer.toString()); out.close(); } }