killbill-memoizeit

Details

pom.xml 8(+7 -1)

diff --git a/pom.xml b/pom.xml
index f7bcf1e..98c8388 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,8 @@
   ~ under the License.
   -->
 
-<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">
+<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>
         <groupId>org.sonatype.oss</groupId>
         <artifactId>oss-parent</artifactId>
@@ -274,6 +275,11 @@
                 </exclusions>
             </dependency>
             <dependency>
+                <groupId>com.mchange</groupId>
+                <artifactId>c3p0</artifactId>
+                <version>0.9.2</version>
+            </dependency>
+            <dependency>
                 <groupId>com.fasterxml.jackson.core</groupId>
                 <artifactId>jackson-core</artifactId>
                 <version>2.0.0</version>
diff --git a/server/src/main/java/com/ning/billing/server/modules/DBIProvider.java b/server/src/main/java/com/ning/billing/server/modules/DBIProvider.java
index e67b929..5d86c2b 100644
--- a/server/src/main/java/com/ning/billing/server/modules/DBIProvider.java
+++ b/server/src/main/java/com/ning/billing/server/modules/DBIProvider.java
@@ -18,6 +18,8 @@ package com.ning.billing.server.modules;
 
 import java.util.concurrent.TimeUnit;
 
+import javax.sql.DataSource;
+
 import org.skife.jdbi.v2.DBI;
 import org.skife.jdbi.v2.TimingCollector;
 import org.skife.jdbi.v2.tweak.SQLLog;
@@ -37,6 +39,7 @@ import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.jolbox.bonecp.BoneCPConfig;
 import com.jolbox.bonecp.BoneCPDataSource;
+import com.mchange.v2.c3p0.ComboPooledDataSource;
 import com.yammer.metrics.core.MetricsRegistry;
 import com.yammer.metrics.jdbi.InstrumentedTimingCollector;
 import com.yammer.metrics.jdbi.strategies.BasicSqlNameStrategy;
