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
new file mode 100644
index 0000000..5d988df
--- /dev/null
+++ b/server/src/main/java/com/ning/billing/server/modules/DBIProvider.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.server.modules;
+
+import java.util.concurrent.TimeUnit;
+
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.TimingCollector;
+import org.skife.jdbi.v2.tweak.SQLLog;
+import org.skife.jdbi.v2.tweak.TransactionHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.ning.jetty.jdbi.config.DaoConfig;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.jolbox.bonecp.BoneCPConfig;
+import com.jolbox.bonecp.BoneCPDataSource;
+import com.yammer.metrics.core.MetricsRegistry;
+import com.yammer.metrics.jdbi.InstrumentedTimingCollector;
+import com.yammer.metrics.jdbi.strategies.BasicSqlNameStrategy;
+
+public class DBIProvider implements Provider<DBI> {
+
+ private static final Logger logger = LoggerFactory.getLogger(DBIProvider.class);
+
+ private final MetricsRegistry metricsRegistry;
+ private final DaoConfig config;
+ private SQLLog sqlLog;
+
+ @Inject
+ public DBIProvider(final MetricsRegistry metricsRegistry, final DaoConfig config) {
+ this.metricsRegistry = metricsRegistry;
+ this.config = config;
+ }
+
+ @Inject(optional = true)
+ public void setSqlLog(final SQLLog sqlLog) {
+ this.sqlLog = sqlLog;
+ }
+
+ @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 DBI dbi = new DBI(ds);
+ dbi.registerArgumentFactory(new UUIDArgumentFactory());
+ dbi.registerArgumentFactory(new DateTimeZoneArgumentFactory());
+ dbi.registerArgumentFactory(new DateTimeArgumentFactory());
+ dbi.registerArgumentFactory(new LocalDateArgumentFactory());
+ dbi.registerArgumentFactory(new EnumArgumentFactory());
+ dbi.registerMapper(new UuidMapper());
+
+ if (sqlLog != null) {
+ dbi.setSQLLog(sqlLog);
+ }
+
+ if (config.getTransactionHandlerClass() != null) {
+ logger.info("Using " + config.getTransactionHandlerClass() + " as a transaction handler class");
+ try {
+ dbi.setTransactionHandler((TransactionHandler) Class.forName(config.getTransactionHandlerClass()).newInstance());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ final BasicSqlNameStrategy basicSqlNameStrategy = new BasicSqlNameStrategy();
+ final TimingCollector timingCollector = new InstrumentedTimingCollector(metricsRegistry, basicSqlNameStrategy, TimeUnit.MILLISECONDS, TimeUnit.SECONDS);
+ dbi.setTimingCollector(timingCollector);
+
+ return dbi;
+ }
+}
diff --git a/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java b/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
index 5a25746..0bed99d 100644
--- a/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
+++ b/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
@@ -16,7 +16,6 @@
package com.ning.billing.server.modules;
-
import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.IDBI;
@@ -55,11 +54,11 @@ import com.ning.billing.util.glue.ExportModule;
import com.ning.billing.util.glue.GlobalLockerModule;
import com.ning.billing.util.glue.NotificationQueueModule;
import com.ning.billing.util.glue.TagStoreModule;
-import com.ning.jetty.jdbi.guice.providers.DBIProvider;
import com.google.inject.AbstractModule;
public class KillbillServerModule extends AbstractModule {
+
@Override
protected void configure() {
configureDao();
@@ -68,17 +67,15 @@ public class KillbillServerModule extends AbstractModule {
configurePushNotification();
}
-
protected void configurePushNotification() {
bind(ServerService.class).to(DefaultServerService.class).asEagerSingleton();
bind(PushNotificationListener.class).asEagerSingleton();
}
-
protected void configureDao() {
// Load mysql driver if needed
try {
- Class.forName ("com.mysql.jdbc.Driver").newInstance ();
+ Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (final Exception ignore) {
}
bind(IDBI.class).to(DBI.class).asEagerSingleton();