killbill-memoizeit

analytics: let old module have its own datasource Signed-off-by:

4/11/2013 9:22:47 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSqlProvider.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSqlProvider.java
index 6c8f872..ff980a6 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSqlProvider.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSqlProvider.java
@@ -18,17 +18,15 @@ package com.ning.billing.analytics.dao;
 
 import org.skife.jdbi.v2.IDBI;
 
-import com.google.inject.Inject;
 import com.google.inject.Provider;
 
 public class BusinessSqlProvider<T> implements Provider<T> {
 
-    @Inject
-    private IDBI dbi;
-
+    private final IDBI dbi;
     private final Class clazz;
 
-    public BusinessSqlProvider(final Class<T> clazz) {
+    public BusinessSqlProvider(final IDBI dbi, final Class<T> clazz) {
+        this.dbi = dbi;
         this.clazz = clazz;
     }
 
diff --git a/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java b/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java
index 0867140..4d96f0a 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java
@@ -17,6 +17,10 @@
 package com.ning.billing.analytics.setup;
 
 import org.skife.config.ConfigSource;
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.tweak.TransactionHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.ning.billing.analytics.AnalyticsListener;
 import com.ning.billing.analytics.BusinessAccountDao;
@@ -47,15 +51,28 @@ import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionSqlDao;
 import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionTagSqlDao;
 import com.ning.billing.analytics.dao.DefaultAnalyticsDao;
 import com.ning.billing.analytics.dao.DefaultAnalyticsSanityDao;
+import com.ning.billing.util.dao.DateTimeArgumentFactory;
+import com.ning.billing.util.dao.DateTimeZoneArgumentFactory;
+import com.ning.billing.util.dao.EnumArgumentFactory;
+import com.ning.billing.util.dao.LocalDateArgumentFactory;
+import com.ning.billing.util.dao.UUIDArgumentFactory;
+import com.ning.billing.util.dao.UuidMapper;
 
 import com.google.inject.AbstractModule;
+import com.mchange.v2.c3p0.ComboPooledDataSource;
 
 public class AnalyticsModule extends AbstractModule {
 
+    private static final Logger logger = LoggerFactory.getLogger(AnalyticsModule.class);
+
+    public static final String ANALYTICS_DBI_CONFIG_STRING = "com.ning.billing.analytics.dbi.";
+
     protected final ConfigSource configSource;
+    protected final DBI dbi;
 
     public AnalyticsModule(final ConfigSource configSource) {
         this.configSource = configSource;
+        this.dbi = createDBI(configSource);
     }
 
     @Override
@@ -81,26 +98,54 @@ public class AnalyticsModule extends AbstractModule {
 
     protected void installAnalyticsDao() {
         bind(AnalyticsDao.class).to(DefaultAnalyticsDao.class).asEagerSingleton();
-        bind(AnalyticsSanityDao.class).to(DefaultAnalyticsSanityDao.class).asEagerSingleton();
+        bind(AnalyticsSanityDao.class).toInstance(new DefaultAnalyticsSanityDao(dbi));
         bind(BusinessSubscriptionTransitionDao.class).asEagerSingleton();
         bind(BusinessAccountDao.class).asEagerSingleton();
         bind(BusinessTagDao.class).asEagerSingleton();
     }
 
     protected void installAnalyticsSqlDao() {
-        bind(BusinessAccountSqlDao.class).toProvider(new BusinessSqlProvider<BusinessAccountSqlDao>(BusinessAccountSqlDao.class));
-        bind(BusinessAccountTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessAccountTagSqlDao>(BusinessAccountTagSqlDao.class));
-        bind(BusinessAccountFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessAccountFieldSqlDao>(BusinessAccountFieldSqlDao.class));
-        bind(BusinessInvoiceFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceFieldSqlDao>(BusinessInvoiceFieldSqlDao.class));
-        bind(BusinessInvoiceItemSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceItemSqlDao>(BusinessInvoiceItemSqlDao.class));
-        bind(BusinessInvoicePaymentFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoicePaymentFieldSqlDao>(BusinessInvoicePaymentFieldSqlDao.class));
-        bind(BusinessInvoicePaymentSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoicePaymentSqlDao>(BusinessInvoicePaymentSqlDao.class));
-        bind(BusinessInvoicePaymentTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoicePaymentTagSqlDao>(BusinessInvoicePaymentTagSqlDao.class));
-        bind(BusinessInvoiceSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceSqlDao>(BusinessInvoiceSqlDao.class));
-        bind(BusinessInvoiceTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceTagSqlDao>(BusinessInvoiceTagSqlDao.class));
-        bind(BusinessOverdueStatusSqlDao.class).toProvider(new BusinessSqlProvider<BusinessOverdueStatusSqlDao>(BusinessOverdueStatusSqlDao.class));
-        bind(BusinessSubscriptionTransitionFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessSubscriptionTransitionFieldSqlDao>(BusinessSubscriptionTransitionFieldSqlDao.class));
-        bind(BusinessSubscriptionTransitionSqlDao.class).toProvider(new BusinessSqlProvider<BusinessSubscriptionTransitionSqlDao>(BusinessSubscriptionTransitionSqlDao.class));
-        bind(BusinessSubscriptionTransitionTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessSubscriptionTransitionTagSqlDao>(BusinessSubscriptionTransitionTagSqlDao.class));
+        bind(BusinessAccountSqlDao.class).toProvider(new BusinessSqlProvider<BusinessAccountSqlDao>(dbi, BusinessAccountSqlDao.class));
+        bind(BusinessAccountTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessAccountTagSqlDao>(dbi, BusinessAccountTagSqlDao.class));
+        bind(BusinessAccountFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessAccountFieldSqlDao>(dbi, BusinessAccountFieldSqlDao.class));
+        bind(BusinessInvoiceFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceFieldSqlDao>(dbi, BusinessInvoiceFieldSqlDao.class));
+        bind(BusinessInvoiceItemSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceItemSqlDao>(dbi, BusinessInvoiceItemSqlDao.class));
+        bind(BusinessInvoicePaymentFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoicePaymentFieldSqlDao>(dbi, BusinessInvoicePaymentFieldSqlDao.class));
+        bind(BusinessInvoicePaymentSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoicePaymentSqlDao>(dbi, BusinessInvoicePaymentSqlDao.class));
+        bind(BusinessInvoicePaymentTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoicePaymentTagSqlDao>(dbi, BusinessInvoicePaymentTagSqlDao.class));
+        bind(BusinessInvoiceSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceSqlDao>(dbi, BusinessInvoiceSqlDao.class));
+        bind(BusinessInvoiceTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessInvoiceTagSqlDao>(dbi, BusinessInvoiceTagSqlDao.class));
+        bind(BusinessOverdueStatusSqlDao.class).toProvider(new BusinessSqlProvider<BusinessOverdueStatusSqlDao>(dbi, BusinessOverdueStatusSqlDao.class));
+        bind(BusinessSubscriptionTransitionFieldSqlDao.class).toProvider(new BusinessSqlProvider<BusinessSubscriptionTransitionFieldSqlDao>(dbi, BusinessSubscriptionTransitionFieldSqlDao.class));
+        bind(BusinessSubscriptionTransitionSqlDao.class).toProvider(new BusinessSqlProvider<BusinessSubscriptionTransitionSqlDao>(dbi, BusinessSubscriptionTransitionSqlDao.class));
+        bind(BusinessSubscriptionTransitionTagSqlDao.class).toProvider(new BusinessSqlProvider<BusinessSubscriptionTransitionTagSqlDao>(dbi, BusinessSubscriptionTransitionTagSqlDao.class));
+    }
+
+    private DBI createDBI(final ConfigSource configSource) {
+        final ComboPooledDataSource dataSource = new ComboPooledDataSource();
+        dataSource.setJdbcUrl(configSource.getString(ANALYTICS_DBI_CONFIG_STRING + "url"));
+        dataSource.setUser(configSource.getString(ANALYTICS_DBI_CONFIG_STRING + "user"));
+        dataSource.setPassword(configSource.getString(ANALYTICS_DBI_CONFIG_STRING + "password"));
+        dataSource.setMinPoolSize(1);
+        dataSource.setMaxPoolSize(10);
+        dataSource.setCheckoutTimeout(10 * 1000);
+        dataSource.setMaxIdleTime(60 * 60);
+        dataSource.setMaxConnectionAge(0);
+        dataSource.setIdleConnectionTestPeriod(5 * 60);
+
+        final DBI dbi = new DBI(dataSource);
+        dbi.registerArgumentFactory(new UUIDArgumentFactory());
+        dbi.registerArgumentFactory(new DateTimeZoneArgumentFactory());
+        dbi.registerArgumentFactory(new DateTimeArgumentFactory());
+        dbi.registerArgumentFactory(new LocalDateArgumentFactory());
+        dbi.registerArgumentFactory(new EnumArgumentFactory());
+        dbi.registerMapper(new UuidMapper());
+        try {
+            dbi.setTransactionHandler((TransactionHandler) Class.forName("com.ning.jetty.jdbi.RestartTransactionRunner").newInstance());
+        } catch (Exception e) {
+            logger.warn("Unable to register transaction handler");
+        }
+
+        return dbi;
     }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java
index 3629261..fc15e87 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java
@@ -40,7 +40,9 @@ import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionFieldSqlDao;
 import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionSqlDao;
 import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionTagSqlDao;
 import com.ning.billing.analytics.glue.TestAnalyticsModuleWithEmbeddedDB;
+import com.ning.billing.analytics.setup.AnalyticsModule;
 import com.ning.billing.catalog.api.CatalogService;
+import com.ning.billing.dbi.DBTestingHelper;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.invoice.dao.InvoiceDao;
@@ -129,6 +131,10 @@ public abstract class AnalyticsTestSuiteWithEmbeddedDB extends GuicyKillbillTest
 
     @BeforeClass(groups = "slow")
     protected void beforeClass() throws Exception {
+        configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "url", getDBTestingHelper().getJdbcConnectionString());
+        configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "user", DBTestingHelper.USERNAME);
+        configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "password", DBTestingHelper.PASSWORD);
+
         final Injector injector = Guice.createInjector(new TestAnalyticsModuleWithEmbeddedDB(configSource));
         injector.injectMembers(this);
     }
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index 9c83c43..bdef87f 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -40,6 +40,7 @@ import com.ning.billing.account.api.AccountService;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.analytics.AnalyticsListener;
 import com.ning.billing.analytics.api.user.DefaultAnalyticsUserApi;
+import com.ning.billing.analytics.setup.AnalyticsModule;
 import com.ning.billing.api.TestApiListener;
 import com.ning.billing.api.TestApiListener.NextEvent;
 import com.ning.billing.api.TestListenerStatus;
@@ -57,6 +58,7 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.dbi.DBTestingHelper;
 import com.ning.billing.entitlement.api.EntitlementService;
 import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
 import com.ning.billing.entitlement.api.transfer.EntitlementTransferApi;
@@ -226,6 +228,10 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
 
     @BeforeClass(groups = "slow")
     public void beforeClass() throws Exception {
+        configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "url", getDBTestingHelper().getJdbcConnectionString());
+        configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "user", DBTestingHelper.USERNAME);
+        configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "password", DBTestingHelper.PASSWORD);
+
         final Injector g = Guice.createInjector(Stage.PRODUCTION, new BeatrixIntegrationModule(configSource));
         g.injectMembers(this);
         busHandler = new TestApiListener(this);
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
index b2882cf..e132e4e 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
@@ -30,13 +30,13 @@ import org.eclipse.jetty.servlet.FilterHolder;
 import org.joda.time.LocalDate;
 import org.skife.config.ConfigSource;
 import org.skife.config.ConfigurationObjectFactory;
