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 = 
> newOSGiScriptingContainer(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