The best way to demonstrate this is by showing what the client code looks like from GemFire accessing a region versus what it would using SQLFire table with a JDBC compliant driver. In the two code samples below there using a Dept object and Dept row with the same attributes/columns,
GemFire Code
package pas.au.vmware.se.dept;
import java.util.Collection;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.client.ClientCache;
import com.gemstone.gemfire.cache.client.ClientCacheFactory;
import com.gemstone.gemfire.cache.query.FunctionDomainException;
import com.gemstone.gemfire.cache.query.NameResolutionException;
import com.gemstone.gemfire.cache.query.Query;
import com.gemstone.gemfire.cache.query.QueryInvocationTargetException;
import com.gemstone.gemfire.cache.query.QueryService;
import com.gemstone.gemfire.cache.query.SelectResults;
import com.gemstone.gemfire.cache.query.TypeMismatchException;
public class ViewDeps
{
private ClientCache cache = null;
private Logger logger = Logger.getLogger(this.getClass().getSimpleName());
public ViewDeps()
{
ClientCacheFactory ccf = new ClientCacheFactory();
ccf.set("cache-xml-file", "config/client.xml");
cache = ccf.create();
}
public void run() throws Exception
{
QueryService queryService = cache.getQueryService();
Query query = queryService.newQuery("SELECT * FROM /dept");
logger.log (Level.INFO, "\nExecuting query:\n\t" + query.getQueryString());
Object result = query.execute();
Collection<?> collection = ((SelectResults<?>)result).asList();
Iterator<?> iter = collection.iterator();
while (iter.hasNext())
{
Dept dept = (Dept) iter.next();
System.out.println(dept);
}
cache.close();
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
// TODO Auto-generated method stub
ViewDeps test = new ViewDeps();
test.run();
}
}
Output
INFO:
Executing query:
SELECT * FROM /dept
[info 2012/07/05 21:02:03.460 EST
id=1, name=pas.au.vmware.se.dept.Dept, fields=[
deptno:int:0
name:String:1]]
[info 2012/07/05 21:02:03.473 EST
deptno: private int pas.au.vmware.se.dept.Dept.deptno
name: private java.lang.String pas.au.vmware.se.dept.Dept.name
Dept [deptno=20, name=RESEARCH]
Dept [deptno=30, name=SALES]
Dept [deptno=10, name=ACCOUNTING]
Dept [deptno=40, name=OPERATION]
SQLFire Code
package pas.au.vmware.sqlfire;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TestThinClient
{
private Logger logger = Logger.getLogger(this.getClass().getSimpleName());
private String url = "jdbc:sqlfire://localhost:1527/";
public TestThinClient()
{
// TODO Auto-generated constructor stub
}
public void run() throws SQLException
{
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
logger.log (Level.INFO, String.format("Connecting to SQLFire with url %s", url));
try
{
conn = DriverManager.getConnection(url);
logger.log(Level.INFO, conn.toString());
stmt = conn.createStatement();
rset = stmt.executeQuery("select * from dept order by 1");
while (rset.next())
{
System.out.println(
String.format("Dept[%s, %s, %s]",
rset.getInt(1), rset.getString(2), rset.getString(3)));
}
}
catch (SQLException se)
{
logger.log(Level.SEVERE, se.getMessage());
}
finally
{
if (conn != null)
{
conn.close();
}
if (stmt != null)
{
stmt.close();
}
if (rset != null)
{
rset.close();
}
}
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestThinClient test = new TestThinClient();
try
{
test.run();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Output
Jul 5, 2012 9:03:17 PM pas.au.vmware.sqlfire.TestThinClient run
INFO: Connecting to SQLFire with url jdbc:sqlfire://localhost:1527/
Jul 5, 2012 9:03:17 PM pas.au.vmware.sqlfire.TestThinClient run
INFO: com.vmware.sqlfire.internal.client.net.NetConnection40@2acdb06e
Dept[10, ACCOUNTING, NEW YORK]
Dept[20, RESEARCH, DALLAS]
Dept[30, SALES, CHICAGO]
Dept[40, OPERATIONS, BRISBANE]
No comments:
Post a Comment