killbill-aplcache
Changes
.gitignore 3(+3 -0)
beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java 12(+2 -10)
bin/start-server 4(+2 -2)
server/pom.xml 10(+8 -2)
util/pom.xml 2(+1 -1)
Details
.gitignore 3(+3 -0)
diff --git a/.gitignore b/.gitignore
index 0ee703f..c26b0f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,6 @@ catalog/src/test/resources/CatalogSchema.xsd
server/load
dependency-reduced-pom.xml
dependency-reduced-pom.xml.bak
+server/killbill.h2.db
+server/killbill.lock.db
+server/killbill.trace.db
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java
index 6d9e150..207db47 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java
@@ -20,8 +20,6 @@ import java.io.IOException;
import java.net.URL;
import java.util.Set;
-import org.skife.config.ConfigSource;
-
import org.killbill.billing.DBTestingHelper;
import org.killbill.billing.GuicyKillbillTestWithEmbeddedDBModule;
import org.killbill.billing.account.api.AccountService;
@@ -40,7 +38,6 @@ import org.killbill.billing.beatrix.util.RefundChecker;
import org.killbill.billing.beatrix.util.SubscriptionChecker;
import org.killbill.billing.catalog.api.CatalogService;
import org.killbill.billing.catalog.glue.CatalogModule;
-import org.killbill.commons.embeddeddb.EmbeddedDB;
import org.killbill.billing.currency.glue.CurrencyModule;
import org.killbill.billing.entitlement.EntitlementService;
import org.killbill.billing.entitlement.glue.DefaultEntitlementModule;
@@ -50,7 +47,6 @@ import org.killbill.billing.invoice.generator.InvoiceGenerator;
import org.killbill.billing.invoice.glue.DefaultInvoiceModule;
import org.killbill.billing.junction.glue.DefaultJunctionModule;
import org.killbill.billing.lifecycle.KillbillService;
-import org.killbill.billing.mock.glue.MockGlobalLockerModule;
import org.killbill.billing.osgi.DefaultOSGIService;
import org.killbill.billing.osgi.glue.DefaultOSGIModule;
import org.killbill.billing.overdue.OverdueService;
@@ -77,6 +73,7 @@ import org.killbill.billing.util.glue.NotificationQueueModule;
import org.killbill.billing.util.glue.RecordIdModule;
import org.killbill.billing.util.glue.TagStoreModule;
import org.killbill.billing.util.svcsapi.bus.BusService;
+import org.skife.config.ConfigSource;
import com.google.common.collect.ImmutableSet;
import com.google.inject.AbstractModule;
@@ -103,12 +100,7 @@ public class BeatrixIntegrationModule extends AbstractModule {
loadSystemPropertiesFromClasspath("/beatrix.properties");
install(new GuicyKillbillTestWithEmbeddedDBModule());
-
- if (EmbeddedDB.DBEngine.MYSQL.equals(DBTestingHelper.get().getDBEngine())) {
- install(new GlobalLockerModule());
- } else {
- install(new MockGlobalLockerModule());
- }
+ install(new GlobalLockerModule(DBTestingHelper.get().getDBEngine()));
install(new CacheModule(configSource));
install(new EmailModule(configSource));
install(new CallContextModule());
bin/start-server 4(+2 -2)
diff --git a/bin/start-server b/bin/start-server
index 72e86b4..77711fd 100755
--- a/bin/start-server
+++ b/bin/start-server
@@ -55,8 +55,8 @@ function build_properties() {
local opts=
local prop=
for prop in `cat $PROPERTIES | grep =`; do
- local k=`echo $prop | awk ' BEGIN {FS="="} { print $1 }'`
- local v=`echo $prop | awk 'BEGIN {FS="="} { print $2 }'`
+ local k=`echo $prop | awk 'BEGIN {FS="="} { print $1 }'`
+ local v=`echo $prop | awk 'BEGIN {FS="="} {for (i=2; i<NF; i++) printf $i "="; print $NF}'`
opts="$opts -D$k=$v"
done
echo $opts
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/glue/TestInvoiceModule.java b/invoice/src/test/java/org/killbill/billing/invoice/glue/TestInvoiceModule.java
index 6f0aefa..e601ca8 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/glue/TestInvoiceModule.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/glue/TestInvoiceModule.java
@@ -16,12 +16,12 @@
package org.killbill.billing.invoice.glue;
+import org.killbill.billing.util.glue.MemoryGlobalLockerModule;
import org.mockito.Mockito;
import org.skife.config.ConfigSource;
import org.killbill.billing.catalog.glue.CatalogModule;
import org.killbill.billing.invoice.TestInvoiceHelper;
-import org.killbill.billing.mock.glue.MockGlobalLockerModule;
import org.killbill.billing.util.email.EmailModule;
import org.killbill.billing.util.email.templates.TemplateModule;
import org.killbill.billing.util.glue.CacheModule;
@@ -48,7 +48,7 @@ public class TestInvoiceModule extends DefaultInvoiceModule {
protected void configure() {
super.configure();
install(new CallContextModule());
- install(new MockGlobalLockerModule());
+ install(new MemoryGlobalLockerModule());
install(new CatalogModule(configSource));
install(new CacheModule(configSource));
diff --git a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java
index 2f9be13..2d8d3e7 100644
--- a/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java
+++ b/payment/src/test/java/org/killbill/billing/payment/glue/TestPaymentModule.java
@@ -18,13 +18,13 @@ package org.killbill.billing.payment.glue;
import java.util.UUID;
+import org.killbill.billing.util.glue.MemoryGlobalLockerModule;
import org.mockito.Mockito;
import org.skife.config.ConfigSource;
import org.killbill.billing.ObjectType;
import org.killbill.billing.mock.glue.MockAccountModule;
import org.killbill.billing.mock.glue.MockSubscriptionModule;
-import org.killbill.billing.mock.glue.MockGlobalLockerModule;
import org.killbill.billing.mock.glue.MockInvoiceModule;
import org.killbill.billing.mock.glue.MockNotificationQueueModule;
import org.killbill.billing.payment.TestPaymentHelper;
@@ -68,7 +68,7 @@ public class TestPaymentModule extends PaymentModule {
install(new MockInvoiceModule());
install(new MockAccountModule());
install(new MockSubscriptionModule());
- install(new MockGlobalLockerModule());
+ install(new MemoryGlobalLockerModule());
install(new CacheModule(configSource));
installExternalApis();
server/pom.xml 10(+8 -2)
diff --git a/server/pom.xml b/server/pom.xml
index 5700f3a..8fca5b1 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -88,6 +88,7 @@
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
@@ -263,8 +264,13 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
- <artifactId>killbill-embeddeddb-common</artifactId>
- <version>${killbill-commons.version}</version>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
diff --git a/server/src/main/java/org/killbill/billing/server/dao/EmbeddedDBFactory.java b/server/src/main/java/org/killbill/billing/server/dao/EmbeddedDBFactory.java
new file mode 100644
index 0000000..475800c
--- /dev/null
+++ b/server/src/main/java/org/killbill/billing/server/dao/EmbeddedDBFactory.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2010-2014 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 org.killbill.billing.server.dao;
+
+import java.net.URI;
+
+import org.killbill.billing.server.config.DaoConfig;
+import org.killbill.commons.embeddeddb.EmbeddedDB;
+import org.killbill.commons.embeddeddb.GenericStandaloneDB;
+import org.killbill.commons.embeddeddb.h2.H2EmbeddedDB;
+import org.killbill.commons.embeddeddb.mysql.MySQLStandaloneDB;
+
+public class EmbeddedDBFactory {
+
+ private EmbeddedDBFactory() { }
+
+ public static EmbeddedDB get(final DaoConfig config) {
+ final URI uri = URI.create(config.getJdbcUrl().substring(5));
+
+ final String databaseName;
+ final String schemeLocation;
+ if (uri.getPath() != null) {
+ schemeLocation = null;
+ databaseName = uri.getPath().split("/")[1].split(";")[0];
+ } else if (uri.getSchemeSpecificPart() != null) {
+ final String[] schemeParts = uri.getSchemeSpecificPart().split(":");
+ schemeLocation = schemeParts[0];
+ databaseName = schemeParts[1].split(";")[0];
+ } else {
+ schemeLocation = null;
+ databaseName = null;
+ }
+
+ if ("mysql".equals(uri.getScheme())) {
+ return new MySQLStandaloneDB(databaseName, config.getUsername(), config.getPassword(), config.getJdbcUrl());
+ } else if ("h2".equals(uri.getScheme()) && ("mem".equals(schemeLocation) || "file".equals(schemeLocation))) {
+ return new H2EmbeddedDB(databaseName, config.getUsername(), config.getPassword(), config.getJdbcUrl());
+ } else {
+ return new GenericStandaloneDB(databaseName, config.getUsername(), config.getPassword(), config.getJdbcUrl());
+ }
+ }
+}
diff --git a/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java b/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
index ca796d2..853185d 100644
--- a/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
+++ b/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
@@ -16,6 +16,7 @@
package org.killbill.billing.server.listeners;
+import java.io.IOException;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
@@ -33,6 +34,7 @@ import org.killbill.billing.server.security.TenantFilter;
import org.killbill.billing.util.jackson.ObjectMapper;
import org.killbill.billing.util.svcsapi.bus.BusService;
import org.killbill.bus.api.PersistentBus;
+import org.killbill.commons.embeddeddb.EmbeddedDB;
import org.killbill.commons.skeleton.listeners.GuiceServletContextListener;
import org.killbill.commons.skeleton.modules.BaseServerModuleBuilder;
import org.killbill.commons.skeleton.modules.ConfigModule;
@@ -60,13 +62,15 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
public static final Logger logger = LoggerFactory.getLogger(KillbillGuiceListener.class);
private KillbillServerConfig config;
+ private DaoConfig daoConfig;
private Injector injector;
private DefaultLifecycle killbillLifecycle;
private BusService killbillBusService;
private KillbillEventHandler killbilleventHandler;
+ private EmbeddedDB embeddedDB;
protected Module getModule(final ServletContext servletContext) {
- return new KillbillServerModule(servletContext, config.isTestModeEnabled());
+ return new KillbillServerModule(servletContext, daoConfig, config.isTestModeEnabled());
}
private void registerMBeansForCache(final CacheManager cacheManager) {
@@ -79,6 +83,7 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
@Override
public void contextInitialized(final ServletContextEvent event) {
config = new ConfigurationObjectFactory(System.getProperties()).build(KillbillServerConfig.class);
+ daoConfig = new ConfigurationObjectFactory(System.getProperties()).build(DaoConfig.class);
// Don't filter all requests through Jersey, only the JAX-RS APIs (otherwise,
// things like static resources, favicon, etc. are 404'ed)
@@ -111,6 +116,8 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
killbillLifecycle = injector.getInstance(DefaultLifecycle.class);
killbillBusService = injector.getInstance(BusService.class);
killbilleventHandler = injector.getInstance(KillbillEventHandler.class);
+ // Already started at this point
+ embeddedDB = injector.getInstance(EmbeddedDB.class);
registerMBeansForCache(injector.getInstance(CacheManager.class));
@@ -152,6 +159,13 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
// Complete shutdown sequence
killbillLifecycle.fireShutdownSequencePostEventUnRegistration();
+
+ if (embeddedDB != null) {
+ try {
+ embeddedDB.stop();
+ } catch (final IOException ignored) {
+ }
+ }
}
@VisibleForTesting
diff --git a/server/src/main/java/org/killbill/billing/server/modules/EmbeddedDBProvider.java b/server/src/main/java/org/killbill/billing/server/modules/EmbeddedDBProvider.java
new file mode 100644
index 0000000..bae328c
--- /dev/null
+++ b/server/src/main/java/org/killbill/billing/server/modules/EmbeddedDBProvider.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2010-2014 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 org.killbill.billing.server.modules;
+
+import java.io.IOException;
+
+import javax.inject.Inject;
+
+import org.killbill.billing.server.config.DaoConfig;
+import org.killbill.billing.server.dao.EmbeddedDBFactory;
+import org.killbill.billing.util.io.IOUtils;
+import org.killbill.commons.embeddeddb.EmbeddedDB;
+import org.killbill.commons.embeddeddb.EmbeddedDB.DBEngine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.io.Resources;
+import com.google.inject.Provider;
+
+public class EmbeddedDBProvider implements Provider<EmbeddedDB> {
+
+ private static final Logger logger = LoggerFactory.getLogger(EmbeddedDBProvider.class);
+
+ private final DaoConfig config;
+
+ @Inject
+ public EmbeddedDBProvider(final DaoConfig config) {
+ this.config = config;
+ }
+
+ @Override
+ public EmbeddedDB get() {
+ final EmbeddedDB embeddedDB = EmbeddedDBFactory.get(config);
+
+ if (DBEngine.H2.equals(embeddedDB.getDBEngine())) {
+ try {
+ // Standalone mode?
+ initializeEmbeddedDB(embeddedDB);
+ } catch (final IOException e) {
+ logger.error("Error while initializing H2, opportunistically continuing the startup sequence", e);
+ }
+ }
+
+ return embeddedDB;
+ }
+
+ private void initializeEmbeddedDB(final EmbeddedDB embeddedDB) throws IOException {
+ embeddedDB.initialize();
+ embeddedDB.start();
+
+ // If the tables have not been created yet, do it, otherwise don't clobber them
+ if (!embeddedDB.getAllTables().isEmpty()) {
+ return;
+ }
+
+ for (final String module : new String[]{"account",
+ "beatrix",
+ "entitlement",
+ "invoice",
+ "payment",
+ "subscription",
+ "tenant",
+ "usage",
+ "util"}) {
+ final String ddl = IOUtils.toString(Resources.getResource("org/killbill/billing/" + module + "/ddl.sql").openStream());
+ embeddedDB.executeScript(ddl);
+ }
+ embeddedDB.refreshTableNames();
+ }
+}
diff --git a/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java b/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
index 5bd75a2..d145ce6 100644
--- a/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
+++ b/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
@@ -19,16 +19,9 @@ package org.killbill.billing.server.modules;
import javax.servlet.ServletContext;
import javax.sql.DataSource;
-import org.skife.config.ConfigSource;
-import org.skife.config.SimplePropertyConfigSource;
-import org.skife.jdbi.v2.DBI;
-import org.skife.jdbi.v2.IDBI;
-
import org.killbill.billing.account.glue.DefaultAccountModule;
import org.killbill.billing.beatrix.glue.BeatrixModule;
import org.killbill.billing.catalog.glue.CatalogModule;
-import org.killbill.clock.Clock;
-import org.killbill.clock.ClockMock;
import org.killbill.billing.currency.glue.CurrencyModule;
import org.killbill.billing.entitlement.glue.DefaultEntitlementModule;
import org.killbill.billing.invoice.glue.DefaultInvoiceModule;
@@ -54,6 +47,7 @@ import org.killbill.billing.overdue.glue.DefaultOverdueModule;
import org.killbill.billing.payment.glue.PaymentModule;
import org.killbill.billing.server.DefaultServerService;
import org.killbill.billing.server.ServerService;
+import org.killbill.billing.server.config.DaoConfig;
import org.killbill.billing.server.notifications.PushNotificationListener;
import org.killbill.billing.subscription.glue.DefaultSubscriptionModule;
import org.killbill.billing.tenant.glue.TenantModule;
@@ -69,22 +63,30 @@ import org.killbill.billing.util.glue.CustomFieldModule;
import org.killbill.billing.util.glue.ExportModule;
import org.killbill.billing.util.glue.GlobalLockerModule;
import org.killbill.billing.util.glue.KillBillShiroAopModule;
-import org.killbill.billing.util.glue.MetricsModule;
import org.killbill.billing.util.glue.NonEntityDaoModule;
import org.killbill.billing.util.glue.NotificationQueueModule;
import org.killbill.billing.util.glue.RecordIdModule;
import org.killbill.billing.util.glue.SecurityModule;
import org.killbill.billing.util.glue.TagStoreModule;
+import org.killbill.clock.Clock;
+import org.killbill.clock.ClockMock;
+import org.killbill.commons.embeddeddb.EmbeddedDB;
+import org.skife.config.ConfigSource;
+import org.skife.config.SimplePropertyConfigSource;
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.IDBI;
import com.google.inject.AbstractModule;
public class KillbillServerModule extends AbstractModule {
protected final ServletContext servletContext;
+ private final DaoConfig daoConfig;
private final boolean isTestModeEnabled;
- public KillbillServerModule(final ServletContext servletContext, final boolean testModeEnabled) {
+ public KillbillServerModule(final ServletContext servletContext, final DaoConfig daoConfig, final boolean testModeEnabled) {
this.servletContext = servletContext;
+ this.daoConfig = daoConfig;
this.isTestModeEnabled = testModeEnabled;
}
@@ -144,9 +146,14 @@ public class KillbillServerModule extends AbstractModule {
protected void installKillbillModules() {
final ConfigSource configSource = new SimplePropertyConfigSource(System.getProperties());
+ // TODO Pierre Refactor GlobalLockerModule for this to be a real provider?
+ final EmbeddedDBProvider embeddedDBProvider = new EmbeddedDBProvider(daoConfig);
+ final EmbeddedDB embeddedDB = embeddedDBProvider.get();
+ bind(EmbeddedDB.class).toInstance(embeddedDB);
+
install(new EmailModule(configSource));
install(new CacheModule(configSource));
- install(new GlobalLockerModule());
+ install(new GlobalLockerModule(embeddedDB.getDBEngine()));
install(new CustomFieldModule());
install(new AuditModule());
install(new CatalogModule(configSource));
diff --git a/server/src/main/resources/killbill-server.properties b/server/src/main/resources/killbill-server.properties
index 3d85b58..27b7c9c 100644
--- a/server/src/main/resources/killbill-server.properties
+++ b/server/src/main/resources/killbill-server.properties
@@ -16,7 +16,7 @@
# Use skeleton properties for server and configure killbill database
-org.killbill.dao.url=jdbc:mysql://127.0.0.1:3306/killbill
+org.killbill.dao.url=jdbc:h2:file:killbill;MODE=MYSQL;DB_CLOSE_DELAY=-1;MVCC=true;DB_CLOSE_ON_EXIT=FALSE
org.killbill.dao.user=root
org.killbill.dao.password=root
diff --git a/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
index 62f9b5e..a1845ec 100644
--- a/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
@@ -52,6 +52,7 @@ import org.killbill.billing.osgi.glue.DefaultOSGIModule;
import org.killbill.billing.overdue.glue.DefaultOverdueModule;
import org.killbill.billing.payment.glue.PaymentModule;
import org.killbill.billing.payment.provider.MockPaymentProviderPluginModule;
+import org.killbill.billing.server.config.DaoConfig;
import org.killbill.billing.server.listeners.KillbillGuiceListener;
import org.killbill.billing.server.modules.KillBillShiroWebModule;
import org.killbill.billing.server.modules.KillbillServerModule;
@@ -62,22 +63,20 @@ import org.killbill.billing.util.cache.CacheControllerDispatcher;
import org.killbill.billing.util.config.PaymentConfig;
import org.killbill.billing.util.email.EmailModule;
import org.killbill.billing.util.email.templates.TemplateModule;
-import org.killbill.billing.util.globallocker.TestGlobalLockerModule;
import org.killbill.billing.util.glue.AuditModule;
import org.killbill.billing.util.glue.BusModule;
import org.killbill.billing.util.glue.CacheModule;
import org.killbill.billing.util.glue.CallContextModule;
import org.killbill.billing.util.glue.CustomFieldModule;
import org.killbill.billing.util.glue.ExportModule;
+import org.killbill.billing.util.glue.GlobalLockerModule;
import org.killbill.billing.util.glue.KillBillShiroAopModule;
-import org.killbill.billing.util.glue.MetricsModule;
import org.killbill.billing.util.glue.NonEntityDaoModule;
import org.killbill.billing.util.glue.NotificationQueueModule;
import org.killbill.billing.util.glue.RecordIdModule;
import org.killbill.billing.util.glue.SecurityModule;
import org.killbill.billing.util.glue.TagStoreModule;
import org.killbill.bus.api.PersistentBus;
-import org.killbill.commons.embeddeddb.EmbeddedDB;
import org.skife.config.ConfigSource;
import org.skife.config.ConfigurationObjectFactory;
import org.testng.annotations.AfterMethod;
@@ -103,7 +102,8 @@ public class TestJaxrsBase extends KillbillClient {
protected CacheControllerDispatcher cacheControllerDispatcher;
@Inject
- protected @javax.inject.Named(BeatrixModule.EXTERNAL_BUS) PersistentBus externalBus;
+ protected @javax.inject.Named(BeatrixModule.EXTERNAL_BUS)
+ PersistentBus externalBus;
@Inject
protected PersistentBus internalBus;
@@ -128,16 +128,16 @@ public class TestJaxrsBase extends KillbillClient {
public static class TestKillbillGuiceListener extends KillbillGuiceListener {
- private final EmbeddedDB helper;
+ private final DaoConfig daoConfig;
- public TestKillbillGuiceListener(final EmbeddedDB helper) {
+ public TestKillbillGuiceListener(final DaoConfig daoConfig) {
super();
- this.helper = helper;
+ this.daoConfig = daoConfig;
}
@Override
protected Module getModule(final ServletContext servletContext) {
- return new TestKillbillServerModule(helper, servletContext);
+ return new TestKillbillServerModule(daoConfig, servletContext);
}
}
@@ -156,11 +156,8 @@ public class TestJaxrsBase extends KillbillClient {
public static class TestKillbillServerModule extends KillbillServerModule {
- private final EmbeddedDB helper;
-
- public TestKillbillServerModule(final EmbeddedDB helper, final ServletContext servletContext) {
- super(servletContext, false);
- this.helper = helper;
+ public TestKillbillServerModule(final DaoConfig daoConfig, final ServletContext servletContext) {
+ super(servletContext, daoConfig, false);
}
@Override
@@ -201,7 +198,7 @@ public class TestJaxrsBase extends KillbillClient {
install(new EmailModule(configSource));
install(new CacheModule(configSource));
install(new NonEntityDaoModule());
- install(new TestGlobalLockerModule(DBTestingHelper.get()));
+ install(new GlobalLockerModule(DBTestingHelper.get().getDBEngine()));
install(new CustomFieldModule());
install(new TagStoreModule());
install(new AuditModule());
@@ -310,7 +307,7 @@ public class TestJaxrsBase extends KillbillClient {
loadSystemPropertiesFromClasspath("/killbill.properties");
loadConfig();
- listener = new TestKillbillGuiceListener(helper);
+ listener = new TestKillbillGuiceListener(new ConfigurationObjectFactory(System.getProperties()).build(DaoConfig.class));
server = new HttpServer();
server.configure(config, getListeners(), getFilters());
diff --git a/server/src/test/java/org/killbill/billing/server/dao/TestEmbeddedDBFactory.java b/server/src/test/java/org/killbill/billing/server/dao/TestEmbeddedDBFactory.java
new file mode 100644
index 0000000..05dde7d
--- /dev/null
+++ b/server/src/test/java/org/killbill/billing/server/dao/TestEmbeddedDBFactory.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010-2014 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 org.killbill.billing.server.dao;
+
+import java.util.Properties;
+
+import org.killbill.billing.KillbillTestSuite;
+import org.killbill.billing.server.config.DaoConfig;
+import org.killbill.commons.embeddeddb.EmbeddedDB;
+import org.killbill.commons.embeddeddb.EmbeddedDB.DBEngine;
+import org.skife.config.ConfigurationObjectFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class TestEmbeddedDBFactory extends KillbillTestSuite {
+
+ @Test(groups = "fast")
+ public void testJdbcParser() throws Exception {
+ final EmbeddedDB mysqlEmbeddedDb = EmbeddedDBFactory.get(createDaoConfig("jdbc:mysql://127.0.0.1:3306/killbill", "root", "root"));
+ Assert.assertEquals(mysqlEmbeddedDb.getDBEngine(), DBEngine.MYSQL);
+ checkEmbeddedDb(mysqlEmbeddedDb);
+
+ final EmbeddedDB h2EmbeddedDb = EmbeddedDBFactory.get(createDaoConfig("jdbc:h2:file:killbill;MODE=MYSQL;DB_CLOSE_DELAY=-1;MVCC=true;DB_CLOSE_ON_EXIT=FALSE", "root", "root"));
+ Assert.assertEquals(h2EmbeddedDb.getDBEngine(), DBEngine.H2);
+ checkEmbeddedDb(h2EmbeddedDb);
+
+ final EmbeddedDB genericEmbeddedDb = EmbeddedDBFactory.get(createDaoConfig("jdbc:derby://localhost:1527/killbill;collation=TERRITORY_BASED:PRIMARY", "root", "root"));
+ Assert.assertEquals(genericEmbeddedDb.getDBEngine(), DBEngine.GENERIC);
+ checkEmbeddedDb(genericEmbeddedDb);
+ }
+
+ private void checkEmbeddedDb(final EmbeddedDB embeddedDb) {
+ Assert.assertEquals(embeddedDb.getDatabaseName(), "killbill");
+ Assert.assertEquals(embeddedDb.getUsername(), "root");
+ Assert.assertEquals(embeddedDb.getPassword(), "root");
+ }
+
+ private DaoConfig createDaoConfig(final String url, final String user, final String password) {
+ final Properties properties = new Properties();
+ properties.put("org.killbill.dao.url", url);
+ properties.put("org.killbill.dao.user", user);
+ properties.put("org.killbill.dao.password", password);
+ return new ConfigurationObjectFactory(properties).build(DaoConfig.class);
+ }
+}
util/pom.xml 2(+1 -1)
diff --git a/util/pom.xml b/util/pom.xml
index 50b3ce3..3a2d54b 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -149,7 +149,7 @@
<dependency>
<groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-embeddeddb-common</artifactId>
- <scope>test</scope>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
diff --git a/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java b/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java
index 65faead..3bcd3e8 100644
--- a/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java
+++ b/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java
@@ -16,14 +16,25 @@
package org.killbill.billing.util.glue;
-import org.killbill.commons.locker.GlobalLocker;
+import org.killbill.commons.embeddeddb.EmbeddedDB;
+import org.killbill.commons.embeddeddb.EmbeddedDB.DBEngine;
import com.google.inject.AbstractModule;
public class GlobalLockerModule extends AbstractModule {
+ private final DBEngine engine;
+
+ public GlobalLockerModule(final DBEngine engine) {
+ this.engine = engine;
+ }
+
@Override
protected void configure() {
- bind(GlobalLocker.class).toProvider(MySqlGlobalLockerProvider.class).asEagerSingleton();
+ if (EmbeddedDB.DBEngine.MYSQL.equals(engine)) {
+ install(new MySqlGlobalLockerModule());
+ } else {
+ install(new MemoryGlobalLockerModule());
+ }
}
}
diff --git a/util/src/main/java/org/killbill/billing/util/glue/MySqlGlobalLockerModule.java b/util/src/main/java/org/killbill/billing/util/glue/MySqlGlobalLockerModule.java
new file mode 100644
index 0000000..5c2d426
--- /dev/null
+++ b/util/src/main/java/org/killbill/billing/util/glue/MySqlGlobalLockerModule.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010-2011 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 org.killbill.billing.util.glue;
+
+import org.killbill.commons.locker.GlobalLocker;
+
+import com.google.inject.AbstractModule;
+
+public class MySqlGlobalLockerModule extends AbstractModule {
+
+ @Override
+ protected void configure() {
+ bind(GlobalLocker.class).toProvider(MySqlGlobalLockerProvider.class).asEagerSingleton();
+ }
+}
diff --git a/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleWithEmbeddedDB.java b/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleWithEmbeddedDB.java
index 349f3f8..76c37f8 100644
--- a/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleWithEmbeddedDB.java
+++ b/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleWithEmbeddedDB.java
@@ -21,7 +21,6 @@ import org.skife.config.ConfigSource;
import org.killbill.billing.DBTestingHelper;
import org.killbill.billing.GuicyKillbillTestWithEmbeddedDBModule;
import org.killbill.billing.api.TestApiListener;
-import org.killbill.billing.util.globallocker.TestGlobalLockerModule;
public class TestUtilModuleWithEmbeddedDB extends TestUtilModule {
@@ -41,7 +40,7 @@ public class TestUtilModuleWithEmbeddedDB extends TestUtilModule {
install(new BusModule(configSource));
install(new NotificationQueueModule(configSource));
install(new NonEntityDaoModule());
- install(new TestGlobalLockerModule(DBTestingHelper.get()));
+ install(new GlobalLockerModule(DBTestingHelper.get().getDBEngine()));
bind(TestApiListener.class).asEagerSingleton();
}