Mercurial > dive4elements > river
changeset 4773:f0b3ad10f67f
Added after login SQL statements for database connection. Can be used to alter the current schema to avoid naming clashes.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sat, 05 Jan 2013 13:30:57 +0100 |
parents | f939e1e6cfa4 |
children | 9dcc32fc5167 |
files | flys-aft/doc/conf-oracle.xml flys-aft/doc/conf.xml flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java |
diffstat | 3 files changed, 46 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ <user>aft</user> <password>aft</password> <url>jdbc:oracle:thin:@//localhost:1521/XE</url> + <execute-login> + <statement>ALTER SESSION SET CURRENT_SCHEMA=AFT</statement> + </execute-login> </db> </side> </sync>
--- 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 @@ <user/> <password/> <url>jdbc:sqlite:/path/to/aft.db</url> + <!-- + <execute-login> + <statement>ALTER SESSION SET CURRENT_SCHEMA=AFT</statement> + </execute-login> + --> </db> </side> </sync>
--- 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<String> loginStatements; public ConnectionBuilder(String type, Document document) { this.type = type; extractCredentials(document); } + protected static List<String> extractStrings(NodeList nodes) { + int N = nodes.getLength(); + List<String> result = new ArrayList<String>(N); + for (int i = 0; i < N; ++i) { + result.add(nodes.item(i).getTextContent()); + } + return result; + } + protected void extractCredentials(Document document) { HashMap<String, String> map = new HashMap<String, String>(); 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; }