package org.teiid.translator.hbase; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.Driver; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.resource.ResourceException; import javax.transaction.TransactionManager; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.junit.BeforeClass; import org.mockito.Mockito; import org.teiid.client.DQP; import org.teiid.core.util.SimpleMock; import org.teiid.deployers.VDBLifeCycleListener; import org.teiid.deployers.VirtualDatabaseException; import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository.ConnectorManagerException; import org.teiid.jdbc.EmbeddedProfile; import org.teiid.jdbc.TeiidDriver; import org.teiid.net.CommunicationException; import org.teiid.net.ConnectionException; import org.teiid.net.ServerConnection; import org.teiid.resource.adapter.hbase.HBaseManagedConnectionFactory; import org.teiid.runtime.EmbeddedConfiguration; import org.teiid.runtime.EmbeddedServer; import org.teiid.translator.HBaseConnection; import org.teiid.translator.TranslatorException; import org.teiid.transport.ClientServiceRegistry; import org.teiid.transport.ClientServiceRegistryImpl; import org.teiid.transport.LocalServerConnection; public class Test { static { String pattern = "%d %-5p [%c] (%t) %m%n"; PatternLayout layout = new PatternLayout(pattern); ConsoleAppender consoleAppender = new ConsoleAppender(layout); Logger.getRootLogger().setLevel(Level.WARN); Logger.getRootLogger().addAppender(consoleAppender); System.setProperty("java.util.logging.config.file", "src/test/resources/logging.properties"); } static class MyEmbeddedServer extends EmbeddedServer { public ClientServiceRegistryImpl getServices() { return services ; } } static MyEmbeddedServer server; @BeforeClass public static void init() throws TranslatorException, ResourceException, VirtualDatabaseException, ConnectorManagerException, FileNotFoundException, IOException, SQLException { if(null != server) { return; } server = new MyEmbeddedServer(); HBaseExecutionFactory executionFactory = new HBaseExecutionFactory(); executionFactory.start(); server.addTranslator("translator-hbase", executionFactory); HBaseManagedConnectionFactory managedconnectionFactory = new HBaseManagedConnectionFactory(); managedconnectionFactory.setZkQuorum("localhost:2181"); server.addConnectionFactory("java:/hbaseDS", managedconnectionFactory.createConnectionFactory()); EmbeddedConfiguration config = new EmbeddedConfiguration(); // config.setTransactionManager(SimpleMock.createSimpleMock(TransactionManager.class)); server.start(config); server.deployVDB(new FileInputStream(new File("src/test/resources/hbase-vdb.xml"))); } public static void main(String[] args) throws SQLException, VirtualDatabaseException, TranslatorException, ConnectorManagerException, FileNotFoundException, ResourceException, IOException, CommunicationException, ConnectionException { test(); // reproduce1(); // reproduce2(); } static void test() throws SQLException, VirtualDatabaseException, TranslatorException, ConnectorManagerException, FileNotFoundException, ResourceException, IOException { init(); Driver driver = server.getDriver(); Connection conn = driver.connect("jdbc:teiid:hbasevdb", null); TestHBaseUtil.executeBatchedUpdateDataType(conn, "INSERT INTO TypesTest VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); // Statement stmt = conn.createStatement(); // // ResultSet rs = stmt.executeQuery("SELECT * FROM Customer ORDER BY PK"); // // ResultSetMetaData metadata = rs.getMetaData(); // int columns = metadata.getColumnCount(); // for (int row = 1; rs.next(); row++) { // System.out.print(row + ": "); // for (int i = 0; i < columns; i++) { // if (i > 0) { // System.out.print(", "); // } // System.out.print(rs.getObject(i + 1)); // } // System.out.println(); // } // TestHBaseUtil.close(rs, stmt); TestHBaseUtil.close(conn); } /* * How Dynamic proxy created 'org.teiid.dqp.internal.process.DQPCore' */ static void reproduce1() throws VirtualDatabaseException, TranslatorException, ConnectorManagerException, FileNotFoundException, ResourceException, IOException, SQLException, CommunicationException, ConnectionException { init(); Properties info = new Properties(); info.put("ApplicationName", "JDBC"); info.put("VirtualDatabaseName", "hbasevdb"); ServerConnection conn = new LocalServerConnection(info, true){ @Override protected ClientServiceRegistry getClientServiceRegistry(String transport) { return server.getServices(); } }; DQP dqp = conn.getService(DQP.class); System.out.println(dqp); } /* * Test Proxy */ static void reproduce2() { DQP dqp = getService(DQP.class); System.out.println(dqp); } public static <T> T getService(final Class<T> iface) { Object obj = Proxy.newProxyInstance(Test.class.getClassLoader(), new Class[] {iface}, new InvocationHandler(){ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(proxy.getClass()); System.out.println(method); System.out.println(args); return null; }}); System.out.println(obj); return iface.cast(obj); } static void reproduce3() { } static void reproduce4() { } static void reproduce5() { } }