Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: JRuby 1.0.0
-
Fix Version/s: JRuby 1.2
-
Component/s: Core Classes/Modules
-
Labels:None
-
Environment:Mac OS X Tiger
-
Number of attachments :
Description
If I use a Java class to create Ruby objects, they cannot be sent over DRb. i.e:
package com.kylemaxwell.development; import org.jruby.*; import java.util.*; public class Fu { public static RubyHash rubyHashPlease() { Ruby jruby = Ruby.getDefaultInstance(); HashMap map = new HashMap(); map.put( RubyString.newUnicodeString(jruby, "foo"), RubyString.newUnicodeString(jruby, "bar") ); return new RubyHash(jruby, map, new RubyNil(jruby)); } }
# jirb
> require "java"
=> true
> Fu = com.kylemaxwell.development.Fu
=> Java::ComKylemaxwellDevelopment::Fu
> Fu.ruby_hash_please
=> {"foo"=>"bar"}
> Fu.ruby_hash_please
=> {"foo"=>"bar"}
> Marshal::dump _
=> "\004\010{\006\"\010foo\"\010bar"
> Marshal::load _
=> {"foo"=>"bar"}
> require 'drb'
=> true
> DRb.start_service nil, Fu
=> #<DRb::DRbServer:0x9...
> DRb.uri
=> "druby://kyle.wan:59476"
# other window...
> require 'drb'
=> true
> DRb.start_service
=> #<DRb::DRbServer:0x679f...
>> Fu = DRbObject.new nil, "druby://kyle.wan:59476"
=> #<DRb::DRbObject:0x65bd14 @ref=nil, @uri="druby://kyle.wan:59476">
> Fu.ruby_hash_please
# Hangs....
This is because our JavaObject wrapper does not delegate marshalling to Java serialization. We should probably fix this for 1.1, so that Java objects can be marshaled.