thanks !, I think I'm getting it now, at least #1 always use the same runtime in the session. still, I don't get #2, why a marshalled object should stick to the same runtime ?
F. On 4/17/07, Charles Oliver Nutter <[EMAIL PROTECTED]> wrote: > Fausto Lelli wrote: > > ah ok, > > so the marshalled ruby object carries with it all the runtime info > > or else ? > > in the latter case how big would it be ? > > Looks like there's still a little confusion here. Let me set out the > facts clearly. > > Java serialization: > > 1. Happens when the app server wants it to (i.e. app server "pulls" the > objects and "pushes" them back onto another JVM). In other words, it > happens at a level we can't control. > 2. Can't serialize all of a RubyObject yet (including but not limited to > RubyModule and its methods, Ruby runtime, and so on) because many of > those objects are linked to the rest of the Ruby object/class graph. > 3. Can't deserialize an object such that we can use it on the other > side, because of (2) the Ruby runtime field doesn't survive > serialization and because of (1) the objects arriving at the target > server can't be reattached to a new runtime. > > We can't control both ends of the serialization in an app server, which > means we can't specify that objects coming out of the pipe should be > instantiated for a given runtime. So the bottom line here is that until > a Ruby object can be passed freely from Ruby runtime to Ruby runtime, we > can't reliably serialize them using Java serialization. > > Ruby marshalling: > > 1. Is initiated by the application code, not by the host runtime or > server (i.e. Rails asks Ruby to push the objects out to a store and pull > them back in on the other side) > 2. Is dependent on a Ruby runtime being present to unmarshal all > objects, but this is ok because of (1) we know a runtime will be present. > 3. Can marshal objects from one runtime to another because only the > relevant data for the objects is persisted to the other side. > > A combined approach would be possible if and only if the marshalling > logic can be modified to work without a Ruby runtime present, since the > limitations of Java serialization prevent us from providing a rich > object deserializer when we aren't initiating the serialization or > deserialization process. > > Think of it like this: You want to serialize a graph of Java objects and > send them to a C-based server...without a Java runtime on the other end, > you wouldn't be able to do anything with those objects. > > Hopefully this clears things up a bit... > > - Charlie > _______________________________________________ > Jruby-extras-devel mailing list > [email protected] > http://rubyforge.org/mailman/listinfo/jruby-extras-devel > _______________________________________________ Jruby-extras-devel mailing list [email protected] http://rubyforge.org/mailman/listinfo/jruby-extras-devel
