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) {