package com.ca.chorus.test; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutionException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import org.teiid.client.util.ResultsFuture; import org.teiid.jdbc.RequestOptions; import org.teiid.jdbc.StatementCallback; import org.teiid.jdbc.TeiidDataSource; import org.teiid.jdbc.TeiidStatement; public class AsyncWeb extends HttpServlet { TeiidDataSource teiidDataSource; final String sql = "select * from Accounts.PRODUCT"; @Override public void init(){ teiidDataSource = new TeiidDataSource(); teiidDataSource.setDatabaseName("DynamicPortfolio"); teiidDataSource.setUser("user"); teiidDataSource.setPassword("user"); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Connection conn = null; res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(""); out.println(""); out.println("

Async Test

"); try { conn = teiidDataSource.getConnection(); processAsync(conn, sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != conn) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } out.close(); } private void processAsync(Connection connection, String sql) { Statement statement = null; try { statement = connection.createStatement(); final TeiidStatement ts = statement.unwrap(TeiidStatement.class); final ResultsFuture> result = new ResultsFuture>(); ts.submitExecute(sql, new StatementCallback() { int rowCount = 0; List rowStore = new ArrayList(); public void onRow(Statement s, ResultSet rs) throws SQLException { rowCount++; System.out.println("### " + rowCount); String row = rs.getString(1) + " - " + rs.getString(2) + " - " + rs.getString(3); System.out.println(row); rowStore.add(row); if (rowCount > 49) { s.close(); } } public void onException(Statement s, Exception e) { System.out.println("### EXCEPTION:"); e.printStackTrace(); result.getResultsReceiver().receiveResults(rowStore); try { s.close(); } catch (SQLException e1) { // TODO Auto-generated catch block System.out.println("!!! Execution completed with: " + e1.getMessage()); } } public void onComplete(Statement s) throws Exception { System.out.println("### COMPLETE"); result.getResultsReceiver().receiveResults(rowStore); s.close(); } // }, new RequestOptions()); }, new RequestOptions().continuous(true)); System.out.println("### Processed:" + result.get().size() ); System.out.println("### Values:" + Arrays.toString(result.get().toArray()) ); } catch (SQLException e) { e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static final long serialVersionUID = 1L; }