Author: rmannibucau
Date: Tue Jul 24 15:35:02 2012
New Revision: 1365136
URL: http://svn.apache.org/viewvc?rev=1365136&view=rev
Log:
refactoring datasourcecreator to manage their own recipes. adding bonecp module
Added:
openejb/branches/openejb-pool/server/openejb-bonecp/
openejb/branches/openejb-pool/server/openejb-bonecp/pom.xml
openejb/branches/openejb-pool/server/openejb-bonecp/src/
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/openejb/
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/openejb/bonecp/
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/openejb/bonecp/BoneCPDataSourceCreator.java
openejb/branches/openejb-pool/server/openejb-bonecp/src/test/
openejb/branches/openejb-pool/server/openejb-bonecp/src/test/java/
Modified:
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/dbcp/DbcpDataSourceCreator.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/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/server/pom.xml
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/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=1365136&r1=1365135&r2=1365136&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 15:35:02 2012
@@ -67,13 +67,13 @@ public class DataSourceFactory {
if (managed) {
if (useDbcp(properties)) {
- ds = creator.poolManaged(name, dataSource);
+ ds = creator.poolManaged(name, dataSource, properties);
} else {
- ds = creator.managed(name, dataSource);
+ ds = creator.managed(name, dataSource, properties);
}
} else {
if (useDbcp(properties)) {
- ds = creator.pool(name, dataSource);
+ ds = creator.pool(name, dataSource, properties);
} else {
ds = dataSource;
}
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/DbcpDataSourceCreator.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/DbcpDataSourceCreator.java?rev=1365136&r1=1365135&r2=1365136&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/DbcpDataSourceCreator.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/DbcpDataSourceCreator.java
Tue Jul 24 15:35:02 2012
@@ -1,8 +1,6 @@
package org.apache.openejb.resource.jdbc.dbcp;
import org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator;
-import org.apache.xbean.recipe.ObjectRecipe;
-import org.apache.xbean.recipe.Option;
import javax.sql.DataSource;
import java.util.Properties;
@@ -11,22 +9,18 @@ import java.util.Properties;
// this one will probably not be used since dbcp has already the integration
we need
public class DbcpDataSourceCreator extends PoolDataSourceCreator {
@Override
- public DataSource pool(final String name, final DataSource ds) {
- return new DbcpDataSource(name, ds);
+ public DataSource pool(final String name, final DataSource ds, Properties
properties) {
+ return build(DbcpDataSource.class, new DbcpDataSource(name, ds),
properties);
}
@Override
public DataSource pool(final String name, final String driver, final
Properties properties) {
- final ObjectRecipe serviceRecipe = new
ObjectRecipe(BasicDataSource.class.getName());
- serviceRecipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
- serviceRecipe.allow(Option.IGNORE_MISSING_PROPERTIES);
- serviceRecipe.setProperty("name", name);
if (!properties.containsKey("JdbcDriver")) {
properties.setProperty("driverClassName", driver);
}
- serviceRecipe.setAllProperties(properties);
+ properties.setProperty("name", name);
- final BasicDataSource ds = (BasicDataSource) serviceRecipe.create();
// new BasicDataSource(name);
+ final BasicDataSource ds = build(BasicDataSource.class, properties);
ds.setDriverClassName(driver);
return ds;
}
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=1365136&r1=1365135&r2=1365136&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 15:35:02 2012
@@ -12,8 +12,8 @@ import java.util.Properties;
// in fact all managed method are done through the previous abstraction
public interface DataSourceCreator {
DataSource managed(String name, DataSource ds);
- DataSource poolManaged(String name, DataSource ds);
- DataSource pool(String name, DataSource ds);
+ DataSource poolManaged(String name, DataSource ds, Properties properties);
+ DataSource pool(String name, DataSource ds, Properties properties);
DataSource poolManagedWithRecovery(String name, XAResourceWrapper
xaResourceWrapper, String driver, Properties properties);
DataSource poolManaged(String name, String driver, Properties properties);
DataSource pool(String name, String driver, Properties properties);
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=1365136&r1=1365135&r2=1365136&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 15:35:02 2012
@@ -11,13 +11,13 @@ import javax.sql.DataSource;
import java.util.Properties;
public class DefaultDataSourceCreator implements DataSourceCreator {
- @Override // TODO: remove dbcp from here
+ @Override
public DataSource managed(final String name, final DataSource ds) {
return new DbcpManagedDataSource(name, ds);
}
@Override
- public DataSource poolManaged(final String name, final DataSource ds) {
+ public DataSource poolManaged(final String name, final DataSource ds,
Properties properties) {
return new DbcpManagedDataSource(name, ds);
}
@@ -36,7 +36,7 @@ public class DefaultDataSourceCreator im
}
@Override
- public DataSource pool(final String name, final DataSource ds) {
+ public DataSource pool(final String name, final DataSource ds, Properties
properties) {
return new DbcpDataSource(name, ds);
}
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=1365136&r1=1365135&r2=1365136&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 15:35:02 2012
@@ -5,6 +5,9 @@ import org.apache.openejb.resource.Trans
import org.apache.openejb.resource.XAResourceWrapper;
import org.apache.openejb.resource.jdbc.managed.local.ManagedDataSource;
import org.apache.openejb.resource.jdbc.managed.xa.ManagedXADataSource;
+import org.apache.openejb.util.PassthroughFactory;
+import org.apache.xbean.recipe.ObjectRecipe;
+import org.apache.xbean.recipe.Option;
import javax.sql.DataSource;
import javax.sql.XADataSource;
@@ -32,8 +35,8 @@ public abstract class PoolDataSourceCrea
}
@Override
- public DataSource poolManaged(final String name, final DataSource ds) {
- return managed(name, pool(name, ds));
+ public DataSource poolManaged(final String name, final DataSource ds,
final Properties properties) {
+ return managed(name, pool(name, ds, properties));
}
@Override
@@ -51,4 +54,27 @@ public abstract class PoolDataSourceCrea
}
protected abstract void doDestroy(DataSource dataSource) throws Throwable;
+
+ protected <T> T build(final Class<T> clazz, final Properties properties) {
+ final ObjectRecipe serviceRecipe = new ObjectRecipe(clazz);
+ recipeOptions(serviceRecipe);
+ serviceRecipe.setAllProperties(properties);
+ return (T) serviceRecipe.create();
+ }
+
+ protected <T> T build(final Class<T> clazz, final Object instance, final
Properties properties) {
+ final ObjectRecipe recipe = new ObjectRecipe(PassthroughFactory.class);
+ final String param = "instance" + recipe.hashCode();
+ recipe.setFactoryMethod("create");
+ recipe.setConstructorArgNames(new String[]{ param });
+ recipe.setProperty(param, instance);
+ recipeOptions(recipe);
+ recipe.setAllProperties(properties);
+ return (T) recipe.create();
+ }
+
+ private void recipeOptions(final ObjectRecipe recipe) {
+ recipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
+ recipe.allow(Option.IGNORE_MISSING_PROPERTIES);
+ }
}
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=1365136&r1=1365135&r2=1365136&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 15:35:02 2012
@@ -56,7 +56,7 @@ public class CustomPoolDataSourceTest {
}
@Override
- public DataSource pool(String name, DataSource ds) {
+ public DataSource pool(String name, DataSource ds, Properties
properties) {
throw new UnsupportedOperationException();
}
Added: openejb/branches/openejb-pool/server/openejb-bonecp/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/server/openejb-bonecp/pom.xml?rev=1365136&view=auto
==============================================================================
--- openejb/branches/openejb-pool/server/openejb-bonecp/pom.xml (added)
+++ openejb/branches/openejb-pool/server/openejb-bonecp/pom.xml Tue Jul 24
15:35:02 2012
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>server</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>4.1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>openejb-bonecp</artifactId>
+ <name>OpenEJB :: Server :: BoneCP</name>
+
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-core</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.jolbox</groupId>
+ <artifactId>bonecp</artifactId>
+ <version>0.7.1.RELEASE</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
Added:
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/openejb/bonecp/BoneCPDataSourceCreator.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/openejb/bonecp/BoneCPDataSourceCreator.java?rev=1365136&view=auto
==============================================================================
---
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/openejb/bonecp/BoneCPDataSourceCreator.java
(added)
+++
openejb/branches/openejb-pool/server/openejb-bonecp/src/main/java/org/apache/openejb/bonecp/BoneCPDataSourceCreator.java
Tue Jul 24 15:35:02 2012
@@ -0,0 +1,62 @@
+package org.apache.openejb.bonecp;
+
+import com.jolbox.bonecp.BoneCP;
+import com.jolbox.bonecp.BoneCPConfig;
+import com.jolbox.bonecp.BoneCPDataSource;
+import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator;
+
+import javax.sql.DataSource;
+import java.lang.reflect.Field;
+import java.util.Properties;
+
+public class BoneCPDataSourceCreator extends PoolDataSourceCreator {
+ @Override
+ protected void doDestroy(final DataSource dataSource) throws Throwable {
+ ((BoneCPDataSource) dataSource).close();
+ }
+
+ @Override
+ public DataSource pool(final String name, final DataSource ds, final
Properties properties) {
+ final BoneCPConfig config;
+ final BoneCP pool;
+ try {
+ config = new BoneCPConfig(properties);
+ pool = new BoneCP(config);
+ } catch (Exception e) {
+ throw new IllegalArgumentException(e);
+ }
+ return new BoneCPDataSourceProvidedPool(pool);
+ }
+
+ @Override
+ public DataSource pool(final String name, final String driver, final
Properties properties) {
+ final BoneCPDataSource ds = build(BoneCPDataSource.class, properties);
+ if (ds.getDriverClass() == null || ds.getDriverClass().isEmpty()) {
+ ds.setDriverClass(driver);
+ }
+ if (ds.getPoolName() == null || ds.getPoolName().isEmpty()) {
+ ds.setPoolName(name);
+ }
+ return ds;
+ }
+
+ private static final class BoneCPDataSourceProvidedPool extends
BoneCPDataSource {
+ private static final Field POOL_FIELD;
+ static {
+ try {
+ POOL_FIELD = BoneCPDataSource.class.getDeclaredField("pool");
+ } catch (NoSuchFieldException e) {
+ throw new OpenEJBRuntimeException(e);
+ }
+ }
+
+ public BoneCPDataSourceProvidedPool(final BoneCP pool) {
+ try {
+ POOL_FIELD.set(this, pool);
+ } catch (IllegalAccessException e) {
+ throw new OpenEJBRuntimeException(e);
+ }
+ }
+ }
+}
Modified: openejb/branches/openejb-pool/server/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/server/pom.xml?rev=1365136&r1=1365135&r2=1365136&view=diff
==============================================================================
--- openejb/branches/openejb-pool/server/pom.xml (original)
+++ openejb/branches/openejb-pool/server/pom.xml Tue Jul 24 15:35:02 2012
@@ -44,6 +44,7 @@
<module>openejb-rest</module>
<module>openejb-ssh</module>
<module>openejb-common-cli</module>
+ <module>openejb-bonecp</module>
</modules>
</project>
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=1365136&r1=1365135&r2=1365136&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 15:35:02 2012
@@ -2,17 +2,28 @@ package org.apache.tomee.jdbc;
import org.apache.openejb.monitoring.LocalMBeanServer;
import org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator;
+import org.apache.tomcat.jdbc.pool.ConnectionPool;
import org.apache.tomcat.jdbc.pool.DataSourceFactory;
+import org.apache.tomcat.jdbc.pool.PoolConfiguration;
+import org.apache.tomcat.jdbc.pool.PoolProperties;
import javax.management.ObjectName;
import javax.sql.DataSource;
+import java.sql.SQLException;
import java.util.Map;
import java.util.Properties;
public class TomEEDataSourceCreator extends PoolDataSourceCreator {
@Override
- public DataSource pool(final String name, final DataSource ds) {
- return new TomcatDbcpDataSource(ds);
+ public DataSource pool(final String name, final DataSource ds, Properties
properties) {
+ final PoolConfiguration config = build(PoolProperties.class,
properties);
+ final ConnectionPool pool;
+ try {
+ pool = new ConnectionPool(config);
+ } catch (SQLException e) {
+ throw new IllegalStateException(e);
+ }
+ return build(TomEEDataSource.class, new TomEEDataSource(pool),
properties);
}
@Override
@@ -51,16 +62,18 @@ public class TomEEDataSourceCreator exte
@Override
public void doDestroy(final DataSource object) throws Throwable {
- if (object instanceof TomcatDbcpDataSource) {
- ((TomcatDbcpDataSource) object).close();
- } else {
- org.apache.tomcat.jdbc.pool.DataSource ds =
(org.apache.tomcat.jdbc.pool.DataSource) object;
- ds.close(true);
- ds.postDeregister();
- }
+ org.apache.tomcat.jdbc.pool.DataSource ds =
(org.apache.tomcat.jdbc.pool.DataSource) object;
+ ds.close(true);
+ ds.postDeregister();
}
private static class PropertiesReader extends DataSourceFactory {
public static final String[] KEYS = ALL_PROPERTIES;
}
+
+ public static class TomEEDataSource extends
org.apache.tomcat.jdbc.pool.DataSource {
+ public TomEEDataSource(final ConnectionPool pool) {
+ this.pool = pool;
+ }
+ }
}