Revision: 204
http://polepos.svn.sourceforge.net/polepos/?rev=204&view=rev
Author: carlrosenberger
Date: 2011-03-14 14:54:35 +0000 (Mon, 14 Mar 2011)
Log Message:
-----------
cr + acv: Finding out the version of the used JDBC databases using JDBC metadata.
Modified Paths:
--------------
trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java
trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java
trunk/polepos/src/org/polepos/teams/jdo/JdoCar.java
Modified: trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java 2011-03-10 16:58:11 UTC (rev 203)
+++ trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java 2011-03-14 14:54:35 UTC (rev 204)
@@ -43,16 +43,87 @@
JdbcSettings jdbcSettings = Jdbc.settings();
_website = jdbcSettings.getWebsite(dbtype);
_description = jdbcSettings.getDescription(dbtype);
- _name = jdbcSettings.getName(dbtype);
-
try {
Class.forName(jdbcSettings.getDriverClass(dbtype)).newInstance();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
+ _name = jdbcSettings.getName(dbtype) + "-" + getVersion(dbtype);
}
+
+ public Connection openConnection() {
+ try {
+ JdbcSettings jdbcSettings = Jdbc.settings();
+ Properties props = new Properties();
+ String username = jdbcSettings.getUsername(_dbType);
+ if(username != null){
+ props.put("user", username);
+ }
+ String password = jdbcSettings.getPassword(_dbType);
+ if(password != null){
+ props.put("password", password);
+ }
+
+ // If we don't use this setting, HSQLDB will hold all tables
+ // in memory completely, which is not what other engines do.
+ props.put("hsqldb.default_table_type", "cached");
+
+ String connectUrl = jdbcSettings.getConnectUrl(_dbType);
+ Connection connection = DriverManager.getConnection(connectUrl, props);
+ connection.setAutoCommit(false);
+ return connection;
+
+ } catch (SQLException e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+
+ private String getVersion(String dbtype){
+
+ try {
+ Connection conn = openConnection();
+ DatabaseMetaData meta = conn.getMetaData();
+
+ int majorVersion = 0;
+ int minorVersion = 0;
+ try {
+ majorVersion = meta.getDatabaseMajorVersion();
+ } catch (Exception e) {
+ System.out.println("major Version: unsupported feature");
+ }
+ try {
+ minorVersion = meta.getDatabaseMinorVersion();
+ } catch (Exception e) {
+ System.out.println("minorVersion unsupported feature");
+ }
+
+ String productName = meta.getDatabaseProductName();
+ String productVersion = meta.getDatabaseProductVersion();
+// System.out.println("productName" + productName);
+// System.out.println("productVersion" + productVersion);
+ conn.close();
+
+// The following produces earlier versions than we use:
+
+// String version = "" + majorVersion + "." + minorVersion;
+// return version;
+
+// Remove the part after the dash from Derby and MySQL
+ int pos = productVersion.indexOf("-");
+ String version = pos > 0 ? productVersion.substring(0, pos -1) : productVersion;
+ System.out.println("Detected: " + productName + " " + version);
+ return version;
+
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return Jdbc.settings().getVersion(dbtype);
+ }
+
+
public String name() {
if (_name != null) {
return _name;
Modified: trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java 2011-03-10 16:58:11 UTC (rev 203)
+++ trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java 2011-03-14 14:54:35 UTC (rev 204)
@@ -26,7 +26,7 @@
import org.polepos.data.*;
-public abstract class JdbcDriver extends org.polepos.framework.DriverBase {
+public class JdbcDriver extends org.polepos.framework.DriverBase {
private Connection _connection;
@@ -148,36 +148,10 @@
public void openConnection() {
-
- try {
- assert null == _connection : "database has to be closed before opening";
- JdbcSettings jdbcSettings = Jdbc.settings();
-
- Properties props = new Properties();
- String username = jdbcSettings.getUsername(jdbcCar()._dbType);
- if(username != null){
- props.put("user", username);
- }
- String password = jdbcSettings.getPassword(jdbcCar()._dbType);
- if(password != null){
- props.put("password", password);
- }
-
- // If we don't use this setting, HSQLDB will hold all tables
- // in memory completely, which is not what other engines do.
- props.put("hsqldb.default_table_type", "cached");
-
-
- _connection = DriverManager.getConnection(jdbcSettings.getConnectUrl(jdbcCar()._dbType), props);
- _connection.setAutoCommit(false);
-
- if(isHsqlDb()){
- JdbcCar.hsqlDbWriteDelayToZero(_connection);
- }
-
- } catch (SQLException e) {
- e.printStackTrace();
- throw new RuntimeException(e);
+ assert null == _connection : "database has to be closed before opening";
+ _connection = jdbcCar().openConnection();
+ if(isHsqlDb()){
+ JdbcCar.hsqlDbWriteDelayToZero(_connection);
}
}
Modified: trunk/polepos/src/org/polepos/teams/jdo/JdoCar.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdo/JdoCar.java 2011-03-10 16:58:11 UTC (rev 203)
+++ trunk/polepos/src/org/polepos/teams/jdo/JdoCar.java 2011-03-14 14:54:35 UTC (rev 204)
@@ -36,14 +36,17 @@
private transient PersistenceManagerFactory _persistenceManagerFactory;
- private final String mDbName;
- private final String mName;
+ private final String _dbName;
+
+ private final String _jdoName;
+
+ private String _name;
JdoCar(Team team, String name, String dbName, String color) {
super(team, color);
- mName = name;
- mDbName = dbName;
+ _jdoName = name;
+ _dbName = dbName;
_website = Jdo.settings().getWebsite(name);
_description = Jdo.settings().getDescription(name);
@@ -53,7 +56,7 @@
}
private boolean isSQL() {
- return mDbName != null;
+ return _dbName != null;
}
private void initialize() {
@@ -61,7 +64,7 @@
Properties properties = new Properties();
properties.setProperty("javax.jdo.PersistenceManagerFactoryClass", Jdo.settings()
- .getFactory(mName));
+ .getFactory(_jdoName));
// properties.setProperty("javax.jdo.option.NontransactionalRead", "true");
@@ -101,36 +104,36 @@
if (isSQL()) {
try {
- Class.forName(Jdbc.settings().getDriverClass(mDbName)).newInstance();
+ Class.forName(Jdbc.settings().getDriverClass(_dbName)).newInstance();
} catch (Exception ex) {
ex.printStackTrace();
}
properties.setProperty("javax.jdo.option.ConnectionDriverName", Jdbc.settings()
- .getDriverClass(mDbName));
- String connectUrl = Jdbc.settings().getConnectUrl(mDbName);
+ .getDriverClass(_dbName));
+ String connectUrl = Jdbc.settings().getConnectUrl(_dbName);
properties.setProperty("javax.jdo.option.ConnectionURL", connectUrl);
- String user = Jdbc.settings().getUsername(mDbName);
+ String user = Jdbc.settings().getUsername(_dbName);
if (user != null) {
properties.setProperty("javax.jdo.option.ConnectionUserName", user);
}
- String password = Jdbc.settings().getPassword(mDbName);
+ String password = Jdbc.settings().getPassword(_dbName);
if (password != null) {
properties.setProperty("javax.jdo.option.ConnectionPassword", password);
}
} else {
- properties.setProperty("javax.jdo.option.ConnectionURL", Jdo.settings().getURL(mName));
+ properties.setProperty("javax.jdo.option.ConnectionURL", Jdo.settings().getURL(_jdoName));
- String user = Jdo.settings().getUsername(mName);
+ String user = Jdo.settings().getUsername(_jdoName);
if (user != null) {
properties.setProperty("javax.jdo.option.ConnectionUserName", user);
}
- String password = Jdo.settings().getPassword(mName);
+ String password = Jdo.settings().getPassword(_jdoName);
if (password != null) {
properties.setProperty("javax.jdo.option.ConnectionPassword", password);
}
@@ -182,27 +185,18 @@
}
public PersistenceManager getPersistenceManager() {
-
PersistenceManager pm = _persistenceManagerFactory.getPersistenceManager();
if(pm instanceof VersantPersistenceManager){
((VersantPersistenceManager)pm).setReadLockOnOptimisticQueryResults( false);
}
-
- if(! "hsqldb".equals(mDbName)){
+ if(! "hsqldb".equals(_dbName)){
return pm;
}
-
JDOConnection dataStoreConnection = pm.getDataStoreConnection();
Connection connection = (Connection) dataStoreConnection.getNativeConnection();
-
JdbcCar.hsqlDbWriteDelayToZero(connection);
try {
-
- // Closing the connection here really feels strange, but otherwise
- // Datanucleus hangs, probably because it runs out of JDBC connections.
-
connection.close();
-
} catch (SQLException e) {
e.printStackTrace();
}
@@ -211,12 +205,20 @@
@Override
public String name() {
+ if(_name != null){
+ return _name;
+ }
if(isSQL()){
- return Jdo.settings().getName(mName) + "/" +Jdbc.settings().getName(mDbName)+"-"+Jdbc.settings().getVersion(mDbName);
+ // Creating a JdbcCar to get the version name from it.
+ JdbcTeam jdbcTeam = new JdbcTeam();
+ JdbcCar jdbcCar = new JdbcCar(jdbcTeam, _dbName, color());
+ _name = Jdo.settings().getName(_jdoName) + "/" + jdbcCar.name();
+ } else {
+ _name = Jdo.settings().getVendor(_jdoName) + "/" + Jdo.settings().getName(_jdoName)+"-"+Jdo.settings().getVersion(_jdoName);
}
- return Jdo.settings().getVendor(mName) + "/" + Jdo.settings().getName(mName)+"-"+Jdo.settings().getVersion(mName);
-
+
+ return _name;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|