@@ -62,21 +65,8 @@ public class DBIProvider implements Provider<DBI> {
 
     @Override
     public DBI get() {
-        final BoneCPConfig dbConfig = new BoneCPConfig();
-        dbConfig.setJdbcUrl(config.getJdbcUrl());
-        dbConfig.setUsername(config.getUsername());
-        dbConfig.setPassword(config.getPassword());
-        dbConfig.setMinConnectionsPerPartition(config.getMinIdle());
-        dbConfig.setMaxConnectionsPerPartition(config.getMaxActive());
-        dbConfig.setConnectionTimeout(config.getConnectionTimeout().getPeriod(), config.getConnectionTimeout().getUnit());
-        dbConfig.setIdleMaxAge(config.getIdleMaxAge().getPeriod(), config.getIdleMaxAge().getUnit());
-        dbConfig.setMaxConnectionAge(config.getMaxConnectionAge().getPeriod(), config.getMaxConnectionAge().getUnit());
-        dbConfig.setIdleConnectionTestPeriod(config.getIdleConnectionTestPeriod().getPeriod(), config.getIdleConnectionTestPeriod().getUnit());
-        dbConfig.setPartitionCount(1);
-        dbConfig.setDefaultTransactionIsolation("READ_COMMITTED");
-        dbConfig.setDisableJMX(false);
 
-        final BoneCPDataSource ds = new BoneCPDataSource(dbConfig);
+        final DataSource ds = getC3P0DataSource();
         final DBI dbi = new DBI(ds);
         dbi.registerArgumentFactory(new UUIDArgumentFactory());
         dbi.registerArgumentFactory(new DateTimeZoneArgumentFactory());
@@ -104,4 +94,33 @@ public class DBIProvider implements Provider<DBI> {
 
         return dbi;
     }
+
+
+    private DataSource getBoneCPDatSource() {
+        final BoneCPConfig dbConfig = new BoneCPConfig();
+        dbConfig.setJdbcUrl(config.getJdbcUrl());
+        dbConfig.setUsername(config.getUsername());
+        dbConfig.setPassword(config.getPassword());
+        dbConfig.setMinConnectionsPerPartition(config.getMinIdle());
+        dbConfig.setMaxConnectionsPerPartition(config.getMaxActive());
+        dbConfig.setConnectionTimeout(config.getConnectionTimeout().getPeriod(), config.getConnectionTimeout().getUnit());
+        dbConfig.setIdleMaxAge(config.getIdleMaxAge().getPeriod(), config.getIdleMaxAge().getUnit());
+        dbConfig.setMaxConnectionAge(config.getMaxConnectionAge().getPeriod(), config.getMaxConnectionAge().getUnit());
+        dbConfig.setIdleConnectionTestPeriod(config.getIdleConnectionTestPeriod().getPeriod(), config.getIdleConnectionTestPeriod().getUnit());
+        dbConfig.setPartitionCount(1);
+        dbConfig.setDisableJMX(false);
+
+        final BoneCPDataSource ds = new BoneCPDataSource(dbConfig);
+        return ds;
+    }
+
+    private DataSource getC3P0DataSource() {
+        ComboPooledDataSource cpds = new ComboPooledDataSource();
+        cpds.setJdbcUrl(config.getJdbcUrl());
+        cpds.setUser(config.getUsername());
+        cpds.setPassword(config.getPassword());
+        cpds.setMinPoolSize(1);
+        cpds.setMaxPoolSize(10);
+        return cpds;
+    }
 }

util/pom.xml 4(+4 -0)

diff --git a/util/pom.xml b/util/pom.xml
index 4905af0..628050b 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -34,6 +34,10 @@
             <artifactId>bonecp</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.mchange</groupId>
+            <artifactId>c3p0</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.jdbi</groupId>
             <artifactId>jdbi</artifactId>
         </dependency>
diff --git a/util/src/main/java/com/ning/billing/util/bus/PersistentInternalBus.java b/util/src/main/java/com/ning/billing/util/bus/PersistentInternalBus.java
index f2fa6ab..cc8d4b0 100644
--- a/util/src/main/java/com/ning/billing/util/bus/PersistentInternalBus.java
+++ b/util/src/main/java/com/ning/billing/util/bus/PersistentInternalBus.java
@@ -24,6 +24,7 @@ import java.util.concurrent.ThreadFactory;
 
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.Transaction;
+import org.skife.jdbi.v2.TransactionIsolationLevel;
 import org.skife.jdbi.v2.TransactionStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -171,7 +172,7 @@ public class PersistentInternalBus extends PersistentQueueBase implements Intern
 
     @Override
     public void post(final BusInternalEvent event, final InternalCallContext context) throws EventBusException {
-        dao.inTransaction(new Transaction<Void, PersistentBusSqlDao>() {
+        dao.inTransaction(TransactionIsolationLevel.READ_COMMITTED, new Transaction<Void, PersistentBusSqlDao>() {
             @Override
             public Void inTransaction(final PersistentBusSqlDao transactional,
                                       final TransactionStatus status) throws Exception {
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java
index 35098ca..9b6933b 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java
@@ -18,6 +18,7 @@ package com.ning.billing.util.entity.dao;
 
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.Transaction;
+import org.skife.jdbi.v2.TransactionIsolationLevel;
 import org.skife.jdbi.v2.TransactionStatus;
 
 import com.ning.billing.util.cache.CacheControllerDispatcher;
@@ -67,6 +68,6 @@ public class EntitySqlDaoTransactionalJdbiWrapper {
      */
     public <ReturnType> ReturnType execute(final EntitySqlDaoTransactionWrapper<ReturnType> entitySqlDaoTransactionWrapper) {
         final EntitySqlDao<EntityModelDao<Entity>, Entity> entitySqlDao = dbi.onDemand(InitialEntitySqlDao.class);
-        return entitySqlDao.inTransaction(new JdbiTransaction<ReturnType, EntityModelDao<Entity>, Entity>(entitySqlDaoTransactionWrapper));
+        return entitySqlDao.inTransaction(TransactionIsolationLevel.READ_COMMITTED, new JdbiTransaction<ReturnType, EntityModelDao<Entity>, Entity>(entitySqlDaoTransactionWrapper));
     }
 }
diff --git a/util/src/test/java/com/ning/billing/dbi/DBIProvider.java b/util/src/test/java/com/ning/billing/dbi/DBIProvider.java
index b66f87d..a54ee30 100644
--- a/util/src/test/java/com/ning/billing/dbi/DBIProvider.java
+++ b/util/src/test/java/com/ning/billing/dbi/DBIProvider.java
@@ -18,6 +18,8 @@ package com.ning.billing.dbi;
 
 import java.util.concurrent.TimeUnit;
 
+import javax.sql.DataSource;
+
 import org.skife.jdbi.v2.DBI;
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.tweak.transactions.SerializableTransactionRunner;
@@ -33,38 +35,28 @@ import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.jolbox.bonecp.BoneCPConfig;
 import com.jolbox.bonecp.BoneCPDataSource;
+import com.mchange.v2.c3p0.ComboPooledDataSource;
 
 public class DBIProvider implements Provider<IDBI> {
 
-    private final BoneCPConfig dbConfig;
+    private final String jdbcUri;
+    private final String userName;
+    private final String userPwd;
 
     @Inject
     public DBIProvider(final DbiConfig config) {
         this(config.getJdbcUrl(), config.getUsername(), config.getPassword());
     }
 
-    public DBIProvider(final String dbiString, final String userName, final String pwd) {
-        this.dbConfig = createConfig(dbiString, userName, pwd);
-    }
-
-    BoneCPConfig createConfig(final String dbiString, final String userName, final String pwd) {
-        final BoneCPConfig dbConfig = new BoneCPConfig();
-        dbConfig.setJdbcUrl(dbiString);
-        dbConfig.setUsername(userName);
-        dbConfig.setPassword(pwd);
-        dbConfig.setMinConnectionsPerPartition(1);
-        dbConfig.setMaxConnectionsPerPartition(30);
-        dbConfig.setConnectionTimeout(10, TimeUnit.SECONDS);
-        dbConfig.setPartitionCount(1);
-        dbConfig.setDefaultTransactionIsolation("REPEATABLE_READ");
-        dbConfig.setDisableJMX(false);
-        dbConfig.setLazyInit(true);
-        return dbConfig;
+    public DBIProvider(final String jdbcUri, final String userName, final String userPwd) {
+        this.jdbcUri = jdbcUri;
+        this.userName = userName;
+        this.userPwd = userPwd;
     }
 
     @Override
     public IDBI get() {
-        final BoneCPDataSource ds = new BoneCPDataSource(dbConfig);
+        final DataSource ds = getC3P0DataSource();
         final DBI dbi = new DBI(ds);
         dbi.registerArgumentFactory(new UUIDArgumentFactory());
         dbi.registerArgumentFactory(new DateTimeZoneArgumentFactory());
@@ -80,4 +72,29 @@ public class DBIProvider implements Provider<IDBI> {
 
         return dbi;
     }
+
+
+
+    private DataSource getBoneCPDatSource() {
+        final BoneCPConfig dbConfig = new BoneCPConfig();
+        dbConfig.setJdbcUrl(jdbcUri);
+        dbConfig.setUsername(userName);
+        dbConfig.setPassword(userPwd);
+        dbConfig.setPartitionCount(1);
+        //dbConfig.setDefaultTransactionIsolation("READ_COMMITTED");
+        dbConfig.setDisableJMX(false);
+
+        final BoneCPDataSource ds = new BoneCPDataSource(dbConfig);
+        return ds;
+    }
+
+    private DataSource getC3P0DataSource() {
+        ComboPooledDataSource cpds = new ComboPooledDataSource();
+        cpds.setJdbcUrl(jdbcUri);
+        cpds.setUser(userName);
+        cpds.setPassword(userPwd);
+        cpds.setMinPoolSize(1);
+        cpds.setMaxPoolSize(10);
+        return cpds;
+    }
 }