package example;
import uk.org.ogsadai.client.toolkit.activity.ActivityRequest;
import uk.org.ogsadai.client.toolkit.activity.sql.SQLQuery;
import uk.org.ogsadai.client.toolkit.ogsi.OGSIServiceFetcher;
import uk.org.ogsadai.client.toolkit.service.DataService;
import uk.org.ogsadai.client.toolkit.service.ServiceFetcher;
/**
* This example shows how to use multiple client DataServices to perform
* concurrent requests.
*/
public class ConcurrentQueries
{
public static void main(String[] args) throws Exception
{
// the handle for the GDSF
String handle = "http://localhost:8080/ogsa/services/ogsadai/" +
"GridDataServiceFactory";
// create the correct servce fetcher
ServiceFetcher fetcher = OGSIServiceFetcher.getInstance();
// create multiple client data services for performing each request
DataService service1 = fetcher.getDataService(handle, null);
DataService service2 = fetcher.getDataService(handle, null);
// create threads for each concurrent request
Thread thread1 = createProcessingThread(
service1,
"select * from littleblackbook where id=43");
Thread thread2 = createProcessingThread(
service1,
"select * from littleblackbook where id=76");
// start request threads
thread1.start();
thread2.start();
// wait for requests to finish
thread1.join();
thread2.join();
// close services
service1.close();
service2.close();
}
/**
* Create and return a Thread to perform an SQL query using
* the specified data service.
*
* @param service
* the data service to perform the query
* @param sql
* the SQL query to perform using the data service
* @return a new Thread object, unstarted
*/
public static Thread createProcessingThread(
final DataService service,
final String sql)
{
Runnable r = new Runnable()
{
public void run()
{
ActivityRequest request = new ActivityRequest();
SQLQuery query = new SQLQuery(sql);
try
{
service.perform(query);
System.out.println("Results from query: ");
System.out.println(query.getOutput().getData());
}
catch (Exception e)
{
System.out.println("Error performing query: " + sql);
e.printStackTrace();
}
}
};
return new Thread(r);
}
}