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