You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2013/11/24 16:13:03 UTC
svn commit: r1544990 - in
/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne:
configuration/server/PropertyDataSourceFactory.java
configuration/server/XMLPoolingDataSourceFactory.java
conn/DriverDataSource.java conn/PoolManager.java
Author: aadamchik
Date: Sun Nov 24 15:13:02 2013
New Revision: 1544990
URL: http://svn.apache.org/r1544990
Log:
CAY-1882 Porting to OSGi environment
fixing JDBC driver classloading
Modified:
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/PropertyDataSourceFactory.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/XMLPoolingDataSourceFactory.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/DriverDataSource.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/PoolManager.java
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/PropertyDataSourceFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/PropertyDataSourceFactory.java?rev=1544990&r1=1544989&r2=1544990&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/PropertyDataSourceFactory.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/PropertyDataSourceFactory.java Sun Nov 24 15:13:02 2013
@@ -18,20 +18,25 @@
****************************************************************/
package org.apache.cayenne.configuration.server;
+import java.sql.Driver;
+
import javax.sql.DataSource;
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.configuration.RuntimeProperties;
+import org.apache.cayenne.conn.DriverDataSource;
+import org.apache.cayenne.conn.PoolDataSource;
import org.apache.cayenne.conn.PoolManager;
+import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.log.JdbcEventLogger;
/**
- * A DataSourceFactrory that creates a DataSource based on system properties. Properties
- * can be set per domain/node name or globally, applying to all nodes without explicit
- * property set. The following properties are supported:
+ * A DataSourceFactrory that creates a DataSource based on system properties.
+ * Properties can be set per domain/node name or globally, applying to all nodes
+ * without explicit property set. The following properties are supported:
* <ul>
* <li>cayenne.jdbc.driver[.domain_name.node_name]
* <li>cayenne.jdbc.url[.domain_name.node_name]
@@ -40,8 +45,8 @@ import org.apache.cayenne.log.JdbcEventL
* <li>cayenne.jdbc.min.connections[.domain_name.node_name]
* <li>cayenne.jdbc.max.conections[.domain_name.node_name]
* </ul>
- * At least url and driver properties must be specified for this factory to return a valid
- * DataSource.
+ * At least url and driver properties must be specified for this factory to
+ * return a valid DataSource.
*
* @since 3.1
*/
@@ -53,39 +58,30 @@ public class PropertyDataSourceFactory i
@Inject
protected JdbcEventLogger jdbcEventLogger;
+ @Inject
+ private AdhocObjectFactory objectFactory;
+
@Override
public DataSource getDataSource(DataNodeDescriptor nodeDescriptor) throws Exception {
- String suffix = "."
- + nodeDescriptor.getDataChannelDescriptor().getName()
- + "."
- + nodeDescriptor.getName();
+ String suffix = "." + nodeDescriptor.getDataChannelDescriptor().getName() + "." + nodeDescriptor.getName();
- String driver = getProperty(Constants.JDBC_DRIVER_PROPERTY, suffix);
+ String driverClass = getProperty(Constants.JDBC_DRIVER_PROPERTY, suffix);
String url = getProperty(Constants.JDBC_URL_PROPERTY, suffix);
String username = getProperty(Constants.JDBC_USERNAME_PROPERTY, suffix);
String password = getProperty(Constants.JDBC_PASSWORD_PROPERTY, suffix);
- int minConnections = getIntProperty(
- Constants.JDBC_MIN_CONNECTIONS_PROPERTY,
- suffix,
- 1);
- int maxConnections = getIntProperty(
- Constants.JDBC_MAX_CONNECTIONS_PROPERTY,
- suffix,
- 1);
+ int minConnections = getIntProperty(Constants.JDBC_MIN_CONNECTIONS_PROPERTY, suffix, 1);
+ int maxConnections = getIntProperty(Constants.JDBC_MAX_CONNECTIONS_PROPERTY, suffix, 1);
+
+ Driver driver = objectFactory.newInstance(Driver.class, driverClass);
+ DriverDataSource driverDS = new DriverDataSource(driver, url, username, password);
+ driverDS.setLogger(jdbcEventLogger);
+ PoolDataSource poolDS = new PoolDataSource(driverDS);
try {
- return new PoolManager(
- driver,
- url,
- minConnections,
- maxConnections,
- username,
- password,
- jdbcEventLogger,
- properties.getLong(Constants.SERVER_MAX_QUEUE_WAIT_TIME, PoolManager.MAX_QUEUE_WAIT_DEFAULT));
- }
- catch (Exception e) {
+ return new PoolManager(poolDS, minConnections, maxConnections, username, password, properties.getLong(
+ Constants.SERVER_MAX_QUEUE_WAIT_TIME, PoolManager.MAX_QUEUE_WAIT_DEFAULT));
+ } catch (Exception e) {
jdbcEventLogger.logConnectFailure(e);
throw e;
}
@@ -100,12 +96,8 @@ public class PropertyDataSourceFactory i
try {
return Integer.parseInt(string);
- }
- catch (NumberFormatException e) {
- throw new ConfigurationException(
- "Invalid int property '%s': '%s'",
- propertyName,
- string);
+ } catch (NumberFormatException e) {
+ throw new ConfigurationException("Invalid int property '%s': '%s'", propertyName, string);
}
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/XMLPoolingDataSourceFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/XMLPoolingDataSourceFactory.java?rev=1544990&r1=1544989&r2=1544990&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/XMLPoolingDataSourceFactory.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/XMLPoolingDataSourceFactory.java Sun Nov 24 15:13:02 2013
@@ -18,6 +18,8 @@
****************************************************************/
package org.apache.cayenne.configuration.server;
+import java.sql.Driver;
+
import javax.sql.DataSource;
import org.apache.cayenne.ConfigurationException;
@@ -25,7 +27,10 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.conn.DataSourceInfo;
+import org.apache.cayenne.conn.DriverDataSource;
+import org.apache.cayenne.conn.PoolDataSource;
import org.apache.cayenne.conn.PoolManager;
+import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.log.JdbcEventLogger;
import org.apache.commons.logging.Log;
@@ -47,9 +52,12 @@ public class XMLPoolingDataSourceFactory
@Inject
protected JdbcEventLogger jdbcEventLogger;
- @Inject
+ @Inject
private RuntimeProperties properties;
-
+
+ @Inject
+ private AdhocObjectFactory objectFactory;
+
@Override
public DataSource getDataSource(DataNodeDescriptor nodeDescriptor) throws Exception {
@@ -61,14 +69,21 @@ public class XMLPoolingDataSourceFactory
throw new ConfigurationException(message);
}
+ Driver driver = objectFactory.newInstance(Driver.class, dataSourceDescriptor.getJdbcDriver());
+ DriverDataSource driverDS = new DriverDataSource(driver, dataSourceDescriptor.getDataSourceUrl(),
+ dataSourceDescriptor.getUserName(), dataSourceDescriptor.getPassword());
+ driverDS.setLogger(jdbcEventLogger);
+ PoolDataSource poolDS = new PoolDataSource(driverDS);
+
try {
- return new PoolManager(dataSourceDescriptor.getJdbcDriver(), dataSourceDescriptor.getDataSourceUrl(),
- dataSourceDescriptor.getMinConnections(), dataSourceDescriptor.getMaxConnections(),
- dataSourceDescriptor.getUserName(), dataSourceDescriptor.getPassword(), jdbcEventLogger,
- properties.getLong(Constants.SERVER_MAX_QUEUE_WAIT_TIME, PoolManager.MAX_QUEUE_WAIT_DEFAULT));
+ return new PoolManager(poolDS, dataSourceDescriptor.getMinConnections(),
+ dataSourceDescriptor.getMaxConnections(), dataSourceDescriptor.getUserName(),
+ dataSourceDescriptor.getPassword(), properties.getLong(Constants.SERVER_MAX_QUEUE_WAIT_TIME,
+ PoolManager.MAX_QUEUE_WAIT_DEFAULT));
} catch (Exception e) {
jdbcEventLogger.logConnectFailure(e);
throw e;
}
}
+
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/DriverDataSource.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/DriverDataSource.java?rev=1544990&r1=1544989&r2=1544990&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/DriverDataSource.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/DriverDataSource.java Sun Nov 24 15:13:02 2013
@@ -52,7 +52,9 @@ public class DriverDataSource implements
* Loads JDBC driver using current thread class loader.
*
* @since 3.0
+ * @deprecated since 3.2 as class loading should not happen here.
*/
+ @Deprecated
private static Driver loadDriver(String driverClassName) throws SQLException {
Class<?> driverClass;
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/PoolManager.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/PoolManager.java?rev=1544990&r1=1544989&r2=1544990&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/PoolManager.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/conn/PoolManager.java Sun Nov 24 15:13:02 2013
@@ -56,7 +56,9 @@ public class PoolManager implements Scop
* timed out and was unable to obtain a connection.
*/
public static class ConnectionUnavailableException extends SQLException {
- public ConnectionUnavailableException(String message) {
+ private static final long serialVersionUID = 1063973806941023165L;
+
+ public ConnectionUnavailableException(String message) {
super(message);
}
}
@@ -80,13 +82,20 @@ public class PoolManager implements Scop
/**
* Creates new PoolManager using org.apache.cayenne.conn.PoolDataSource for an
* underlying ConnectionPoolDataSource.
+ *
+ * @deprecated since 3.2 This constructor causes implicit class loading that should avoided.
*/
+ @Deprecated
public PoolManager(String jdbcDriver, String dataSourceUrl, int minCons, int maxCons,
String userName, String password) throws SQLException {
this(jdbcDriver, dataSourceUrl, minCons, maxCons, userName, password, null, MAX_QUEUE_WAIT_DEFAULT);
}
+ /**
+ * @deprecated since 3.2 This constructor causes implicit class loading that should avoided.
+ */
+ @Deprecated
public PoolManager(String jdbcDriver, String dataSourceUrl, int minCons, int maxCons,
String userName, String password, JdbcEventLogger logger, long maxQueueWaitTime) throws SQLException {
@@ -108,7 +117,7 @@ public class PoolManager implements Scop
PoolDataSource poolDS = new PoolDataSource(driverDS);
init(poolDS, minCons, maxCons, userName, password, maxQueueWaitTime);
}
-
+
/**
* Creates new PoolManager with the specified policy for connection pooling and a
* ConnectionPoolDataSource object.
@@ -119,10 +128,28 @@ public class PoolManager implements Scop
* @param maxCons Non-negative integer that specifies maximum number of simultaneuosly
* open connections
* @throws SQLException if pool manager can not be created.
+ * @deprecated since 3.2 use {@link #PoolManager(ConnectionPoolDataSource, int, int, String, String, long)}
*/
public PoolManager(ConnectionPoolDataSource poolDataSource, int minCons, int maxCons,
String userName, String password) throws SQLException {
- init(poolDataSource, minCons, maxCons, userName, password, MAX_QUEUE_WAIT_DEFAULT);
+ this(poolDataSource, minCons, maxCons, userName, password, PoolManager.MAX_QUEUE_WAIT_DEFAULT);
+ }
+
+ /**
+ * Creates new PoolManager with the specified policy for connection pooling and a
+ * ConnectionPoolDataSource object.
+ *
+ * @param poolDataSource data source for pooled connections
+ * @param minCons Non-negative integer that specifies a minimum number of open
+ * connections to keep in the pool at all times
+ * @param maxCons Non-negative integer that specifies maximum number of simultaneuosly
+ * open connections
+ * @throws SQLException if pool manager can not be created.
+ * @since 3.2
+ */
+ public PoolManager(ConnectionPoolDataSource poolDataSource, int minCons, int maxCons,
+ String userName, String password, long maxQueueWaitTime) throws SQLException {
+ init(poolDataSource, minCons, maxCons, userName, password, maxQueueWaitTime);
}
/** Initializes pool. Normally called from constructor. */