You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2010/04/07 21:52:28 UTC
svn commit: r931658 - in /geronimo/server/trunk/plugins/connector-1_6:
geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/
geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/datasource/deployment/
Author: gawor
Date: Wed Apr 7 19:52:27 2010
New Revision: 931658
URL: http://svn.apache.org/viewvc?rev=931658&view=rev
Log:
GERONIMO-5113: Support (or at least try to support) transaction isolation level & url properties
Modified:
geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceDescription.java
geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceGBean.java
geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/datasource/deployment/DataSourceBuilder.java
Modified: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceDescription.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceDescription.java?rev=931658&r1=931657&r2=931658&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceDescription.java (original)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceDescription.java Wed Apr 7 19:52:27 2010
@@ -40,6 +40,7 @@ public class DataSourceDescription imple
// transaction settings
private boolean transactional = true;
+ private int isolationLevel = -1;
// pool settings
private int initialPoolSize = -1;
@@ -136,6 +137,14 @@ public class DataSourceDescription imple
this.transactional = transactional;
}
+ public int getIsolationLevel() {
+ return isolationLevel;
+ }
+
+ public void setIsolationLevel(int isolationLevel) {
+ this.isolationLevel = isolationLevel;
+ }
+
public Map<String, String> getProperties() {
return properties;
}
@@ -184,6 +193,14 @@ public class DataSourceDescription imple
this.maxStatements = maxStatements;
}
+ public boolean hasStandardProperties() {
+ return (databaseName != null
+ || password != null
+ || user != null
+ || portNumber != -1
+ || !(serverName != null && serverName.equals("localhost")));
+ }
+
public boolean hasPoolingProperties() {
return (maxPoolSize != -1
|| minPoolSize != -1
@@ -191,5 +208,5 @@ public class DataSourceDescription imple
|| initialPoolSize != -1
|| maxStatements != -1);
}
-
+
}
Modified: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceGBean.java?rev=931658&r1=931657&r2=931658&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceGBean.java (original)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/datasource/DataSourceGBean.java Wed Apr 7 19:52:27 2010
@@ -17,13 +17,16 @@
package org.apache.geronimo.datasource;
+import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.resource.ResourceException;
import javax.resource.spi.ManagedConnectionFactory;
+import javax.security.auth.Subject;
import javax.sql.ConnectionPoolDataSource;
import javax.sql.DataSource;
+import javax.sql.XAConnection;
import javax.sql.XADataSource;
import org.apache.geronimo.connector.outbound.GenericConnectionManager;
@@ -50,6 +53,7 @@ import org.apache.xbean.recipe.Option;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.tranql.connector.CredentialExtractor;
import org.tranql.connector.NoExceptionsAreFatalSorter;
import org.tranql.connector.jdbc.AbstractLocalDataSourceMCF;
import org.tranql.connector.jdbc.AbstractPooledConnectionDataSourceMCF;
@@ -87,6 +91,7 @@ public class DataSourceGBean implements
String dsName = dataSourceDescription.getName();
String dsClass = dataSourceDescription.getClassName();
+ String dsJndiName = getOsgiJndiName();
TransactionSupport transactionSupport;
PoolingSupport pooling;
@@ -137,7 +142,7 @@ public class DataSourceGBean implements
connectionRegistration = new ConnectionFactoryRegistration(connectionManager,
bundleContext,
abstractName,
- getOsgiJndiName(),
+ dsJndiName,
new String [] { DataSource.class.getName() });
}
@@ -147,19 +152,27 @@ public class DataSourceGBean implements
Map<String, Object> properties = new HashMap<String, Object>();
- // TODO: handle "url" property somehow
- // TODO: handle "isolationType" property somehow
-
// standard settings
setProperty(properties, "description", dataSourceDescription.getDescription());
setProperty(properties, "user", dataSourceDescription.getUser());
setProperty(properties, "password", dataSourceDescription.getPassword());
setProperty(properties, "databaseName", dataSourceDescription.getDatabaseName());
+ setProperty(properties, "serverName", dataSourceDescription.getServerName());
if (dataSourceDescription.getPortNumber() != -1) {
setProperty(properties, "portNumber", dataSourceDescription.getPortNumber());
- }
- setProperty(properties, "serverName", dataSourceDescription.getServerName());
+ }
setProperty(properties, "loginTimeout", dataSourceDescription.getLoginTimeout());
+
+ /*
+ * XXX: Not really sure how deal with url property.
+ * We can't really parse it so pass it as a property to data source.
+ */
+
+ // set url property if no specific properties are set
+ if (dataSourceDescription.hasStandardProperties()) {
+ setProperty(properties, "url", dataSourceDescription.getUrl());
+ }
+
// other properties
if (dataSourceDescription.getProperties() != null) {
properties.putAll(dataSourceDescription.getProperties());
@@ -253,6 +266,21 @@ public class DataSourceGBean implements
public String getUserName() {
return dataSourceDescription.getUser();
}
+
+ @Override
+ protected XAConnection getPhysicalConnection(Subject subject, CredentialExtractor credentialExtractor)
+ throws ResourceException {
+ XAConnection connection = super.getPhysicalConnection(subject, credentialExtractor);
+ int isolationLevel = dataSourceDescription.getIsolationLevel();
+ if (isolationLevel != -1) {
+ try {
+ connection.getConnection().setTransactionIsolation(isolationLevel);
+ } catch (SQLException e) {
+ throw new ResourceException("Error setting transaction isolation level for ", dataSourceDescription.getName());
+ }
+ }
+ return connection;
+ }
}
private class LocalDataSourceMCF extends AbstractLocalDataSourceMCF {
Modified: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/datasource/deployment/DataSourceBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/datasource/deployment/DataSourceBuilder.java?rev=931658&r1=931657&r2=931658&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/datasource/deployment/DataSourceBuilder.java (original)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/datasource/deployment/DataSourceBuilder.java Wed Apr 7 19:52:27 2010
@@ -17,6 +17,7 @@
package org.apache.geronimo.datasource.deployment;
+import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -332,7 +333,20 @@ public class DataSourceBuilder extends A
}
if (ds.isSetIsolationLevel()) {
- // dsDefinition.setIsolationLevel(ds.getIsolationLevel().intValue());
+ switch (ds.getIsolationLevel().intValue()) {
+ case IsolationLevelType.INT_TRANSACTION_READ_COMMITTED:
+ dsDescription.setIsolationLevel(Connection.TRANSACTION_READ_COMMITTED);
+ break;
+ case IsolationLevelType.INT_TRANSACTION_READ_UNCOMMITTED:
+ dsDescription.setIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED);
+ break;
+ case IsolationLevelType.INT_TRANSACTION_REPEATABLE_READ:
+ dsDescription.setIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ);
+ break;
+ case IsolationLevelType.INT_TRANSACTION_SERIALIZABLE:
+ dsDescription.setIsolationLevel(Connection.TRANSACTION_SERIALIZABLE);
+ break;
+ }
}
// pool properties