Author: jruchaud Date: 2010-09-15 12:14:23 +0200 (Wed, 15 Sep 2010) New Revision: 311 Url: http://nuiton.org/repositories/revision/wikitty/311 Log: Replace deprecated xapool by commons-dbcp Added: trunk/wikitty-jdbc-impl/src/test/resources/wikitty-jdbc-config.properties Removed: trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-config.properties trunk/wikitty-jdbc-impl/src/test/resources/jdbc.properties Modified: trunk/pom.xml trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java trunk/wikitty-jdbc-impl/pom.xml trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/pom.xml 2010-09-15 10:14:23 UTC (rev 311) @@ -68,6 +68,20 @@ </dependency> <dependency> + <groupId>commons-dbcp</groupId> + <artifactId>commons-dbcp</artifactId> + <version>1.4</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + <version>1.8.3</version> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>org.nuiton.eugene</groupId> <artifactId>eugene</artifactId> <version>${eugene.version}</version> @@ -76,7 +90,7 @@ <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> - <version>1.2.140</version> + <version>1.2.142</version> <scope>test</scope> </dependency> @@ -168,13 +182,6 @@ </dependency> <dependency> - <groupId>com.experlog</groupId> - <artifactId>xapool</artifactId> - <version>1.5.0</version> - </dependency> - - - <dependency> <groupId>org.zkoss.zk</groupId> <artifactId>zk</artifactId> <version>${zk.version}</version> Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java 2010-09-15 10:14:23 UTC (rev 311) @@ -69,7 +69,6 @@ } public void commit() { - UserTransaction userTransaction = getUserTransaction(); try { if (log.isDebugEnabled()) { Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2010-09-15 10:14:23 UTC (rev 311) @@ -24,7 +24,6 @@ import org.junit.Test; import org.nuiton.wikitty.Criteria; import org.nuiton.wikitty.Label; -import org.nuiton.wikitty.LabelHelper; import org.nuiton.wikitty.PagedResult; import org.nuiton.wikitty.Tree; import org.nuiton.wikitty.TreeNode; Modified: trunk/wikitty-jdbc-impl/pom.xml =================================================================== --- trunk/wikitty-jdbc-impl/pom.xml 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-jdbc-impl/pom.xml 2010-09-15 10:14:23 UTC (rev 311) @@ -70,6 +70,14 @@ <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> + <dependency> + <groupId>commons-dbcp</groupId> + <artifactId>commons-dbcp</artifactId> + </dependency> + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + </dependency> <dependency> <groupId>log4j</groupId> @@ -79,10 +87,6 @@ <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> - <dependency> - <groupId>com.experlog</groupId> - <artifactId>xapool</artifactId> - </dependency> </dependencies> <!-- ************************************************************* --> Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2010-09-15 10:14:23 UTC (rev 311) @@ -23,7 +23,6 @@ import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.COL_REQUIRES; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.COL_TAGVALUES; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.COL_VERSION; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.JDBC_DRIVER; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CLEAR_EXTENSION; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_EXTENSION_ADMIN_TEST; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_EXTENSION_ADMIN; @@ -94,17 +93,6 @@ public WikittyExtensionStorageJDBC(Properties properties) { conf = loadProperties(properties); - - //check if JDBC_DRIVER ca be loaded - try { - Class.forName(conf.getProperty(JDBC_DRIVER)); - } catch (ClassNotFoundException eee) { - if (log.isFatalEnabled()) { - log.fatal("Couldn't find the driver!"); - } - throw new WikittyException(eee); - } - Connection connectionTest = getJDBCConnection(conf); try { // If test of existance work, no exception and do nothing @@ -116,7 +104,7 @@ if (log.isInfoEnabled()) { log.info("try to create extension database"); } - Connection connection = getJDBCConnection(conf); + Connection connection = getConnection(conf); try { Statement statement = connection.createStatement(); statement.execute(conf.getProperty(QUERY_CREATION_EXTENSION_ADMIN)); Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2010-09-15 10:14:23 UTC (rev 311) @@ -25,16 +25,22 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; +import java.util.Arrays; import java.util.Date; -import java.util.Hashtable; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; +import java.util.Set; +import javax.sql.XADataSource; import javax.transaction.TransactionManager; +import org.apache.commons.beanutils.BeanMap; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.dbcp.managed.BasicManagedDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.enhydra.jdbc.pool.StandardXAPoolDataSource; -import org.enhydra.jdbc.standard.StandardXADataSource; import org.nuiton.wikitty.WikittyException; /** @@ -130,13 +136,15 @@ "jdbc.queries.insert.extension.data"; /** JDBC JDBC_DRIVER property name */ - static final public String JDBC_DRIVER = "jdbc.con.driver"; + static protected String JDBC_DRIVER = "jdbc.con.driver"; /** JDBC_HOST property name */ static protected String JDBC_HOST = "jdbc.con.host"; - /** user name property name */ + /** JDBC_USER_NAME property name */ static protected String JDBC_USER_NAME = "jdbc.con.userName"; /** JDBC_PASSWORD property name */ static protected String JDBC_PASSWORD = "jdbc.con.password"; + /** JDBC_XADATASOURCE property name */ + static protected String JDBC_XADATASOURCE = "jdbc.xadatasource"; /** admin table name */ static protected String TABLE_WIKITTY_ADMIN = "wikitty_admin"; @@ -193,8 +201,8 @@ return databaseConfig; } - private static Hashtable<String, StandardXAPoolDataSource> dataSources = - new Hashtable<String, StandardXAPoolDataSource>(); + private static Map<String, BasicManagedDataSource> dataSources = + new HashMap<String, BasicManagedDataSource>(); /** * Get a new connection instance (i.e. it opens a new transaction) plug on @@ -211,31 +219,71 @@ conf.getProperty(JDBC_PASSWORD), conf.getProperty(JDBC_HOST)); if (!dataSources.containsKey(jdbcUrl)) { - log.info("Creating PoolDataSource for: " + jdbcUrl); - StandardXADataSource dataSource = new StandardXADataSource(); - dataSource.setDriverName(conf.getProperty(JDBC_DRIVER)); + log.info("Creating BasicManagedDataSource for: " + jdbcUrl); + + // Create datasource + BasicManagedDataSource dataSource = new BasicManagedDataSource(); + + // if xadatasource + String xaDataSourceClassName = conf.getProperty(JDBC_XADATASOURCE); + if(xaDataSourceClassName != null) { + XADataSource xaDataSource = (XADataSource) Class.forName(xaDataSourceClassName).newInstance(); + + BeanMap beanMap = new BeanMap(xaDataSource); + Set<String> fields = beanMap.keySet(); + + // Inject properties in xadatasource + for(Entry<Object, Object> properties : conf.entrySet()) { + String propertyName = ((String) properties.getKey()) + .replaceFirst(JDBC_XADATASOURCE + "." + xaDataSourceClassName + ".", ""); + + if(!propertyName.equals(JDBC_XADATASOURCE)) { + if(fields.contains(propertyName)) { + String propertyValue = (String) properties.getValue(); + BeanUtils.setProperty(xaDataSource, propertyName, propertyValue); + } else { + log.warn("Invalid property " + propertyName + " for XADatasource " + Arrays.toString(fields.toArray())); + } + } + } + dataSource.setXaDataSourceInstance(xaDataSource); + } else { + log.warn("No xadatasource is used, data integrity is not guarantee"); + } + + // else standard datasource + dataSource.setDriverClassName(conf.getProperty(JDBC_DRIVER)); dataSource.setUrl(conf.getProperty(JDBC_HOST)); - dataSource.setUser(conf.getProperty(JDBC_USER_NAME)); + dataSource.setUsername(conf.getProperty(JDBC_USER_NAME)); dataSource.setPassword(conf.getProperty(JDBC_PASSWORD)); dataSource.setTransactionManager(transactionManager); - - StandardXAPoolDataSource poolDataSource = new StandardXAPoolDataSource(dataSource); - poolDataSource.setUser(conf.getProperty(JDBC_USER_NAME)); - poolDataSource.setPassword(conf.getProperty(JDBC_PASSWORD)); - poolDataSource.setTransactionManager(transactionManager); - dataSources.put(jdbcUrl, poolDataSource); + + dataSources.put(jdbcUrl, dataSource); } - StandardXAPoolDataSource poolDataSource = dataSources.get(jdbcUrl); - Connection connection = poolDataSource.getConnection(); + BasicManagedDataSource dataSource = dataSources.get(jdbcUrl); + Connection connection = dataSource.getConnection(); return connection; - } catch(SQLException eee) { + } catch(Exception eee) { throw new WikittyException(eee); } } /** + * Closes a connection. + * + * @param connection the connection to close + */ + public static void closeQuietly(Connection connection) { + try { + connection.close(); + } catch (SQLException e) { + log.error("SQLException while closing connection", e); + } + } + + /** * Get a new connection instance (i.e. it opens a new transaction). * * @return a new Connection (db transaction) @@ -243,8 +291,7 @@ */ public static synchronized Connection getJDBCConnection(Properties conf) { try { - Connection connection = DriverManager.getConnection(conf.getProperty(JDBC_HOST), - conf.getProperty(JDBC_USER_NAME), conf.getProperty(JDBC_PASSWORD)); + Connection connection = getConnection(conf); connection.setAutoCommit(false); return connection; } catch(SQLException eee) { @@ -252,14 +299,6 @@ } } - public static void closeQuietly(Connection connection) { - try { - connection.close(); - } catch (SQLException e) { - log.error("SQLException while closing connection", e); - } - } - /** * Closes a connection (i.e. transaction) and commit data. * Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-09-15 10:14:23 UTC (rev 311) @@ -25,7 +25,6 @@ import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.COL_NUMBER_VALUE; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.COL_TEXT_VALUE; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.COL_VERSION; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.JDBC_DRIVER; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CLEAR_WIKITTY; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_ADMIN; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_ADMIN_TEST; @@ -106,20 +105,9 @@ } public WikittyStorageJDBC(WikittyExtensionStorage extensionStorage, Properties properties) { - conf = loadProperties(properties); - this.extensionStorage = extensionStorage; - //check if JDBC_DRIVER ca be loaded - try { - Class.forName(conf.getProperty(JDBC_DRIVER)); - } catch (ClassNotFoundException eee) { - if (log.isFatalEnabled()) { - log.fatal("Couldn't find the driver!"); - eee.printStackTrace(); - } - throw new WikittyException(eee); - } - + + conf = loadProperties(properties); Connection connectionTest = getJDBCConnection(conf); try { // If test of existance work, no exception and do nothing @@ -131,7 +119,7 @@ if (log.isInfoEnabled()) { log.info("try to create wikitty database"); } - Connection connection = getJDBCConnection(conf); + Connection connection = getConnection(conf); try { Statement statement = connection.createStatement(); statement.execute(conf.getProperty(QUERY_CREATION_WIKITTY_ADMIN)); Deleted: trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-config.properties =================================================================== --- trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-config.properties 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-config.properties 2010-09-15 10:14:23 UTC (rev 311) @@ -1,5 +0,0 @@ -#Connection parameters -jdbc.con.driver=org.h2.Driver -jdbc.con.host=jdbc:h2:file:./target/data/data -jdbc.con.userName=sa -jdbc.con.password= Deleted: trunk/wikitty-jdbc-impl/src/test/resources/jdbc.properties =================================================================== --- trunk/wikitty-jdbc-impl/src/test/resources/jdbc.properties 2010-09-14 13:43:22 UTC (rev 310) +++ trunk/wikitty-jdbc-impl/src/test/resources/jdbc.properties 2010-09-15 10:14:23 UTC (rev 311) @@ -1,71 +0,0 @@ -#Connection parameters -jdbc.con.driver=org.h2.Driver -jdbc.con.host=jdbc:h2:~/wikitty -jdbc.con.userName=sa -jdbc.con.password= - -#table extension_admin creation query -jdbc.queries.creation.extension.admin=CREATE TABLE IF NOT EXISTS extension_admin (\ -id text NOT NULL,\ -name text NOT NULL,\ -version varchar(8) NOT NULL);\ -ALTER TABLE extension_admin ADD PRIMARY KEY (id); - -#table extension_data creation query -jdbc.queries.creation.extension.data=CREATE TABLE IF NOT EXISTS extension_data (\ -fieldName text NOT NULL,\ -fieldType text NOT NULL,\ -id text NOT NULL);\ -ALTER TABLE extension_data ADD PRIMARY KEY (id,fieldName);\ -ALTER TABLE extension_data ADD FOREIGN KEY (id) REFERENCES extension_admin (id); - -#table wikitty_admin creation query -jdbc.queries.creation.wikitty.admin=CREATE TABLE IF NOT EXISTS wikitty_admin (\ -id varchar(64) NOT NULL,\ -version varchar(8) NOT NULL,\ -extension_list text NOT NULL,\ -deletionDate dateTime DEFAULT NULL);\ -ALTER TABLE wikitty_admin ADD PRIMARY KEY (id); - -#table wikitty_data creation query -jdbc.queries.creation.wikitty.data=CREATE TABLE IF NOT EXISTS wikitty_data (\ -fieldName text NOT NULL,\ -numberValue numeric,\ -dateValue datetime,\ -textValue text,\ -booleanValue boolean,\ -id varchar(64) NOT NULL);\ -ALTER TABLE wikitty_data ADD PRIMARY KEY (id,fieldName);\ -ALTER TABLE wikitty_data ADD FOREIGN KEY (id) REFERENCES wikitty_admin (id); - -#basic selection query without where clause -jdbc.queries.select=SELECT %s FROM %s; -#basic selection query with where clause -jdbc.queries.select.where=SELECT %s FROM %s WHERE %s = %s; -#not deleted data selection query with where clause -jdbc.queries.select.where.notdeleted=SELECT %s FROM %s WHERE %s = %s AND deletionDate IS NULL; - -#tables emptying query -jdbc.queries.delete.all=DELETE FROM extension_data; DELETE FROM extension_admin;\ -DELETE FROM wikitty_data; DELETE FROM wikitty_admin; -#wikitty deletion in the admin table query -jdbc.queries.delete.wikitty.admin=UPDATE wikitty_admin SET deletionDate = NOW()\ -WHERE id = '%s'; -#wikitty deletion in the data table query -jdbc.queries.delete.wikitty.data=DELETE FROM wikitty_data WHERE id = '%s'; - -#wikitty insertion in the admin table query -jdbc.queries.insert.wikitty.admin=INSERT INTO wikitty_admin\ -(id, version, extension_list) VALUES ('%s', '%s', '%s'); -#wikitty update in the admin table query -jdbc.queries.update.wikitty.admin=UPDATE wikitty_admin\ -SET version = '%s', extension_list = '%s' WHERE id = '%s'; -#wikitty insertion in the data table query -jdbc.queries.insert.wikitty.data=INSERT INTO wikitty_data\ -(id, fieldName, %s) VALUES ('%s', '%s.%s', %s); -#extension insertion in the admin table query -jdbc.queries.insert.extension.admin=INSERT INTO extension_admin\ -(id, name, version) VALUES ('%s', '%s', '%s'); -#extension insertion in the data table query -jdbc.queries.insert.extension.data=INSERT INTO extension_data\ -(id, fieldName, fieldType) VALUES ('%s', '%s', '%s'); \ No newline at end of file Copied: trunk/wikitty-jdbc-impl/src/test/resources/wikitty-jdbc-config.properties (from rev 284, trunk/wikitty-jdbc-impl/src/main/resources/wikitty-jdbc-config.properties) =================================================================== --- trunk/wikitty-jdbc-impl/src/test/resources/wikitty-jdbc-config.properties (rev 0) +++ trunk/wikitty-jdbc-impl/src/test/resources/wikitty-jdbc-config.properties 2010-09-15 10:14:23 UTC (rev 311) @@ -0,0 +1,11 @@ +#Connection parameters for standard datasource +jdbc.con.driver=org.h2.Driver +jdbc.con.host=jdbc:h2:file:./target/data/data +jdbc.con.userName=sa +jdbc.con.password= + +#Connection parameters for xadatasource +jdbc.xadatasource=org.h2.jdbcx.JdbcDataSource +jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.URL=jdbc:h2:file:./target/data/data +jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.user=sa +jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password=
participants (1)
-
jruchaud@users.nuiton.org