killbill-aplcache
Changes
osgi-bundles/bundles/jruby/pom.xml 6(+5 -1)
osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java 95(+34 -61)
osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyNotificationPlugin.java 2(+1 -1)
osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java 3(+2 -1)
osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java 4(+2 -2)
osgi-bundles/bundles/meter/pom.xml 2(+1 -1)
osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillLibraryBase.java 53(+53 -0)
osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillLogService.java 71(+46 -25)
Details
osgi-bundles/bundles/jruby/pom.xml 6(+5 -1)
diff --git a/osgi-bundles/bundles/jruby/pom.xml b/osgi-bundles/bundles/jruby/pom.xml
index f3dba84..42e737e 100644
--- a/osgi-bundles/bundles/jruby/pom.xml
+++ b/osgi-bundles/bundles/jruby/pom.xml
@@ -36,6 +36,10 @@
<artifactId>killbill-api</artifactId>
</dependency>
<dependency>
+ <groupId>com.ning.billing</groupId>
+ <artifactId>killbill-osgi-bundles-lib-killbill</artifactId>
+ </dependency>
+ <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
@@ -79,7 +83,7 @@
<Export-Package></Export-Package>
<Private-Package>com.ning.billing.osgi.bundles.jruby.*</Private-Package>
<!-- Optional resolution because exported by the Felix system bundle -->
- <Import-Package>*;resolution:=optional,javax.management;javax.management.*;javax.crypto;javax.crypto.*;javax.net;javax.net.*;javax.net.ssl;javax.net.ssl.*;javax.security;javax.security.*;javax.security.cert;javax.security.cert.*;javax.security.auth;javax.security.auth.*;javax.security.auth.x500;javax.security.auth.x500.*;resolution:=optional</Import-Package>
+ <Import-Package>*;resolution:=optional,com.ning.billing.osgi.api,javax.management;javax.management.*;javax.crypto;javax.crypto.*;javax.net;javax.net.*;javax.net.ssl;javax.net.ssl.*;javax.security;javax.security.*;javax.security.cert;javax.security.cert.*;javax.security.auth;javax.security.auth.*;javax.security.auth.x500;javax.security.auth.x500.*;resolution:=optional</Import-Package>
</instructions>
</configuration>
<executions>
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 78d4cde..559a434 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
@@ -16,36 +16,34 @@
package com.ning.billing.osgi.bundles.jruby;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import org.jruby.embed.ScriptingContainer;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;
-import com.ning.billing.osgi.api.OSGIKillbill;
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.OSGIKillbillLogService;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillTracker;
public class Activator implements BundleActivator {
- private final List<ServiceReference<?>> serviceReferences = new ArrayList<ServiceReference<?>>();
- private final Logger logger = new Logger();
+ private OSGIKillbillTracker kb;
+ private OSGIKillbillLogService logService;
- private OSGIKillbill osgiKillbill;
private JRubyPlugin plugin = null;
public void start(final BundleContext context) throws Exception {
- logger.start(context);
- osgiKillbill = retrieveApi(context, OSGIKillbill.class);
- logger.log(LogService.LOG_INFO, "JRuby bundle activated");
+ kb = new OSGIKillbillTracker(context);
+ logService = new OSGIKillbillLogService(context);
+
+ logService.log(LogService.LOG_INFO, "JRuby bundle activated");
doMagicToMakeJRubyAndFelixHappy();
@@ -55,24 +53,24 @@ public class Activator implements BundleActivator {
// Setup JRuby
final ScriptingContainer scriptingContainer = setupScriptingContainer(rubyConfig);
if (PluginType.NOTIFICATION.equals(rubyConfig.getPluginType())) {
- plugin = new JRubyNotificationPlugin(rubyConfig, scriptingContainer, context, logger);
+ plugin = new JRubyNotificationPlugin(rubyConfig, scriptingContainer, context, logService);
} else if (PluginType.PAYMENT.equals(rubyConfig.getPluginType())) {
- plugin = new JRubyPaymentPlugin(rubyConfig, scriptingContainer, context, logger);
+ plugin = new JRubyPaymentPlugin(rubyConfig, scriptingContainer, context, logService);
}
// Validate and instantiate the plugin
final Map<String, Object> killbillServices = retrieveKillbillApis(context);
killbillServices.put("root", rubyConfig.getPluginVersionRoot().getAbsolutePath());
- killbillServices.put("logger", logger);
+ killbillServices.put("logger", logService);
plugin.instantiatePlugin(killbillServices);
- logger.log(LogService.LOG_INFO, "Starting JRuby plugin " + plugin.getPluginMainClass());
+ logService.log(LogService.LOG_INFO, "Starting JRuby plugin " + plugin.getPluginMainClass());
plugin.startPlugin(context);
}
private PluginRubyConfig retrievePluginRubyConfig(final BundleContext context) {
- final PluginConfigServiceApi pluginConfigServiceApi = osgiKillbill.getPluginConfigServiceApi();
+ final PluginConfigServiceApi pluginConfigServiceApi = kb.getPluginConfigServiceApi();
return pluginConfigServiceApi.getPluginRubyConfig(context.getBundle().getBundleId());
}
@@ -93,60 +91,35 @@ public class Activator implements BundleActivator {
}
public void stop(final BundleContext context) throws Exception {
- logger.log(LogService.LOG_INFO, "Stopping JRuby plugin " + plugin.getPluginMainClass());
plugin.stopPlugin(context);
-
- for (final ServiceReference apiReference : serviceReferences) {
- context.ungetService(apiReference);
- }
-
- logger.close();
+ kb.close();
+ logService.close();
}
private Map<String, Object> retrieveKillbillApis(final BundleContext context) {
final Map<String, Object> killbillUserApis = new HashMap<String, Object>();
// See killbill/plugin.rb for the naming convention magic
- killbillUserApis.put("account_user_api", osgiKillbill.getAccountUserApi());
- killbillUserApis.put("analytics_sanity_api", osgiKillbill.getAnalyticsSanityApi());
- killbillUserApis.put("analytics_user_api", osgiKillbill.getAnalyticsUserApi());
- killbillUserApis.put("catalog_user_api", osgiKillbill.getCatalogUserApi());
- killbillUserApis.put("entitlement_migration_api", osgiKillbill.getEntitlementMigrationApi());
- killbillUserApis.put("entitlement_timeline_api", osgiKillbill.getEntitlementMigrationApi());
- killbillUserApis.put("entitlement_transfer_api", osgiKillbill.getEntitlementTransferApi());
- killbillUserApis.put("entitlement_user_api", osgiKillbill.getEntitlementUserApi());
- killbillUserApis.put("invoice_migration_api", osgiKillbill.getInvoiceMigrationApi());
- killbillUserApis.put("invoice_payment_api", osgiKillbill.getInvoicePaymentApi());
- killbillUserApis.put("invoice_user_api", osgiKillbill.getInvoiceUserApi());
- killbillUserApis.put("overdue_user_api", osgiKillbill.getOverdueUserApi());
- killbillUserApis.put("payment_api", osgiKillbill.getPaymentApi());
- killbillUserApis.put("tenant_user_api", osgiKillbill.getTagUserApi());
- killbillUserApis.put("usage_user_api", osgiKillbill.getUsageUserApi());
- killbillUserApis.put("audit_user_api", osgiKillbill.getAuditUserApi());
- killbillUserApis.put("custom_field_user_api", osgiKillbill.getCustomFieldUserApi());
- killbillUserApis.put("export_user_api", osgiKillbill.getExportUserApi());
- killbillUserApis.put("tag_user_api", osgiKillbill.getTagUserApi());
+ killbillUserApis.put("account_user_api", kb.getAccountUserApi());
+ killbillUserApis.put("analytics_sanity_api", kb.getAnalyticsSanityApi());
+ killbillUserApis.put("analytics_user_api", kb.getAnalyticsUserApi());
+ killbillUserApis.put("catalog_user_api", kb.getCatalogUserApi());
+ killbillUserApis.put("entitlement_migration_api", kb.getEntitlementMigrationApi());
+ killbillUserApis.put("entitlement_timeline_api", kb.getEntitlementMigrationApi());
+ killbillUserApis.put("entitlement_transfer_api", kb.getEntitlementTransferApi());
+ killbillUserApis.put("entitlement_user_api", kb.getEntitlementUserApi());
+ killbillUserApis.put("invoice_migration_api", kb.getInvoiceMigrationApi());
+ killbillUserApis.put("invoice_payment_api", kb.getInvoicePaymentApi());
+ killbillUserApis.put("invoice_user_api", kb.getInvoiceUserApi());
+ killbillUserApis.put("overdue_user_api", kb.getOverdueUserApi());
+ killbillUserApis.put("payment_api", kb.getPaymentApi());
+ killbillUserApis.put("tenant_user_api", kb.getTagUserApi());
+ killbillUserApis.put("usage_user_api", kb.getUsageUserApi());
+ killbillUserApis.put("audit_user_api", kb.getAuditUserApi());
+ killbillUserApis.put("custom_field_user_api", kb.getCustomFieldUserApi());
+ killbillUserApis.put("export_user_api", kb.getExportUserApi());
+ killbillUserApis.put("tag_user_api", kb.getTagUserApi());
return killbillUserApis;
}
-
- /**
- * Retrieve a service class (e.g. Killbill API)
- *
- * @param context OSGI Bundle context
- * @param clazz service class to retrieve
- * @param <T> class type to retrieve
- * @return instance of the service class
- */
- private <T> T retrieveApi(final BundleContext context, final Class<T> clazz) {
- final ServiceReference<T> apiReference = context.getServiceReference(clazz);
- if (apiReference != null) {
- // Keep references to stop the bundle properly
- serviceReferences.add(apiReference);
-
- return context.getService(apiReference);
- } else {
- return null;
- }
- }
}
diff --git a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyNotificationPlugin.java b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyNotificationPlugin.java
index 134e4b5..cb76f64 100644
--- a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyNotificationPlugin.java
+++ b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyNotificationPlugin.java
@@ -31,7 +31,7 @@ import com.google.common.eventbus.Subscribe;
public class JRubyNotificationPlugin extends JRubyPlugin {
public JRubyNotificationPlugin(final PluginRubyConfig config, final ScriptingContainer container,
- final BundleContext bundleContext, final Logger logger) {
+ final BundleContext bundleContext, final LogService logger) {
super(config, container, bundleContext, logger);
}
diff --git a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
index 01dbf38..ad59e00 100644
--- a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
+++ b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPaymentPlugin.java
@@ -27,6 +27,7 @@ import org.jruby.embed.ScriptingContainer;
import org.jruby.javasupport.JavaEmbedUtils;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.log.LogService;
import com.ning.billing.osgi.api.config.PluginRubyConfig;
import com.ning.billing.payment.api.PaymentMethodPlugin;
@@ -43,7 +44,7 @@ public class JRubyPaymentPlugin extends JRubyPlugin implements PaymentPluginApi
private volatile ServiceRegistration<PaymentPluginApi> paymentInfoPluginRegistration;
public JRubyPaymentPlugin(final PluginRubyConfig config, final ScriptingContainer container,
- final BundleContext bundleContext, final Logger logger) {
+ final BundleContext bundleContext, final LogService logger) {
super(config, container, bundleContext, logger);
}
diff --git a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java
index 4aaa263..0922ba5 100644
--- a/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java
+++ b/osgi-bundles/bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java
@@ -45,7 +45,7 @@ public abstract class JRubyPlugin {
private static final String KILLBILL_SERVICES = "java_apis";
private static final String ACTIVE = "@active";
- protected final Logger logger;
+ protected final LogService logger;
protected final BundleContext bundleContext;
protected final String pluginGemName;
protected final String rubyRequire;
@@ -59,7 +59,7 @@ public abstract class JRubyPlugin {
private String cachedRequireLine = null;
public JRubyPlugin(final PluginRubyConfig config, final ScriptingContainer container,
- final BundleContext bundleContext, final Logger logger) {
+ final BundleContext bundleContext, final LogService logger) {
this.logger = logger;
this.bundleContext = bundleContext;
this.pluginGemName = config.getPluginName();
osgi-bundles/bundles/meter/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/bundles/meter/pom.xml b/osgi-bundles/bundles/meter/pom.xml
index d2f6a07..c931845 100644
--- a/osgi-bundles/bundles/meter/pom.xml
+++ b/osgi-bundles/bundles/meter/pom.xml
@@ -138,7 +138,7 @@
<instructions>
<Bundle-Activator>com.ning.billing.meter.osgi.MeterActivator</Bundle-Activator>
<Import-Package>
- *;resolution:=optional
+ *;resolution:=optional,com.ning.billing.osgi.api
</Import-Package>
</instructions>
</configuration>
diff --git a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillLibraryBase.java b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillLibraryBase.java
new file mode 100644
index 0000000..ce86b45
--- /dev/null
+++ b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillLibraryBase.java
@@ -0,0 +1,53 @@
+/*
+ * 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 org.osgi.util.tracker.ServiceTracker;
+
+public abstract class OSGIKillbillLibraryBase {
+
+
+ public OSGIKillbillLibraryBase() {
+
+ }
+
+ public abstract void close();
+
+
+ protected abstract class APICallback<API, T> {
+
+ private final String serviceName;
+
+ protected APICallback(final String serviceName) {
+ this.serviceName = serviceName;
+ }
+
+ public abstract API executeWithService(T service);
+
+ protected API executeWithNoService() {
+ throw new OSGIServiceNotAvailable(serviceName);
+ }
+ }
+
+ protected <API, S, T> API withServiceTracker(ServiceTracker<S, T> t, APICallback<API, T> cb) {
+ T service = t.getService();
+ if (service == null) {
+ return cb.executeWithNoService();
+ }
+ return cb.executeWithService(service);
+ }
+}
diff --git a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillTracker.java b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillTracker.java
index 8bd1f97..f89194f 100644
--- a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillTracker.java
+++ b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillTracker.java
@@ -47,33 +47,24 @@ import com.ning.billing.util.api.CustomFieldUserApi;
import com.ning.billing.util.api.ExportUserApi;
import com.ning.billing.util.api.TagUserApi;
-public class OSGIKillbillTracker implements OSGIKillbill, LogService {
+public class OSGIKillbillTracker extends OSGIKillbillLibraryBase implements OSGIKillbill {
- private static final String LOG_SERVICE_NAME = "org.osgi.service.log.LogService";
private static final String KILLBILL_SERVICE_NAME = "com.ning.billing.osgi.api.OSGIKillbill";
- private final ServiceTracker<LogService, LogService> logTracker;
private final ServiceTracker<OSGIKillbill, OSGIKillbill> killbillTracker;
public OSGIKillbillTracker(BundleContext context) {
- logTracker = new ServiceTracker(context, LOG_SERVICE_NAME, null);
- logTracker.open();
-
killbillTracker = new ServiceTracker(context, KILLBILL_SERVICE_NAME, null);
killbillTracker.open();
}
public void close() {
- if (logTracker != null) {
- logTracker.close();
- }
if (killbillTracker != null) {
killbillTracker.close();
}
}
-
@Override
public AccountUserApi getAccountUserApi() {
return withServiceTracker(killbillTracker, new APICallback<AccountUserApi, OSGIKillbill>(KILLBILL_SERVICE_NAME) {
@@ -295,75 +286,5 @@ public class OSGIKillbillTracker implements OSGIKillbill, LogService {
});
}
- @Override
- public void log(final int level, final String message) {
- logInternal(level, message, null);
- }
-
- @Override
- public void log(final int level, final String message, final Throwable exception) {
- logInternal(level, message, exception);
- }
-
- @Override
- public void log(final ServiceReference sr, final int level, final String message) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void log(final ServiceReference sr, final int level, final String message, final Throwable exception) {
- throw new UnsupportedOperationException();
- }
-
-
- private void logInternal(final int level, final String message, @Nullable final Throwable t) {
-
- withServiceTracker(logTracker, new APICallback<Void, LogService>(LOG_SERVICE_NAME) {
- @Override
- public Void executeWithService(final LogService service) {
- if (t == null) {
- service.log(level, message);
- } else {
- service.log(level, message, t);
- }
- return null;
- }
-
- protected Void executeWithNoService() {
-
- if (level >= 2) {
- System.out.println(message);
- } else {
- System.err.println(message);
- }
- if (t != null) {
- t.printStackTrace(System.err);
- }
- return null;
- }
- });
- }
-
- private abstract class APICallback<API, T> {
-
- private final String serviceName;
- protected APICallback(final String serviceName) {
- this.serviceName = serviceName;
- }
-
- public abstract API executeWithService(T service);
-
- protected API executeWithNoService() {
- throw new OSGIServiceNotAvailable(serviceName);
- }
- }
-
- private <API, S, T> API withServiceTracker(ServiceTracker<S, T> t, APICallback<API, T> foo) {
- T service = t.getService();
- if (service == null) {
- return foo.executeWithNoService();
- }
- return foo.executeWithService(service);
- }
}
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 f7baff3..834a0c5 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
@@ -35,6 +35,7 @@ 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.OSGIKillbillLogService;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillRegistrar;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillTracker;
@@ -50,6 +51,7 @@ import com.google.common.eventbus.Subscribe;
public class TestActivator implements BundleActivator {
private OSGIKillbillTracker kb;
+ private OSGIKillbillLogService logService;
private OSGIKillbillRegistrar registrar;
private TestDao testDao;
@@ -60,6 +62,7 @@ public class TestActivator implements BundleActivator {
System.out.println("TestActivator starting bundle = " + bundleName);
kb = new OSGIKillbillTracker(context);
+ logService = new OSGIKillbillLogService(context);
registrar = new OSGIKillbillRegistrar();
@@ -87,7 +90,7 @@ public class TestActivator implements BundleActivator {
@Subscribe
public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
- kb.log(LogService.LOG_INFO, "Received external event " + killbillEvent.toString());
+ logService.log(LogService.LOG_INFO, "Received external event " + killbillEvent.toString());
// Only looking at account creation
if (killbillEvent.getEventType() != ExtBusEventType.ACCOUNT_CREATION) {
@@ -101,13 +104,12 @@ public class TestActivator implements BundleActivator {
}
};
-
try {
Account account = kb.getAccountUserApi().getAccountById(killbillEvent.getAccountId(), tenantContext);
testDao.insertAccountExternalKey(account.getExternalKey());
} catch (AccountApiException e) {
- kb.log(LogService.LOG_ERROR, e.getMessage());
+ logService.log(LogService.LOG_ERROR, e.getMessage());
}
}