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