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 <[email protected]>
> 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:
>
> [[email protected] /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.
>