1package org.ahmadsoft.stream; 2 3import java.io.IOException; 4import java.io.InputStreamReader; 5import java.io.OutputStreamWriter; 6import java.io.PrintWriter; 7import java.sql.Connection; 8import java.sql.DriverManager; 9import java.sql.ResultSet; 10import java.sql.Statement; 11 12import javax.servlet.ServletConfig; 13import javax.servlet.ServletException; 14import javax.servlet.http.HttpServlet; 15import javax.servlet.http.HttpServletRequest; 16import javax.servlet.http.HttpServletResponse; 17 18import org.antlr.stringtemplate.StringTemplate; 19import org.antlr.stringtemplate.StringTemplateGroup; 20import org.antlr.stringtemplate.language.DefaultTemplateLexer; 21 22import sun.misc.BASE64Encoder; 23 24/** 25 * A servlet that implements a streaming architecture. 26 * @author Amin Ahmad 27 */ 28public class StreamingServlet extends HttpServlet { 29 30 private StringTemplateGroup presidentTemplate; 31 32 public void init(ServletConfig config) throws ServletException { 33 InputStreamReader in = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("org/ahmadsoft/stream/template/presidents.stg")); 34 presidentTemplate = new StringTemplateGroup(in, DefaultTemplateLexer.class); 35 } 36 37 public void doGet(HttpServletRequest request, HttpServletResponse response) 38 throws ServletException, IOException { 39 40 long a = System.nanoTime(); 41 42 StringTemplate header = presidentTemplate.getInstanceOf("header"); 43 PrintWriter out = new PrintWriter(new OutputStreamWriter(response 44 .getOutputStream())); 45 long b = System.nanoTime(); 46 out.print(header.toString()); 47 48 long c = -1; 49 try { 50 Class.forName("com.mysql.jdbc.Driver"); 51 Connection connection = DriverManager 52 .getConnection("jdbc:mysql://localhost/mysql?user=root&password=foo&defaultFetchSize=10&useCursorFetch=true"); 53 Statement stmt = connection.createStatement(); 54 stmt.setFetchDirection(ResultSet.FETCH_FORWARD); 55 ResultSet rs = stmt.executeQuery("SELECT * FROM PRESIDENT"); 56 57 BASE64Encoder base64 = new BASE64Encoder(); 58 while (rs.next()) { 59 if (c == -1) 60 c = System.nanoTime(); 61 President p = new President(); 62 p.setName(rs.getString("TX_NAME")); 63 p.setOfficeStart(rs.getDate("DT_OFFICE_ST")); 64 p.setOfficeEnd(rs.getDate("DT_OFFICE_END")); 65 p.setSummary(rs.getString("TX_SUMMARY")); 66 p.setThumbnail(Util.getBytes(rs.getBlob("BL_THUMBNAIL"))); 67 68 StringTemplate line = presidentTemplate.getInstanceOf("line"); 69 line.setAttribute("president", p); 70 line.setAttribute("thumbnail", base64.encode(p.getThumbnail())); 71 out.print(line.toString()); 72 } 73 connection.close(); 74 } catch (Exception e) { 75 e.printStackTrace(out); 76 } 77 78 long d = System.nanoTime(); 79 StringTemplate footer = presidentTemplate.getInstanceOf("footer"); 80 footer.setAttribute("timeByte1", Long.valueOf(b-a)); 81 footer.setAttribute("timeRow1" , Long.valueOf(c-a)); 82 footer.setAttribute("timeClose", Long.valueOf(d-a)); 83 out.print(footer.toString()); 84 out.close(); 85 } 86} 87