Skip to content

Instantly share code, notes, and snippets.

@matejuh
Last active December 15, 2015 03:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matejuh/5196313 to your computer and use it in GitHub Desktop.
Save matejuh/5196313 to your computer and use it in GitHub Desktop.
Embedded Teiid. The second file is working example.
package com.ca.teiid;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.resource.cci.ConnectionFactory;
import javax.xml.ws.Service.Mode;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.jdbc.TeiidDriver;
import org.teiid.resource.adapter.ws.WSConnectionImpl;
import org.teiid.resource.adapter.ws.WSManagedConnectionFactory;
import org.teiid.resource.spi.BasicConnectionFactory;
import org.teiid.runtime.EmbeddedConfiguration;
import org.teiid.runtime.EmbeddedServer;
import org.teiid.translator.ws.WSExecutionFactory;
import org.teiid.translator.ws.WSExecutionFactory.Binding;
public class TeiidEmbeddedPortfolio {
private static void buildDeployVDB(EmbeddedServer teiidServer)
throws Exception {
ModelMetaData xmlModel = new ModelMetaData();
xmlModel.setName("Location");
xmlModel.addSourceMapping("ws-connector", "ws", "source-ws");
teiidServer.deployVDB("Locations", xmlModel);
}
private static void execute(Connection connection, String sql,
boolean closeConn) throws Exception {
try {
Statement statement = connection.createStatement();
System.out.println("warn1" + statement.getWarnings());
boolean hasResults = statement.execute(sql);
System.out.println("warn2" + statement.getWarnings());
if (hasResults) {
System.out.println("has result");
ResultSet results = statement.getResultSet();
results.close();
}
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (connection != null && closeConn) {
connection.close();
}
}
}
public static void main(String[] args) throws Exception {
// now start Teiid in embedded mode
EmbeddedConfiguration ec = new EmbeddedConfiguration();
ec.setUseDisk(true);
EmbeddedServer teiidServer = new EmbeddedServer();
teiidServer.start(ec);
final WSManagedConnectionFactory wsFactory = new WSManagedConnectionFactory();
wsFactory.setEndPointName("http://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View");
BasicConnectionFactory<WSConnectionImpl> wsConnection = wsFactory
.createConnectionFactory();
teiidServer
.addConnectionFactoryProvider(
"source-ws",
new EmbeddedServer.SimpleConnectionFactoryProvider<ConnectionFactory>(
wsConnection));
WSExecutionFactory executionFactory = new WSExecutionFactory();
executionFactory.setDefaultBinding(Binding.HTTP);
executionFactory.setDefaultServiceMode(Mode.MESSAGE);
teiidServer.addTranslator("ws", executionFactory);
buildDeployVDB(teiidServer);
// Now query the VDB
TeiidDriver td = teiidServer.getDriver();
Connection c = td.connect("jdbc:teiid:Locations", null);
execute(c, "select * from Location", true);
}
}
package com.ca.teiid;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.resource.cci.ConnectionFactory;
import javax.xml.ws.Service.Mode;
import org.teiid.adminapi.Model.Type;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.jdbc.TeiidDriver;
import org.teiid.metadata.MetadataRepository;
import org.teiid.resource.adapter.ws.WSConnectionImpl;
import org.teiid.resource.adapter.ws.WSManagedConnectionFactory;
import org.teiid.resource.spi.BasicConnectionFactory;
import org.teiid.runtime.EmbeddedConfiguration;
import org.teiid.runtime.EmbeddedServer;
import org.teiid.translator.ws.WSExecutionFactory;
import org.teiid.translator.ws.WSExecutionFactory.Binding;
public class TeiidEmbeddedPortfolio {
private static void buildDeployVDB(EmbeddedServer teiidServer)
throws Exception {
ModelMetaData xmlModel = new ModelMetaData();
xmlModel.setName("locations");
xmlModel.setSchemaSourceType("native");
xmlModel.addSourceMapping("ws-connector", "ws", "source-ws");
ModelMetaData virt = new ModelMetaData();
virt.setName("locationview");
virt.setModelType(Type.VIRTUAL);
virt.setSchemaSourceType("ddl");
virt.setSchemaText(
"CREATE view \"virtview\" OPTIONS (UPDATEABLE 'false') as SELECT " +
"A.lat AS lat, A.lng AS lng "+
"FROM " +
"(EXEC locations.invokeHttp('GET', null, 'http://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true')) AS f, " +
"XMLTABLE('/GeocodeResponse' PASSING XMLPARSE(DOCUMENT f.result) COLUMNS lat string PATH 'result/geometry/location/lat/text()', lng string PATH 'result/geometry/location/lng/text()') AS A");
teiidServer.deployVDB("Locations", xmlModel, virt);
}
private static void execute(Connection connection, String sql,
boolean closeConn) throws Exception {
try {
Statement statement = connection.createStatement();
boolean hasResults = statement.execute(sql);
if (hasResults) {
ResultSet results = statement.getResultSet();
ResultSetMetaData metadata = results.getMetaData();
int columns = metadata.getColumnCount();
System.out.println("Results");
for (int row = 1; results.next(); row++) {
System.out.print(row + ": ");
for (int i = 0; i < columns; i++) {
if (i > 0) {
System.out.print(",");
}
System.out.print(results.getString(i+1));
}
System.out.println();
}
results.close();
}
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (connection != null && closeConn) {
connection.close();
}
}
}
public static void main(String[] args) throws Exception {
// now start Teiid in embedded mode
EmbeddedConfiguration ec = new EmbeddedConfiguration();
ec.setUseDisk(true);
EmbeddedServer teiidServer = new EmbeddedServer();
teiidServer.start(ec);
final WSManagedConnectionFactory wsFactory = new WSManagedConnectionFactory();
wsFactory
.setEndPointName("https://www.googleapis.com/freebase/v1/search");
BasicConnectionFactory<WSConnectionImpl> wsConnection = wsFactory
.createConnectionFactory();
teiidServer
.addConnectionFactoryProvider(
"source-ws",
new EmbeddedServer.SimpleConnectionFactoryProvider<ConnectionFactory>(
wsConnection));
WSExecutionFactory executionFactory = new WSExecutionFactory();
executionFactory.setDefaultBinding(Binding.HTTP);
executionFactory.setDefaultServiceMode(Mode.MESSAGE);
teiidServer.addTranslator("ws", executionFactory);
buildDeployVDB(teiidServer);
// Now query the VDB
TeiidDriver td = teiidServer.getDriver();
Connection c = td.connect("jdbc:teiid:Locations", null);
execute(c, "select * from locationview.virtview", true);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment