killbill-aplcache

osgi: various updates for JRuby bundles * Export the root

2/13/2013 4:09:21 PM

Details

diff --git a/api/src/main/java/com/ning/billing/osgi/api/config/PluginConfig.java b/api/src/main/java/com/ning/billing/osgi/api/config/PluginConfig.java
index ced4e47..02cca4e 100644
--- a/api/src/main/java/com/ning/billing/osgi/api/config/PluginConfig.java
+++ b/api/src/main/java/com/ning/billing/osgi/api/config/PluginConfig.java
@@ -16,6 +16,8 @@
 
 package com.ning.billing.osgi.api.config;
 
+import java.io.File;
+
 public interface PluginConfig {
 
     public enum PluginType {
@@ -37,5 +39,10 @@ public interface PluginConfig {
 
     public String getPluginVersionnedName();
 
+    /**
+     * @return root directory of the deployed plugin
+     */
+    public File getPluginVersionRoot();
+
     public PluginLanguage getPluginLanguage();
 }
diff --git a/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginConfig.java b/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginConfig.java
index 0d428b7..2c9bd2d 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginConfig.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginConfig.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.osgi.pluginconf;
 
+import java.io.File;
 import java.util.Properties;
 
 import com.ning.billing.osgi.api.config.PluginConfig;
@@ -27,10 +28,12 @@ public abstract class DefaultPluginConfig implements PluginConfig {
     private final String pluginName;
     private final PluginType pluginType;
     private final String version;
+    private final File pluginVersionRoot;
 
-    public DefaultPluginConfig(final String pluginName, final String version, final Properties props) {
+    public DefaultPluginConfig(final String pluginName, final String version, final Properties props, final File pluginVersionRoot) {
         this.pluginName = pluginName;
         this.version = version;
+        this.pluginVersionRoot = pluginVersionRoot;
         this.pluginType = PluginType.valueOf(props.getProperty(PROP_PLUGIN_TYPE_NAME, PluginType.__UNKNOWN__.toString()));
     }
 
@@ -55,6 +58,11 @@ public abstract class DefaultPluginConfig implements PluginConfig {
     }
 
     @Override
+    public File getPluginVersionRoot() {
+        return pluginVersionRoot;
+    }
+
+    @Override
     public abstract PluginLanguage getPluginLanguage();
 
     protected abstract void validate() throws PluginConfigException;
@@ -70,13 +78,16 @@ public abstract class DefaultPluginConfig implements PluginConfig {
 
         final DefaultPluginConfig that = (DefaultPluginConfig) o;
 
-        if (!pluginName.equals(that.pluginName)) {
+        if (pluginName != null ? !pluginName.equals(that.pluginName) : that.pluginName != null) {
             return false;
         }
         if (pluginType != that.pluginType) {
             return false;
         }
-        if (!version.equals(that.version)) {
+        if (pluginVersionRoot != null ? !pluginVersionRoot.equals(that.pluginVersionRoot) : that.pluginVersionRoot != null) {
+            return false;
+        }
+        if (version != null ? !version.equals(that.version) : that.version != null) {
             return false;
         }
 
@@ -85,9 +96,10 @@ public abstract class DefaultPluginConfig implements PluginConfig {
 
     @Override
     public int hashCode() {
-        int result = pluginName.hashCode();
-        result = 31 * result + pluginType.hashCode();
-        result = 31 * result + version.hashCode();
+        int result = pluginName != null ? pluginName.hashCode() : 0;
+        result = 31 * result + (pluginType != null ? pluginType.hashCode() : 0);
+        result = 31 * result + (version != null ? version.hashCode() : 0);
+        result = 31 * result + (pluginVersionRoot != null ? pluginVersionRoot.hashCode() : 0);
         return result;
     }
 
@@ -98,8 +110,8 @@ public abstract class DefaultPluginConfig implements PluginConfig {
         sb.append("{pluginName='").append(pluginName).append('\'');
         sb.append(", pluginType=").append(pluginType);
         sb.append(", version='").append(version).append('\'');
+        sb.append(", pluginVersionRoot=").append(pluginVersionRoot);
         sb.append('}');
         return sb.toString();
     }
-
 }
diff --git a/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginJavaConfig.java b/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginJavaConfig.java
index 92415e6..513a9ee 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginJavaConfig.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginJavaConfig.java
@@ -26,7 +26,7 @@ public class DefaultPluginJavaConfig extends DefaultPluginConfig implements Plug
     private final String bundleJarPath;
 
     public DefaultPluginJavaConfig(final String pluginName, final String version, final File pluginVersionRoot, final Properties props) throws PluginConfigException {
-        super(pluginName, version, props);
+        super(pluginName, version, props, pluginVersionRoot);
         this.bundleJarPath = extractJarPath(pluginVersionRoot);
         validate();
     }
diff --git a/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginRubyConfig.java b/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginRubyConfig.java
index 26c2eb1..7194fd5 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginRubyConfig.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/pluginconf/DefaultPluginRubyConfig.java
@@ -33,7 +33,7 @@ public class DefaultPluginRubyConfig extends DefaultPluginConfig implements Plug
     private final String rubyRequire;
 
     public DefaultPluginRubyConfig(final String pluginName, final String version, final File pluginVersionRoot, final Properties props) throws PluginConfigException {
-        super(pluginName, version, props);
+        super(pluginName, version, props, pluginVersionRoot);
         this.rubyMainClass = props.getProperty(PROP_RUBY_MAIN_CLASS_NAME);
         this.rubyLoadDir = new File(pluginVersionRoot.getAbsolutePath() + "/" + INSTALLATION_GEM_NAME);
         this.rubyRequire = props.getProperty(PROP_RUBY_REQUIRE);
diff --git a/osgi-bundles/jruby/pom.xml b/osgi-bundles/jruby/pom.xml
index 7166849..f909eff 100644
--- a/osgi-bundles/jruby/pom.xml
+++ b/osgi-bundles/jruby/pom.xml
@@ -76,7 +76,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.security;javax.security.*;resolution:=optional</Import-Package>
+                        <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>
                     </instructions>
                 </configuration>
                 <executions>
diff --git a/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java b/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java
index ab65cb6..f2e4e92 100644
--- a/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java
+++ b/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/Activator.java
@@ -61,8 +61,10 @@ public class Activator implements BundleActivator {
 
         // Validate and instantiate the plugin
 
-        final Map<String, Object> killbillApis = retrieveKillbillApis(context);
-        plugin.instantiatePlugin(killbillApis);
+        final Map<String, Object> killbillServices = retrieveKillbillApis(context);
+        killbillServices.put("root", rubyConfig.getPluginVersionRoot().getAbsolutePath());
+        killbillServices.put("logger", logger);
+        plugin.instantiatePlugin(killbillServices);
 
         log(LogService.LOG_INFO, "Starting JRuby plugin " + plugin.getPluginMainClass());
         plugin.startPlugin(context);
diff --git a/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java b/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java
index a73510c..562b2ea 100644
--- a/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java
+++ b/osgi-bundles/jruby/src/main/java/com/ning/billing/osgi/bundles/jruby/JRubyPlugin.java
@@ -43,7 +43,7 @@ public abstract class JRubyPlugin {
     private static final String KILLBILL_PLUGIN_PAYMENT = "Killbill::Plugin::Payment";
 
     // Magic ruby variables
-    private static final String JAVA_APIS = "java_apis";
+    private static final String KILLBILL_SERVICES = "java_apis";
     private static final String ACTIVE = "@active";
 
     protected final LogService logger;
@@ -87,13 +87,13 @@ public abstract class JRubyPlugin {
         checkValidPlugin();
 
         // Register all killbill APIs
-        container.put(JAVA_APIS, killbillApis);
+        container.put(KILLBILL_SERVICES, killbillApis);
 
-        // Note that the JAVA_APIS variable will be available once only!
+        // Note that the KILLBILL_SERVICES variable will be available once only!
         // Don't put any code here!
 
         // Start the plugin
-        pluginInstance = (RubyObject) container.runScriptlet(pluginMainClass + ".new(" + JAVA_APIS + ")");
+        pluginInstance = (RubyObject) container.runScriptlet(pluginMainClass + ".new(" + KILLBILL_SERVICES + ")");
     }
 
     public void startPlugin(final BundleContext context) {