killbill-aplcache
Changes
osgi/pom.xml 4(+4 -0)
osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java 6(+3 -3)
osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillAPI.java 32(+2 -30)
osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillDataSource.java 50(+50 -0)
osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillEventDispatcher.java 95(+95 -0)
osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillRegistrar.java 4(+1 -3)
osgi-bundles/tests/beatrix/pom.xml 12(+0 -12)
Details
diff --git a/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java b/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java
index b9a7adc..646afd9 100644
--- a/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java
+++ b/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java
@@ -16,12 +16,9 @@
package com.ning.billing.osgi.api;
-import javax.sql.DataSource;
-
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.analytics.api.sanity.AnalyticsSanityApi;
import com.ning.billing.analytics.api.user.AnalyticsUserApi;
-import com.ning.billing.beatrix.bus.api.ExternalBus;
import com.ning.billing.catalog.api.CatalogUserApi;
import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi;
import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
@@ -51,32 +48,42 @@ public interface OSGIKillbill {
* @return the matching API
*/
public AccountUserApi getAccountUserApi();
+
public AnalyticsSanityApi getAnalyticsSanityApi();
+
public AnalyticsUserApi getAnalyticsUserApi();
+
public CatalogUserApi getCatalogUserApi();
+
public EntitlementMigrationApi getEntitlementMigrationApi();
+
public EntitlementTimelineApi getEntitlementTimelineApi();
+
public EntitlementTransferApi getEntitlementTransferApi();
+
public EntitlementUserApi getEntitlementUserApi();
+
public InvoiceMigrationApi getInvoiceMigrationApi();
+
public InvoicePaymentApi getInvoicePaymentApi();
+
public InvoiceUserApi getInvoiceUserApi();
+
public OverdueUserApi getOverdueUserApi();
+
public PaymentApi getPaymentApi();
+
public TenantUserApi getTenantUserApi();
+
public UsageUserApi getUsageUserApi();
+
public AuditUserApi getAuditUserApi();
+
public CustomFieldUserApi getCustomFieldUserApi();
- public ExportUserApi getExportUserApi();
- public TagUserApi getTagUserApi();
- /**
- * Used by the OSGI bundles to register interest into Killbill events
- *
- * @return the externalBus
- */
- public ExternalBus getExternalBus();
+ public ExportUserApi getExportUserApi();
+ public TagUserApi getTagUserApi();
/**
* Used by the OSGI bundles to discover their configuration
@@ -84,11 +91,4 @@ public interface OSGIKillbill {
* @return the PluginConfigServiceApi
*/
public PluginConfigServiceApi getPluginConfigServiceApi();
-
-
- /**
- * Used by the OSGI bundles to be able to access their own sql tables
- * @return the dataSource for the OSGI bundles
- */
- public DataSource getDataSource();
}
osgi/pom.xml 4(+4 -0)
diff --git a/osgi/pom.xml b/osgi/pom.xml
index 5dea1e9..ea8b687 100644
--- a/osgi/pom.xml
+++ b/osgi/pom.xml
@@ -53,6 +53,10 @@
<artifactId>killbill-util</artifactId>
</dependency>
<dependency>
+ <groupId>com.ning.billing</groupId>
+ <artifactId>killbill-osgi-bundles-lib-killbill</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<scope>provided</scope>
diff --git a/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java b/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java
index 519465f..ea43446 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java
@@ -23,7 +23,6 @@ import javax.sql.DataSource;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.analytics.api.sanity.AnalyticsSanityApi;
import com.ning.billing.analytics.api.user.AnalyticsUserApi;
-import com.ning.billing.beatrix.bus.api.ExternalBus;
import com.ning.billing.catalog.api.CatalogUserApi;
import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi;
import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
@@ -65,15 +64,10 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
private final CustomFieldUserApi customFieldUserApi;
private final ExportUserApi exportUserApi;
private final TagUserApi tagUserApi;
-
- private final ExternalBus externalBus;
private final PluginConfigServiceApi configServiceApi;
- private final DataSource dataSource;
-
@Inject
- public DefaultOSGIKillbill(@Named(DefaultOSGIModule.OSGI_NAMED) final DataSource dataSource,
- final AccountUserApi accountUserApi,
+ public DefaultOSGIKillbill(final AccountUserApi accountUserApi,
final AnalyticsSanityApi analyticsSanityApi,
final AnalyticsUserApi analyticsUserApi,
final CatalogUserApi catalogUserApi,
@@ -92,9 +86,7 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
final CustomFieldUserApi customFieldUserApi,
final ExportUserApi exportUserApi,
final TagUserApi tagUserApi,
- final ExternalBus externalBus,
final PluginConfigServiceApi configServiceApi) {
- this.dataSource = dataSource;
this.accountUserApi = accountUserApi;
this.analyticsSanityApi = analyticsSanityApi;
this.analyticsUserApi = analyticsUserApi;
@@ -114,7 +106,6 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
this.customFieldUserApi = customFieldUserApi;
this.exportUserApi = exportUserApi;
this.tagUserApi = tagUserApi;
- this.externalBus = externalBus;
this.configServiceApi = configServiceApi;
}
@@ -214,17 +205,7 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
}
@Override
- public ExternalBus getExternalBus() {
- return externalBus;
- }
-
- @Override
public PluginConfigServiceApi getPluginConfigServiceApi() {
return configServiceApi;
}
-
- @Override
- public DataSource getDataSource() {
- return dataSource;
- }
}
diff --git a/osgi/src/main/java/com/ning/billing/osgi/glue/DefaultOSGIModule.java b/osgi/src/main/java/com/ning/billing/osgi/glue/DefaultOSGIModule.java
index 32d2811..c793069 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/glue/DefaultOSGIModule.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/glue/DefaultOSGIModule.java
@@ -26,6 +26,7 @@ import org.skife.config.ConfigurationObjectFactory;
import com.ning.billing.osgi.DefaultOSGIKillbill;
import com.ning.billing.osgi.DefaultOSGIService;
import com.ning.billing.osgi.KillbillActivator;
+import com.ning.billing.osgi.KillbillEventObservable;
import com.ning.billing.osgi.PureOSGIBundleFinder;
import com.ning.billing.osgi.api.OSGIKillbill;
import com.ning.billing.osgi.api.OSGIService;
@@ -77,6 +78,7 @@ public class DefaultOSGIModule extends AbstractModule {
bind(PluginConfigServiceApi.class).to(DefaultPluginConfigServiceApi.class).asEagerSingleton();
bind(OSGIKillbill.class).to(DefaultOSGIKillbill.class).asEagerSingleton();
bind(OSGIDataSourceProvider.class).asEagerSingleton();
+ bind(KillbillEventObservable.class).asEagerSingleton();
bind(DataSource.class).annotatedWith(Names.named(OSGI_NAMED)).toProvider(OSGIDataSourceProvider.class).asEagerSingleton();
}
}
diff --git a/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java b/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java
index 79f082b..8d493a8 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java
@@ -16,10 +16,15 @@
package com.ning.billing.osgi;
+import java.util.Dictionary;
+import java.util.Hashtable;
import java.util.List;
+import java.util.Observable;
import javax.inject.Inject;
+import javax.inject.Named;
import javax.servlet.Servlet;
+import javax.sql.DataSource;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
@@ -32,7 +37,9 @@ import org.osgi.service.http.HttpService;
import com.ning.billing.osgi.api.OSGIKillbill;
import com.ning.billing.osgi.api.OSGIPluginProperties;
import com.ning.billing.osgi.api.OSGIServiceRegistration;
+import com.ning.billing.osgi.glue.DefaultOSGIModule;
import com.ning.billing.payment.plugin.api.PaymentPluginApi;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillRegistrar;
import com.google.common.collect.ImmutableList;
@@ -40,36 +47,57 @@ public class KillbillActivator implements BundleActivator, ServiceListener {
private final OSGIKillbill osgiKillbill;
private final HttpService defaultHttpService;
- private final List<OSGIServiceRegistration> allRegistrationHandlers;
+ private final DataSource dataSource;
+ private final KillbillEventObservable observable;
+ private final OSGIKillbillRegistrar registrar;
+
private volatile ServiceRegistration osgiKillbillRegistration;
+ private final List<OSGIServiceRegistration> allRegistrationHandlers;
+
private BundleContext context = null;
@Inject
- public KillbillActivator(final OSGIKillbill osgiKillbill,
+ public KillbillActivator(@Named(DefaultOSGIModule.OSGI_NAMED) final DataSource dataSource,
+ final OSGIKillbill osgiKillbill,
final HttpService defaultHttpService,
+ final KillbillEventObservable observable,
+
final OSGIServiceRegistration<Servlet> servletRouter,
final OSGIServiceRegistration<PaymentPluginApi> paymentProviderPluginRegistry) {
this.osgiKillbill = osgiKillbill;
this.defaultHttpService = defaultHttpService;
+ this.dataSource = dataSource;
+ this.observable = observable;
+ this.registrar = new OSGIKillbillRegistrar();
this.allRegistrationHandlers = ImmutableList.<OSGIServiceRegistration>of(servletRouter, paymentProviderPluginRegistry);
+
}
@Override
public void start(final BundleContext context) throws Exception {
this.context = context;
+ final Dictionary props = new Hashtable();
+ props.put(OSGIPluginProperties.PLUGIN_NAME_PROP, "killbill");
+
+ observable.register();
+
+ registrar.registerService(context, OSGIKillbill.class, osgiKillbill, props);
+ registrar.registerService(context, HttpService.class, defaultHttpService, props);
+ registrar.registerService(context, Observable.class, observable, props);
+ registrar.registerService(context, DataSource.class, dataSource, props);
+
context.addServiceListener(this);
- registerServices(context);
}
@Override
public void stop(final BundleContext context) throws Exception {
this.context = null;
-
context.removeServiceListener(this);
- unregisterServices();
+ observable.unregister();
+ registrar.unregisterAll();
}
@Override
@@ -113,17 +141,4 @@ public class KillbillActivator implements BundleActivator, ServiceListener {
return true;
}
-
- private void registerServices(final BundleContext context) {
- osgiKillbillRegistration = context.registerService(OSGIKillbill.class.getName(), osgiKillbill, null);
-
- context.registerService(HttpService.class.getName(), defaultHttpService, null);
- }
-
- private void unregisterServices() {
- if (osgiKillbillRegistration != null) {
- osgiKillbillRegistration.unregister();
- osgiKillbillRegistration = null;
- }
- }
}
diff --git a/osgi/src/main/java/com/ning/billing/osgi/KillbillEventObservable.java b/osgi/src/main/java/com/ning/billing/osgi/KillbillEventObservable.java
new file mode 100644
index 0000000..14d7f4d
--- /dev/null
+++ b/osgi/src/main/java/com/ning/billing/osgi/KillbillEventObservable.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2010-2013 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.osgi;
+
+import java.util.Observable;
+
+import javax.inject.Inject;
+
+import org.osgi.framework.BundleContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ning.billing.beatrix.bus.api.ExtBusEvent;
+import com.ning.billing.beatrix.bus.api.ExternalBus;
+
+import com.google.common.eventbus.Subscribe;
+
+public class KillbillEventObservable extends Observable {
+
+
+ private Logger logger = LoggerFactory.getLogger(KillbillEventObservable.class);
+
+ private final ExternalBus externalBus;
+
+ @Inject
+ public KillbillEventObservable(final ExternalBus externalBus) {
+ this.externalBus = externalBus;
+ }
+
+ public void register() {
+ externalBus.register(this);
+ }
+
+ public void unregister() {
+ deleteObservers();
+ if (externalBus != null) {
+ externalBus.unregister(this);
+ }
+ }
+
+ @Subscribe
+ public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
+ logger.debug("Received external event " + killbillEvent.toString());
+ setChanged();
+ notifyObservers(killbillEvent);
+ }
+}
diff --git a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java
index 559a434..e5c2f15 100644
--- a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java
+++ b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java
@@ -28,19 +28,19 @@ import org.osgi.service.log.LogService;
import com.ning.billing.osgi.api.config.PluginConfig.PluginType;
import com.ning.billing.osgi.api.config.PluginConfigServiceApi;
import com.ning.billing.osgi.api.config.PluginRubyConfig;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillAPI;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillLogService;
-import com.ning.killbill.osgi.libs.killbill.OSGIKillbillTracker;
public class Activator implements BundleActivator {
- private OSGIKillbillTracker kb;
+ private OSGIKillbillAPI kb;
private OSGIKillbillLogService logService;
private JRubyPlugin plugin = null;
public void start(final BundleContext context) throws Exception {
- kb = new OSGIKillbillTracker(context);
+ kb = new OSGIKillbillAPI(context);
logService = new OSGIKillbillLogService(context);
logService.log(LogService.LOG_INFO, "JRuby bundle activated");
diff --git a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillDataSource.java b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillDataSource.java
new file mode 100644
index 0000000..6e1c671
--- /dev/null
+++ b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillDataSource.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2010-2013 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.killbill.osgi.libs.killbill;
+
+import javax.sql.DataSource;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class OSGIKillbillDataSource extends OSGIKillbillLibraryBase {
+
+ private static final String DATASOURCE_SERVICE_NAME = "javax.sql.DataSource";
+
+ private final ServiceTracker<DataSource, DataSource> dataSourceTracker;
+
+
+ public OSGIKillbillDataSource(BundleContext context) {
+ dataSourceTracker = new ServiceTracker(context, DATASOURCE_SERVICE_NAME, null);
+ dataSourceTracker.open();
+ }
+
+ public void close() {
+ if (dataSourceTracker != null) {
+ dataSourceTracker.close();
+ }
+ }
+
+ public DataSource getDataSource() {
+ return withServiceTracker(dataSourceTracker, new APICallback<DataSource, DataSource>(DATASOURCE_SERVICE_NAME) {
+ @Override
+ public DataSource executeWithService(final DataSource service) {
+ return dataSourceTracker.getService();
+ }
+ });
+ }
+}
diff --git a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillEventDispatcher.java b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillEventDispatcher.java
new file mode 100644
index 0000000..1bdf9fe
--- /dev/null
+++ b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillEventDispatcher.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2010-2013 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.killbill.osgi.libs.killbill;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Observable;
+import java.util.Observer;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+import com.ning.billing.beatrix.bus.api.ExtBusEvent;
+
+public class OSGIKillbillEventDispatcher extends OSGIKillbillLibraryBase {
+
+ private static final String OBSERVABLE_SERVICE_NAME = "java.util.Observable";
+
+ private final ServiceTracker<Observable, Observable> observableTracker;
+
+
+ private final Map<OSGIKillbillEventHandler, Observer> handlerToObserver;
+
+ public OSGIKillbillEventDispatcher(BundleContext context) {
+ handlerToObserver = new HashMap<OSGIKillbillEventHandler, Observer>();
+ observableTracker = new ServiceTracker(context, OBSERVABLE_SERVICE_NAME, null);
+ observableTracker.open();
+ }
+
+ public void close() {
+ if (observableTracker != null) {
+ observableTracker.close();
+ }
+ handlerToObserver.clear();
+ }
+
+ public void registerEventHandler(final OSGIKillbillEventHandler handler) {
+
+ withServiceTracker(observableTracker, new APICallback<Void, Observable>(OBSERVABLE_SERVICE_NAME) {
+ @Override
+ public Void executeWithService(final Observable service) {
+
+ final Observer observer = new Observer() {
+ @Override
+ public void update(final Observable o, final Object arg) {
+ if (!(arg instanceof ExtBusEvent)) {
+ // TODO STEPH or should we throw because that should not happen
+ return;
+ }
+ handler.handleKillbillEvent((ExtBusEvent) arg);
+ }
+ };
+ handlerToObserver.put(handler, observer);
+ service.addObserver(observer);
+ return null;
+ }
+ });
+ }
+
+ public void unregisterEventHandler(final OSGIKillbillEventHandler handler) {
+ withServiceTracker(observableTracker, new APICallback<Void, Observable>(OBSERVABLE_SERVICE_NAME) {
+ @Override
+ public Void executeWithService(final Observable service) {
+
+ final Observer observer = handlerToObserver.get(handler);
+ if (observer != null) {
+ service.deleteObserver(observer);
+ handlerToObserver.remove(handler);
+ }
+ return null;
+ }
+ });
+
+ }
+
+ public interface OSGIKillbillEventHandler {
+
+ public void handleKillbillEvent(final ExtBusEvent killbillEvent);
+ }
+
+}
diff --git a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillRegistrar.java b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillRegistrar.java
index c2c79e0..7168b95 100644
--- a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillRegistrar.java
+++ b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillRegistrar.java
@@ -23,8 +23,6 @@ import java.util.Map;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
-import com.ning.billing.payment.plugin.api.PaymentPluginApi;
-
public class OSGIKillbillRegistrar {
private final Map<String, ServiceRegistration> serviceRegistrations;
@@ -34,7 +32,7 @@ public class OSGIKillbillRegistrar {
}
public <S, T extends S> void registerService(final BundleContext context, final Class<S> svcClass, final S service, final Dictionary props) {
- ServiceRegistration svcRegistration = context.registerService(svcClass.getName(), service, props);
+ ServiceRegistration svcRegistration = context.registerService(svcClass.getName(), service, props);
serviceRegistrations.put(svcClass.getName(), svcRegistration);
}
osgi-bundles/tests/beatrix/pom.xml 12(+0 -12)
diff --git a/osgi-bundles/tests/beatrix/pom.xml b/osgi-bundles/tests/beatrix/pom.xml
index 81f2fc0..4f06c99 100644
--- a/osgi-bundles/tests/beatrix/pom.xml
+++ b/osgi-bundles/tests/beatrix/pom.xml
@@ -29,10 +29,6 @@
<packaging>bundle</packaging>
<dependencies>
<dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
<groupId>com.ning.billing</groupId>
<artifactId>killbill-api</artifactId>
</dependency>
@@ -40,14 +36,6 @@
<groupId>com.ning.billing</groupId>
<artifactId>killbill-osgi-bundles-lib-killbill</artifactId>
</dependency>
-
-
- <!--
- <dependency>
- <groupId>com.ning.billing</groupId>
- <artifactId>killbill-osgi-all-bundles</artifactId>
- </dependency>
--->
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
diff --git a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestActivator.java b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestActivator.java
index 834a0c5..7b3a6bf 100644
--- a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestActivator.java
+++ b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestActivator.java
@@ -18,6 +18,8 @@ package com.ning.billing.osgi.bundles.test;
import java.util.Dictionary;
import java.util.Hashtable;
+import java.util.Observable;
+import java.util.Observer;
import java.util.UUID;
import org.osgi.framework.BundleActivator;
@@ -30,16 +32,16 @@ import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.beatrix.bus.api.ExtBusEvent;
import com.ning.billing.beatrix.bus.api.ExtBusEventType;
-import com.ning.billing.beatrix.bus.api.ExternalBus;
import com.ning.billing.osgi.api.OSGIPluginProperties;
import com.ning.billing.osgi.bundles.test.dao.TestDao;
import com.ning.billing.payment.plugin.api.PaymentPluginApi;
import com.ning.billing.util.callcontext.TenantContext;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillAPI;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillDataSource;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillEventDispatcher;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillEventDispatcher.OSGIKillbillEventHandler;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillLogService;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillRegistrar;
-import com.ning.killbill.osgi.libs.killbill.OSGIKillbillTracker;
-
-import com.google.common.eventbus.Subscribe;
/**
* Test class used by Beatrix OSGI test to verify that:
@@ -48,11 +50,14 @@ import com.google.common.eventbus.Subscribe;
* - test bundle is able to register a fake PaymentApi service
* - test bundle can use the DataSource from Killbill and write on disk
*/
-public class TestActivator implements BundleActivator {
+public class TestActivator implements BundleActivator, OSGIKillbillEventHandler {
- private OSGIKillbillTracker kb;
+ private OSGIKillbillAPI api;
private OSGIKillbillLogService logService;
private OSGIKillbillRegistrar registrar;
+ private OSGIKillbillDataSource dataSource;
+ private OSGIKillbillEventDispatcher dispatcher;
+
private TestDao testDao;
@Override
@@ -61,33 +66,41 @@ public class TestActivator implements BundleActivator {
final String bundleName = context.getBundle().getSymbolicName();
System.out.println("TestActivator starting bundle = " + bundleName);
- kb = new OSGIKillbillTracker(context);
+ api = new OSGIKillbillAPI(context);
logService = new OSGIKillbillLogService(context);
-
+ dataSource = new OSGIKillbillDataSource(context);
+ dispatcher = new OSGIKillbillEventDispatcher(context);
+ dispatcher.registerEventHandler(this);
registrar = new OSGIKillbillRegistrar();
- final IDBI dbi = new DBI(kb.getDataSource());
+ final IDBI dbi = new DBI(dataSource.getDataSource());
testDao = new TestDao(dbi);
registerPaymentApi(context, testDao);
-
- registerForKillbillEvents(context);
-
testDao.createTable();
-
testDao.insertStarted();
}
@Override
public void stop(final BundleContext context) {
- if (kb != null) {
- kb.close();
- this.kb = null;
- }
+ api.close();
+ logService.close();
+ dispatcher.unregisterEventHandler(this);
+ dispatcher.close();
+ dataSource.close();
+
registrar.unregisterAll();
System.out.println("Good bye world from TestActivator!");
}
- @Subscribe
+
+ private void registerPaymentApi(final BundleContext context, final TestDao dao) {
+
+ final Dictionary props = new Hashtable();
+ props.put(OSGIPluginProperties.PLUGIN_NAME_PROP, "test");
+ registrar.registerService(context, PaymentPluginApi.class, new TestPaymentPluginApi("test", dao), props);
+ }
+
+ @Override
public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
logService.log(LogService.LOG_INFO, "Received external event " + killbillEvent.toString());
@@ -105,7 +118,7 @@ public class TestActivator implements BundleActivator {
};
try {
- Account account = kb.getAccountUserApi().getAccountById(killbillEvent.getAccountId(), tenantContext);
+ Account account = api.getAccountUserApi().getAccountById(killbillEvent.getAccountId(), tenantContext);
testDao.insertAccountExternalKey(account.getExternalKey());
} catch (AccountApiException e) {
@@ -113,21 +126,4 @@ public class TestActivator implements BundleActivator {
}
}
-
- private void registerForKillbillEvents(final BundleContext context) {
- try {
- final ExternalBus externalBus = kb.getExternalBus();
- externalBus.register(this);
- } catch (Exception e) {
- System.err.println("Error in TestActivator: " + e.getLocalizedMessage());
- } finally {
- }
- }
-
- private void registerPaymentApi(final BundleContext context, final TestDao dao) {
-
- final Dictionary props = new Hashtable();
- props.put(OSGIPluginProperties.PLUGIN_NAME_PROP, "test");
- registrar.registerService(context, PaymentPluginApi.class, new TestPaymentPluginApi("test", dao), props);
- }
}
diff --git a/util/src/main/java/com/ning/billing/util/config/OSGIConfig.java b/util/src/main/java/com/ning/billing/util/config/OSGIConfig.java
index 44b44c2..bef6e97 100644
--- a/util/src/main/java/com/ning/billing/util/config/OSGIConfig.java
+++ b/util/src/main/java/com/ning/billing/util/config/OSGIConfig.java
@@ -57,7 +57,6 @@ public interface OSGIConfig extends KillbillConfig {
"com.ning.billing.usage.api," +
"com.ning.billing.util.api," +
"com.ning.billing.util.callcontext," +
- "com.google.common.eventbus," +
// javax.servlet and javax.servlet.http are not exported by default - we
// need the bundles to see them for them to be able to register their servlets.
// Note: bundles should mark javax.servlet:servlet-api as provided