# HG changeset patch # User Sascha L. Teichmann # Date 1357389057 -3600 # Node ID f0b3ad10f67f19c41ac99c5f5d51956b97937317 # Parent f939e1e6cfa464c1c2c2370208444009fbe23669 Added after login SQL statements for database connection. Can be used to alter the current schema to avoid naming clashes. diff -r f939e1e6cfa4 -r f0b3ad10f67f flys-aft/doc/conf-oracle.xml --- a/flys-aft/doc/conf-oracle.xml Sat Jan 05 12:20:28 2013 +0100 +++ b/flys-aft/doc/conf-oracle.xml Sat Jan 05 13:30:57 2013 +0100 @@ -21,6 +21,9 @@ aft aft jdbc:oracle:thin:@//localhost:1521/XE + + ALTER SESSION SET CURRENT_SCHEMA=AFT + diff -r f939e1e6cfa4 -r f0b3ad10f67f flys-aft/doc/conf.xml --- a/flys-aft/doc/conf.xml Sat Jan 05 12:20:28 2013 +0100 +++ b/flys-aft/doc/conf.xml Sat Jan 05 13:30:57 2013 +0100 @@ -29,6 +29,11 @@ jdbc:sqlite:/path/to/aft.db + diff -r f939e1e6cfa4 -r f0b3ad10f67f flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java --- a/flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java Sat Jan 05 12:20:28 2013 +0100 +++ b/flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java Sat Jan 05 13:30:57 2013 +0100 @@ -6,35 +6,51 @@ import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; public class ConnectionBuilder { private static Logger log = Logger.getLogger(ConnectionBuilder.class); - public static final String XPATH_DRIVER = "/sync/side[@name=$type]/db/driver/text()"; - public static final String XPATH_USER = "/sync/side[@name=$type]/db/user/text()"; - public static final String XPATH_PASSWORD = "/sync/side[@name=$type]/db/password/text()"; - public static final String XPATH_URL = "/sync/side[@name=$type]/db/url/text()"; + public static final String XPATH_DRIVER = "/sync/side[@name=$type]/db/driver/text()"; + public static final String XPATH_USER = "/sync/side[@name=$type]/db/user/text()"; + public static final String XPATH_PASSWORD = "/sync/side[@name=$type]/db/password/text()"; + public static final String XPATH_URL = "/sync/side[@name=$type]/db/url/text()"; + public static final String XPATH_EXEC_LOGIN = "/sync/side[@name=$type]/db/execute-login/statement"; - protected String type; - protected String driver; - protected String user; - protected String password; - protected String url; + protected String type; + protected String driver; + protected String user; + protected String password; + protected String url; + protected List loginStatements; public ConnectionBuilder(String type, Document document) { this.type = type; extractCredentials(document); } + protected static List extractStrings(NodeList nodes) { + int N = nodes.getLength(); + List result = new ArrayList(N); + for (int i = 0; i < N; ++i) { + result.add(nodes.item(i).getTextContent()); + } + return result; + } + protected void extractCredentials(Document document) { HashMap map = new HashMap(); map.put("type", type); @@ -47,12 +63,15 @@ document, XPATH_PASSWORD, XPathConstants.STRING, null, map); url = (String)XML.xpath( document, XPATH_URL, XPathConstants.STRING, null, map); + loginStatements = extractStrings((NodeList)XML.xpath( + document, XPATH_EXEC_LOGIN, XPathConstants.NODESET, null, map)); if (log.isDebugEnabled()) { log.debug("driver: " + driver); log.debug("user: " + user); log.debug("password: *******"); log.debug("url: " + url); + log.debug("number of login statements: " + loginStatements.size()); } } @@ -80,6 +99,16 @@ Connection.TRANSACTION_READ_UNCOMMITTED); } + for (String sql: loginStatements) { + Statement stmnt = connection.createStatement(); + try { + stmnt.execute(sql); + } + finally { + stmnt.close(); + } + } + return connection; }