-import org.skife.config.SimplePropertyConfigSource;
 import org.testng.annotations.AfterSuite;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.BeforeSuite;
 
 import com.ning.billing.GuicyKillbillTestWithEmbeddedDBModule;
+import com.ning.billing.KillbillConfigSource;
 import com.ning.billing.account.glue.DefaultAccountModule;
 import com.ning.billing.analytics.setup.AnalyticsModule;
 import com.ning.billing.api.TestApiListener;
@@ -171,7 +171,7 @@ public class TestJaxrsBase extends KillbillClient {
 
         @Override
         protected void installKillbillModules() {
-            final ConfigSource configSource = new SimplePropertyConfigSource(System.getProperties());
+            final KillbillConfigSource configSource = new KillbillConfigSource(System.getProperties());
 
             /*
              * For a lack of getting module override working, copy all install modules from parent class...
@@ -180,6 +180,10 @@ public class TestJaxrsBase extends KillbillClient {
             Modules.override(new com.ning.billing.payment.setup.PaymentModule()).with(new PaymentMockModule());
             */
 
+            configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "url", helper.getJdbcConnectionString());
+            configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "user", DBTestingHelper.USERNAME);
+            configSource.setProperty(AnalyticsModule.ANALYTICS_DBI_CONFIG_STRING + "password", DBTestingHelper.PASSWORD);
+
             install(new GuicyKillbillTestWithEmbeddedDBModule());
 
 
