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());
+    }
+}


Reply via email to