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;
}