package net.timbusproject.extractors.modules.tavernaextractor.provenance;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import net.sf.taverna.t2.invocation.InvocationContext;
import net.sf.taverna.t2.provenance.api.ProvenanceAccess;
import net.sf.taverna.t2.provenance.client.ProvenanceBaseClient;
import net.sf.taverna.t2.provenance.connector.ProvenanceConnector;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
public class DerbyProvenanceClient extends ProvenanceBaseClient {
private static Logger LOGGER = LogManager.getLogger("DerbyProvenanceClient");
String pathToDerbyDatabase = null;
private ProvenanceAccess pAccess = null;
public DerbyProvenanceClient(String pathToDerbyDatabase) {
super();
LOGGER.setLevel(Level.DEBUG);
if (pathToDerbyDatabase == null) {
throw new IllegalArgumentException("pathToDerbyDatabase must not be null.");
}
this.pathToDerbyDatabase = pathToDerbyDatabase;
LOGGER.debug("Try connect to derby database at '" + pathToDerbyDatabase + "'.");
}
@Override
protected void setDataSource(String connectorType) {
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.osjava.sj.memory.MemoryContextFactory");
System.setProperty("org.osjava.sj.jndi.shared", "true");
System.setProperty("hibernate.dialect", "org.hibernate.dialect.DerbyDialect");
BasicDataSource ds = new BasicDataSource();
ds.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
ds.setMaxActive(50);
ds.setMinIdle(10);
ds.setMaxIdle(50);
ds.setDefaultAutoCommit(true);
ds.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
ds.setUsername("");
ds.setPassword("");
try {
ds.setUrl("jdbc:derby:" + pathToDerbyDatabase);
} catch (Exception e) {
e.printStackTrace();
}
InitialContext context;
try {
context = new InitialContext();
context.rebind("jdbc/taverna", ds);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void setUp(String connectorType) throws ProvenanceAccessException {
//super.setUp(connectorType);
setDataSource(connectorType);
System.setProperty("raven.eclipse", "true");
try {
pAccess = new ProvenanceAccess(connectorType); // creates and initializes the provenance API
} catch (Exception sql) {
sql.printStackTrace();
// bad exception handling
// throw new ProvenanceAccessException(
// "Cannot establish connection to the database. Is another progam using this database currently ?");
}
}
@Override
public InvocationContext getInvocationContext() {
return pAccess.getInvocationContext();
}
public ProvenanceAccess getProvenanceAccess() {
return pAccess;
}
public ProvenanceConnector g() {
return pAccess.getProvenanceConnector();
}
}