Created
July 15, 2012 18:55
-
-
Save mgodave/3118159 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.google.common.util.concurrent.*; | |
import org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS; | |
import org.apache.commons.dbcp.datasources.SharedPoolDataSource; | |
import org.apache.commons.dbutils.AsyncQueryRunner; | |
import org.apache.commons.dbutils.ResultSetHandler; | |
import javax.sql.DataSource; | |
import java.sql.ResultSet; | |
import java.sql.SQLException; | |
import java.util.concurrent.ThreadPoolExecutor; | |
import static com.google.common.base.Throwables.propagate; | |
import static com.google.common.util.concurrent.Futures.addCallback; | |
import static com.google.common.util.concurrent.MoreExecutors.getExitingExecutorService; | |
import static com.google.common.util.concurrent.MoreExecutors.listeningDecorator; | |
import static java.util.concurrent.Executors.newCachedThreadPool; | |
public class AsyncDB { | |
public static void main(String[] args) { | |
try { | |
final DriverAdapterCPDS adapter = new DriverAdapterCPDS(); | |
adapter.setDriver("org.hsqldb.jdbc.JDBCDriver"); | |
adapter.setUrl("jdbc:hsqldb:mem:mymemdb"); | |
adapter.setUser("SA"); | |
adapter.setPassword(null); | |
final SharedPoolDataSource datasource = new SharedPoolDataSource(); | |
datasource.setConnectionPoolDataSource(adapter); | |
datasource.setMaxActive(10); | |
datasource.setMaxWait(50); | |
datasource.getConnection().createStatement().execute("create table users(name varchar(256))"); | |
final ListeningExecutorService executor = | |
listeningDecorator( | |
getExitingExecutorService( | |
(ThreadPoolExecutor) newCachedThreadPool())); | |
final AsyncQueryRunner runner = new AsyncQueryRunner(datasource, executor); | |
final ListenableFuture<Integer> future = | |
(ListenableFuture<Integer>) runner.query( | |
"select count(*) from users", | |
new ResultSetHandler<Integer>() { | |
@Override | |
public Integer handle(ResultSet resultSet) throws SQLException { | |
while (resultSet.next()) { | |
return resultSet.getInt(1); | |
} | |
return 0; | |
} | |
}); | |
addCallback(future, new FutureCallback<Integer>() { | |
@Override | |
public void onSuccess(Integer userCount) { | |
System.out.println("There are " + userCount + " users"); | |
} | |
@Override | |
public void onFailure(Throwable throwable) { | |
propagate(throwable); | |
} | |
}); | |
} catch (Throwable e) { | |
propagate(e); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment