I tried what you suggested and yes the IRuntime class is loaded without any 
issues.

I added the following right at the beginning of the Activator.start() method:

       // Experiment to see if this bundle has access to IRuntime class
    log.info("start: loading IRuntime class...");
    Class iRuntimeClass = 
context.getBundle().loadClass("com.raritan.polaris.plugins.dynamic.bridge.IRuntime");
 
    log.info("start: IRuntime class loaded, name= " + iRuntimeClass.getName());

The resulting output:

2013-03-28 21:25:08,314 INFO  [Start Level Event Dispatcher] Activator: start: 
loading IRuntime class...
2013-03-28 21:25:08,314 INFO  [Start Level Event Dispatcher] Activator: start: 
IRuntime class loaded, name= com.raritan.polaris.plugins.dynamic.bridge.IRuntime

Here is the full set of stack traces from the JVM (just in case it helps):

2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
Caused by: java.lang.NoClassDefFoundError: 
com/raritan/polaris/plugins/dynamic/bridge/IRuntime
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.defineClass1(Native Method)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.util.ClassCache$OneShotClassLoader.defineClass(ClassCache.java:73)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.codegen.RealClassGenerator.defineOldStyleImplClass(RealClassGenerator.java:244)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.codegen.RealClassGenerator.createOldStyleImplClass(RealClassGenerator.java:63)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.Java.newInterfaceImpl(Java.java:1185)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.proxies.JavaInterfaceTemplate.jcreateProxy(JavaInterfaceTemplate.java:276)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.proxies.JavaInterfaceTemplate.access$000(JavaInterfaceTemplate.java:30)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.proxies.JavaInterfaceTemplate$4.call(JavaInterfaceTemplate.java:181)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.internal.runtime.methods.JavaMethod$JavaMethodN.call(JavaMethod.java:642)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:197)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.RubyClass.finvoke(RubyClass.java:674)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.util.RuntimeHelpers.invoke(RuntimeHelpers.java:493)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.JavaUtil.convertProcToInterface(JavaUtil.java:246)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.RubyBasicObject.toJava(RubyBasicObject.java:795)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.JavaEmbedUtils.rubyToJava(JavaEmbedUtils.java:273)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.embed.internal.EmbedRubyInterfaceAdapterImpl.getInstance(EmbedRubyInterfaceAdapterImpl.java:73)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.embed.ScriptingContainer.getInstance(ScriptingContainer.java:1621)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
com.raritan.polaris.plugins.dynamic.DynamicPluginManager.start(DynamicPluginManager.java:64)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at com.raritan.polaris.plugins.dynamic.Activator.start(Activator.java:87)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.security.AccessController.doPrivileged(Native Method)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
... 10 more
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
Caused by: java.lang.ClassNotFoundException: 
com.raritan.polaris.plugins.dynamic.bridge.IRuntime
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.findClass(ClassLoader.java:522)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
... 33 more
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
Root exception:
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
java.lang.NoClassDefFoundError: 
com/raritan/polaris/plugins/dynamic/bridge/IRuntime
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.defineClass1(Native Method)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.util.ClassCache$OneShotClassLoader.defineClass(ClassCache.java:73)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.codegen.RealClassGenerator.defineOldStyleImplClass(RealClassGenerator.java:244)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.codegen.RealClassGenerator.createOldStyleImplClass(RealClassGenerator.java:63)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.Java.newInterfaceImpl(Java.java:1185)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.proxies.JavaInterfaceTemplate.jcreateProxy(JavaInterfaceTemplate.java:276)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.proxies.JavaInterfaceTemplate.access$000(JavaInterfaceTemplate.java:30)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.java.proxies.JavaInterfaceTemplate$4.call(JavaInterfaceTemplate.java:181)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.internal.runtime.methods.JavaMethod$JavaMethodN.call(JavaMethod.java:642)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:197)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.RubyClass.finvoke(RubyClass.java:674)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.util.RuntimeHelpers.invoke(RuntimeHelpers.java:493)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.JavaUtil.convertProcToInterface(JavaUtil.java:246)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.RubyBasicObject.toJava(RubyBasicObject.java:795)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.javasupport.JavaEmbedUtils.rubyToJava(JavaEmbedUtils.java:273)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.jruby.embed.internal.EmbedRubyInterfaceAdapterImpl.getInstance(EmbedRubyInterfaceAdapterImpl.java:73)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at org.jruby.embed.ScriptingContainer.getInstance(ScriptingContainer.java:1621)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
com.raritan.polaris.plugins.dynamic.DynamicPluginManager.start(DynamicPluginManager.java:64)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at com.raritan.polaris.plugins.dynamic.Activator.start(Activator.java:87)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.security.AccessController.doPrivileged(Native Method)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:352)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:370)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1068)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:557)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:464)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:248)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:445)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at 
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
Caused by: java.lang.ClassNotFoundException: 
com.raritan.polaris.plugins.dynamic.bridge.IRuntime
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.findClass(ClassLoader.java:522)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)


On Mar 28, 2013, at 7:41 PM, Anthony Juckel wrote:
2013/03/28 21:25:15 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)]    
... 33 more

> Hrm.  As long as the bundle who's activator you show here has access to 
> com.raritan.polaris.plugins.dynamic.bridge.IRuntime (and any classes it 
> references, remember) I'd expect it to work.  If you throw 
> context.getBundle().loadClass("com.raritan.polaris.plugins.dynamic.bridge.IRuntime");
>  in there before creating the scripting container, does it successfully 
> resolve?
> 
> I'll work on running my sample in your version of equinox to see if an 
> incompatibility in the OSGiScriptingContainer.  That would surprise me a 
> little bit, but it's worth investigating.
> 
> On Thu, Mar 28, 2013 at 5:24 PM, Mike Davidson <mike.david...@raritan.com> 
> wrote:
>> 
>> Have I done anything different from you?  What OSGi framework are you using? 
>>  Is there a particular bundled gem that you're unable to load?
> 
> Thanks a lot for checking this out.
> 
> We're using Equinox as well.  We're on an older version though, so I wonder 
> if that has something to do with this (osgi-3.5.2.R35x_v20100126.jar).    We 
> have some other issues that prevent us from upgrading for now.
> 
> I was actually able to get past the gem loading issue by manually setting 
> GEM_PATH to the appropriate path (ugly, but I wanted to see if it would work):
> 
> scriptingContainer.runScriptlet("ENV['GEM_PATH']='/opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared'");
>  
> 
> However, then the code blew up with a NoClassDefFoundError for a Java class 
> that is in my OSGi bundle.  In my case it just looks like when using 
> CONCURRENT 
> the JRuby code is not playing nice with OSGi.  Here are the relevant log 
> messages showing the ruby load path and Gem path as well the error message.  
> 
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> inside bootstrap.rb...
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> $LOAD_PATH:
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared/gems/i18n-0.6.4/lib
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared/gems/multi_json-1.6.1/lib
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared/gems/activesupport-3.2.12/lib
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared/gems/builder-3.0.4/lib
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared/gems/activemodel-3.2.12/lib
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared/gems/cartesian-0.6.7/lib
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> classpath:/META-INF/jruby.home/lib/ruby/1.9/site_ruby
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> classpath:/META-INF/jruby.home/lib/ruby/shared
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> classpath:/META-INF/jruby.home/lib/ruby/1.9
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/dynamic_plugin/lib
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> GEM_PATH:
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> classpath:/META-INF/jruby.home/lib/ruby/gems/shared
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> /opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared
> ...
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> org.osgi.framework.BundleException: Exception in 
> com.raritan.polaris.plugins.dynamic.Activator.start() of bundle 
> com.raritan.polaris.plugins.dynamic
> ...
> 2013/03/28 15:35:16 INFO [/opt/raritan/polaris/init/scripts/polaris.pl(414)] 
> Caused by: java.lang.NoClassDefFoundError: 
> com/raritan/polaris/plugins/dynamic/bridge/IRuntime
> ------------------------------------------------------------
> 
> The IRuntime class is definitely in the bundle being started:
> 
> [root@192.168.42.48 /opt/raritan/polaris/lib/plugins] # jar -tvf 
> com.raritan.polaris.plugins.dynamic-4.1.0-6-SNAPSHOT.jar |grep IRuntime
>    224 Thu Mar 28 16:35:38 EDT 2013 
> com/raritan/polaris/plugins/dynamic/bridge/IRuntime.class
>  
> The OSGi Activator.start() method for the for the 
> com.raritan.polaris.plugins.dynamic-4.1.0-6-SNAPSHOT.jar bundle looks like:
> 
> public void start(BundleContext context) throws Exception
>   {
>     // Using OSGiScriptingContainer instead of vanilla ScriptingContainer now 
> that we are
>     // running JRuby as an OSGi bundle.
>     scriptingContainer = new 
> OSGiScriptingContainer(context.getBundle(),LocalContextScope.CONCURRENT, 
> LocalVariableBehavior.TRANSIENT);
>     scriptingContainer.setCompatVersion(CompatVersion.RUBY1_9);
>     
>     // Work-around JRUBY issue JRUBY-6265
>     scriptingContainer.runScriptlet("$: << 
> '/opt/raritan/polaris/dynamic_plugin/lib';"); 
> 
>     // Let's try to manually set hard-coded GEM_PATH
>     
> scriptingContainer.runScriptlet("ENV['GEM_PATH']='/opt/raritan/polaris/lib/configuration/org.eclipse.osgi/bundles/3/1/.cp/META-INF/jruby.home/lib/ruby/gems/shared'");
>  
>     
>     this.dynamicPluginManager = new DynamicPluginManager(scriptingContainer);
>     
> this.dynamicPluginManager.setPluginLoadPath(System.getProperty("dynamic-plugin.plugins-path",
>  Constants.DYNAMIC_PLUGIN_PLUGINS_PATH));
>     this.dynamicPluginManager.start();
> 
>     // Initialize SNMP4J
>     snmpSessionManager = new SnmpSessionManager();
>     snmpSessionManager.activateSnmp();
> 
>     // Initialize BridgeUtils
>     BridgeUtils.setDynamicPluginManager(this.dynamicPluginManager);
>     BridgeUtils.setSnmpSession(snmpSessionManager.getSnmpSession());
> 
>     @SuppressWarnings("rawtypes") Hashtable properties = new Hashtable();
>     context.registerService(CommandProvider.class.getName(), this, 
> properties);
>   }
> 
> Not sure what I'm doing wrong.  I tried to create a simple jUnit test that 
> reproduces this issue but so far no luck.
> 

Reply via email to