Author: rmannibucau
Date: Tue Jul 24 11:33:04 2012
New Revision: 1364984

URL: http://svn.apache.org/viewvc?rev=1364984&view=rev
Log:
the datasourcefactory knows if possible and delegate the destroy of a 
datasource to the creator

Modified:
    
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
    
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
    
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
    
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
    
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
    
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/CustomPoolDataSourceTest.java
    
openejb/branches/openejb-pool/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java

Modified: 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Tue Jul 24 11:33:04 2012
@@ -131,6 +131,7 @@ import org.apache.openejb.observer.Obser
 import org.apache.openejb.persistence.JtaEntityManagerRegistry;
 import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
 import org.apache.openejb.resource.GeronimoConnectionManagerFactory;
+import org.apache.openejb.resource.jdbc.DataSourceFactory;
 import org.apache.openejb.resource.jdbc.pool.DataSourceCreator;
 import org.apache.openejb.spi.ApplicationServer;
 import org.apache.openejb.spi.ContainerSystem;
@@ -1112,11 +1113,11 @@ public class Assembler extends Assembler
             } catch (Throwable t) {
                 logger.fatal("ResourceAdapter Shutdown Failed: " + name, t);
             }
-        } else if 
(SystemInstance.get().getComponent(DataSourceCreator.class).hasCreated(object)) 
{
+        } else if (DataSourceFactory.canBeDestroyed(object)) {
             logger.info("Closing DataSource: " + name);
 
             try {
-                
SystemInstance.get().getComponent(DataSourceCreator.class).destroy(object);
+                DataSourceFactory.destroy(object);
             } catch (Throwable t) {
                 //Ignore
             }

Modified: 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
 (original)
+++ 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
 Tue Jul 24 11:33:04 2012
@@ -27,6 +27,8 @@ import org.apache.xbean.recipe.Option;
 
 import javax.sql.DataSource;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Properties;
 
 /**
@@ -38,11 +40,14 @@ public class DataSourceFactory {
     public static final String POOL_PROPERTY = "openejb.datasource.pool";
     public static final String DATA_SOURCE_CREATOR_PROP = "DataSourceCreator";
 
+    private static final Map<DataSource, DataSourceCreator> 
creatorByDataSource = new HashMap<DataSource, DataSourceCreator>();
+
     public static DataSource create(final String name, final boolean managed, 
final Class impl, final String definition) throws IllegalAccessException, 
InstantiationException, IOException {
         final Properties properties = asProperties(definition);
         final DataSourceCreator creator = creator(properties);
 
 
+        final DataSource ds;
         if (createDataSourceFromClass(impl)) { // opposed to "by driver"
             trimNotSupportedDataSourceProperties(properties);
 
@@ -56,29 +61,32 @@ public class DataSourceFactory {
 
             if (managed) {
                 if (useDbcp(properties)) {
-                    return creator.poolManaged(name, dataSource);
+                    ds = creator.poolManaged(name, dataSource);
                 } else {
-                    return creator.managed(name, dataSource);
+                    ds = creator.managed(name, dataSource);
                 }
             } else {
                 if (useDbcp(properties)) {
-                    return creator.pool(name, dataSource);
+                    ds = creator.pool(name, dataSource);
                 } else {
-                    return dataSource;
+                    ds = dataSource;
                 }
             }
         } else { // by driver
             if (managed) {
                 final XAResourceWrapper xaResourceWrapper = 
SystemInstance.get().getComponent(XAResourceWrapper.class);
                 if (xaResourceWrapper != null) {
-                    return creator.poolManagedWithRecovery(name, 
xaResourceWrapper, impl.getName(), properties);
+                    ds = creator.poolManagedWithRecovery(name, 
xaResourceWrapper, impl.getName(), properties);
                 } else {
-                    return creator.poolManaged(name, impl.getName(), 
properties);
+                    ds = creator.poolManaged(name, impl.getName(), properties);
                 }
             } else {
-                return creator.pool(name, impl.getName(), properties);
+                ds = creator.pool(name, impl.getName(), properties);
             }
         }
+
+        creatorByDataSource.put(ds, creator);
+        return ds;
     }
 
     private static DataSourceCreator creator(final Properties properties) {
@@ -109,4 +117,15 @@ public class DataSourceFactory {
     public static void trimNotSupportedDataSourceProperties(Properties 
properties) {
         properties.remove("LoginTimeout");
     }
+
+    public static boolean canBeDestroyed(final Object object) {
+        if (!(object instanceof DataSource)) {
+            return false;
+        }
+        return creatorByDataSource.containsKey(object);
+    }
+
+    public static void destroy(final Object o) throws Throwable {
+        creatorByDataSource.remove(o).destroy(o);
+    }
 }

Modified: 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
 (original)
+++ 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
 Tue Jul 24 11:33:04 2012
@@ -18,6 +18,5 @@ public interface DataSourceCreator {
     DataSource poolManaged(String name, String driver, Properties properties);
     DataSource pool(String name, String driver, Properties properties);
 
-    boolean hasCreated(Object object);
     void destroy(Object object) throws Throwable;
 }

Modified: 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
 (original)
+++ 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
 Tue Jul 24 11:33:04 2012
@@ -33,11 +33,6 @@ public class DbcpDataSourceCreator exten
     }
 
     @Override
-    protected boolean hasReallyCreated(Object object) {
-        return object instanceof org.apache.commons.dbcp.BasicDataSource;
-    }
-
-    @Override
     protected void doDestroy(DataSource dataSource) throws Throwable {
         ((org.apache.commons.dbcp.BasicDataSource) dataSource).close();
     }

Modified: 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
 (original)
+++ 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
 Tue Jul 24 11:33:04 2012
@@ -48,11 +48,6 @@ public class DefaultDataSourceCreator im
     }
 
     @Override
-    public boolean hasCreated(final Object object) {
-        return object instanceof org.apache.commons.dbcp.BasicDataSource;
-    }
-
-    @Override
     public void destroy(final Object object) throws Throwable {
         ((org.apache.commons.dbcp.BasicDataSource) object).close();
     }

Modified: 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
 (original)
+++ 
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
 Tue Jul 24 11:33:04 2012
@@ -42,13 +42,6 @@ public abstract class PoolDataSourceCrea
     }
 
     @Override
-    public boolean hasCreated(final Object object) {
-        return hasReallyCreated(object) || object instanceof ManagedDataSource;
-    }
-
-    protected abstract boolean hasReallyCreated(final Object object);
-
-    @Override
     public void destroy(final Object object) throws Throwable {
         if (object instanceof ManagedDataSource) {
             doDestroy(((ManagedDataSource) object).getDelegate());

Modified: 
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/CustomPoolDataSourceTest.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/CustomPoolDataSourceTest.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/CustomPoolDataSourceTest.java
 (original)
+++ 
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/CustomPoolDataSourceTest.java
 Tue Jul 24 11:33:04 2012
@@ -1,40 +1,22 @@
 package org.apache.openejb.resource.jdbc;
 
 import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.SingletonBean;
 import org.apache.openejb.junit.ApplicationComposer;
 import org.apache.openejb.junit.Configuration;
 import org.apache.openejb.junit.Module;
-import org.apache.openejb.resource.jdbc.managed.local.ManagedConnection;
-import org.apache.openejb.resource.jdbc.pool.DbcpDataSourceCreator;
 import org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator;
-import org.junit.After;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import javax.annotation.Resource;
-import javax.ejb.EJB;
-import javax.ejb.EJBContext;
-import javax.ejb.LocalBean;
-import javax.ejb.Singleton;
-import javax.ejb.TransactionAttribute;
-import javax.ejb.TransactionAttributeType;
 import javax.sql.DataSource;
-import java.lang.reflect.Field;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Map;
 import java.util.Properties;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
@@ -69,11 +51,6 @@ public class CustomPoolDataSourceTest {
 
     public static class CustomCreator extends PoolDataSourceCreator {
         @Override
-        protected boolean hasReallyCreated(final Object object) {
-            return false; // no need
-        }
-
-        @Override
         protected void doDestroy(final DataSource dataSource) throws Throwable 
{
             throw new UnsupportedOperationException();
         }

Modified: 
openejb/branches/openejb-pool/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java?rev=1364984&r1=1364983&r2=1364984&view=diff
==============================================================================
--- 
openejb/branches/openejb-pool/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
 (original)
+++ 
openejb/branches/openejb-pool/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
 Tue Jul 24 11:33:04 2012
@@ -49,12 +49,6 @@ public class TomEEDataSourceCreator exte
     }
 
     @Override
-    public boolean hasReallyCreated(final Object object) {
-        return object instanceof org.apache.tomcat.jdbc.pool.DataSource
-                || object instanceof TomcatDbcpDataSource;
-    }
-
-    @Override
     public void doDestroy(final DataSource object) throws Throwable {
         if (object instanceof TomcatDbcpDataSource) {
             ((TomcatDbcpDataSource) object).close();


Reply via email to