Author: rmannibucau
Date: Sat Jul 21 21:05:51 2012
New Revision: 1364170
URL: http://svn.apache.org/viewvc?rev=1364170&view=rev
Log:
TOMEE-336 small refactoring of datasourcefactory + ability to skip dbcp pool
for datasource definition for datasource already pooled
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/PropertiesHelper.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1364170&r1=1364169&r2=1364170&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Sat Jul 21 21:05:51 2012
@@ -119,6 +119,7 @@ import org.apache.openejb.core.transacti
import org.apache.openejb.core.transaction.TransactionType;
import org.apache.openejb.javaagent.Agent;
import org.apache.openejb.jpa.integration.MakeTxLookup;
+import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.JarLocation;
import org.apache.openejb.loader.Options;
import org.apache.openejb.loader.ProvisioningUtil;
@@ -141,6 +142,7 @@ import org.apache.openejb.util.LogCatego
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.Messages;
import org.apache.openejb.util.OpenEJBErrorHandler;
+import org.apache.openejb.util.PropertiesHelper;
import org.apache.openejb.util.References;
import org.apache.openejb.util.SafeToolkit;
import org.apache.openejb.util.proxy.ProxyFactory;
@@ -1573,6 +1575,7 @@ public class Assembler extends Assembler
serviceRecipe.setProperty("transactionManager", transactionManager);
serviceRecipe.setProperty("ServiceId", serviceInfo.id);
serviceRecipe.setProperty("properties", new UnsetPropertiesRecipe());
+ serviceRecipe.setProperty("Definition",
PropertiesHelper.propertiesToString(serviceInfo.properties));
replaceResourceAdapterProperty(serviceRecipe);
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java?rev=1364170&r1=1364169&r2=1364170&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java
Sat Jul 21 21:05:51 2012
@@ -16,7 +16,6 @@
*/
package org.apache.openejb.resource.jdbc;
-import org.apache.commons.dbcp.SQLNestedException;
import org.apache.xbean.finder.ResourceFinder;
import java.io.BufferedReader;
@@ -55,8 +54,7 @@ public final class BasicDataSourceUtil {
// create the plugin
try {
Class pluginClass = Class.forName(pluginClassName);
- DataSourcePlugin plugin = (DataSourcePlugin)
pluginClass.newInstance();
- return plugin;
+ return (DataSourcePlugin) pluginClass.newInstance();
} catch (ClassNotFoundException e) {
throw new SQLException("Unable to load data source helper class '"
+ pluginClassName + "' for database '" + vendor + "'");
} catch (Exception e) {
@@ -97,7 +95,7 @@ public final class BasicDataSourceUtil {
*/
public static PasswordCipher getPasswordCipher(String passwordCipherClass)
throws SQLException {
// Load the password cipher class
- Class<? extends PasswordCipher> pwdCipher = null;
+ Class<? extends PasswordCipher> pwdCipher;
// try looking for implementation in
/META-INF/org.apache.openejb.resource.jdbc.PasswordCipher
ResourceFinder finder = new ResourceFinder("META-INF/");
@@ -109,7 +107,7 @@ public final class BasicDataSourceUtil {
String message =
"Password cipher '" + passwordCipherClass +
"' not found in
META-INF/org.apache.openejb.resource.jdbc.PasswordCipher.";
- throw new SQLNestedException(message, t);
+ throw ((SQLException) new SQLException(message, t).initCause(t));
}
pwdCipher = impls.get(passwordCipherClass);
@@ -137,18 +135,17 @@ public final class BasicDataSourceUtil {
}
} catch (Throwable t) {
String message = "Cannot load password cipher class '" +
passwordCipherClass + "'";
- throw new SQLNestedException(message, t);
+ throw ((SQLException) new SQLException(message,
t).initCause(t));
}
}
// Create an instance
- PasswordCipher cipher = null;
+ PasswordCipher cipher;
try {
cipher = pwdCipher.newInstance();
-
} catch (Throwable t) {
String message = "Cannot create password cipher instance";
- throw new SQLNestedException(message, t);
+ throw ((SQLException) new SQLException(message, t).initCause(t));
}
return cipher;
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java?rev=1364170&r1=1364169&r2=1364170&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
Sat Jul 21 21:05:51 2012
@@ -41,36 +41,41 @@ import java.util.Properties;
* @version $Rev$ $Date$
*/
public class DataSourceFactory {
+ public static final String POOL_PROPERTY = "openejb.datasource.pool";
public static DataSource create(final String name, final boolean managed,
final Class impl, final String definition) throws IllegalAccessException,
InstantiationException, IOException {
- final org.apache.commons.dbcp.BasicDataSource ds;
+ final DataSource ds;
if (DataSource.class.isAssignableFrom(impl) &&
!SystemInstance.get().getOptions().get("org.apache.openejb.resource.jdbc.hot.deploy",
false)) {
+ final Properties properties = asProperties(definition);
+
final ObjectRecipe recipe = new ObjectRecipe(impl);
recipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
recipe.allow(Option.IGNORE_MISSING_PROPERTIES);
recipe.allow(Option.NAMED_PARAMETERS);
- recipe.setAllProperties(asProperties(definition));
+ recipe.setAllProperties(properties);
DataSource dataSource = (DataSource) recipe.create();
if (managed) {
ds = new DbcpManagedDataSource(name, dataSource);
} else {
- ds = new DbcpDataSource(name, dataSource);
+ if
("true".equalsIgnoreCase(properties.getProperty(POOL_PROPERTY, "true"))) {
+ ds = new DbcpDataSource(name, dataSource);
+ } else {
+ ds = dataSource;
+ }
}
} else {
- ds = (org.apache.commons.dbcp.BasicDataSource) create(name,
managed);
- // force the driver class to be set
- ds.setDriverClassName(impl.getName());
+ ds = create(name, managed, impl.getName());
}
return ds;
}
- private static Map<?, ?> asProperties(String definition) throws
IOException {
+ private static Properties asProperties(String definition) throws
IOException {
final Properties properties = IO.readProperties(IO.read(definition),
new Properties());
trimNotSupportedDataSourceProperties(properties);
return properties;
@@ -80,7 +85,7 @@ public class DataSourceFactory {
properties.remove("LoginTimeout");
}
- public static DataSource create(String name, boolean managed) {
+ public static DataSource create(String name, boolean managed, String
driver) {
org.apache.commons.dbcp.BasicDataSource ds;
if (managed) {
XAResourceWrapper xaResourceWrapper =
SystemInstance.get().getComponent(XAResourceWrapper.class);
@@ -92,6 +97,8 @@ public class DataSourceFactory {
} else {
ds = new BasicDataSource(name);
}
+ // force the driver class to be set
+ ds.setDriverClassName(driver);
return ds;
}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/PropertiesHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/PropertiesHelper.java?rev=1364170&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/PropertiesHelper.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/PropertiesHelper.java
Sat Jul 21 21:05:51 2012
@@ -0,0 +1,24 @@
+package org.apache.openejb.util;
+
+import java.io.ByteArrayOutputStream;
+import java.util.Properties;
+
+public final class PropertiesHelper {
+ private PropertiesHelper() {
+ // no-op
+ }
+
+ public static String propertiesToString(final Properties p) {
+ if (p == null) {
+ return "";
+ }
+
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ p.store(baos, "");
+ } catch (Exception ignored) {
+ // no-op
+ }
+ return new String(baos.toByteArray());
+ }
+}