diff --git a/util/src/test/java/com/ning/billing/KillbillConfigSource.java b/util/src/test/java/com/ning/billing/KillbillConfigSource.java
index cf95af2..0382a6e 100644
--- a/util/src/test/java/com/ning/billing/KillbillConfigSource.java
+++ b/util/src/test/java/com/ning/billing/KillbillConfigSource.java
@@ -27,14 +27,18 @@ public class KillbillConfigSource implements ConfigSource {
     private final Properties properties;
 
     public KillbillConfigSource() {
-        properties = new Properties(System.getProperties());
-        properties.put("user.timezone", "UTC");
+        this(System.getProperties());
+    }
+
+    public KillbillConfigSource(final Properties properties) {
+        this.properties = new Properties(properties);
+        this.properties.put("user.timezone", "UTC");
 
         // Speed up the notification queue
-        properties.put("killbill.billing.util.notificationq.sleep", "100");
+        this.properties.put("killbill.billing.util.notificationq.sleep", "100");
         // Speed up the bus
-        properties.put("killbill.billing.util.persistent.bus.sleep", "100");
-        properties.put("killbill.billing.util.persistent.bus.nbThreads", "1");
+        this.properties.put("killbill.billing.util.persistent.bus.sleep", "100");
+        this.properties.put("killbill.billing.util.persistent.bus.nbThreads", "1");
     }
 
     public String getString(final String propertyName) {