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. >