On Oct 26, 2005, at 7:39 PM, Matt Hogstrom wrote:
Can I ask why portability is critical? Most VM's (with one notable
exception) use the Sun ORB so depending on it doesn't seem such a big
deal to me, especially if its a necessary evil. I agree support
for J2SE
5.0 is essential, but its pretty easy to write code that supports
both
1.4 and 5.0 ORBs.
There is a single thing in the RMI/IIOP which is difficult to do
portably, and so the new orb needs to have this as a VM-specific plug
in mechanism.
One issue is that RMI needs to be able to write the value of a final
instance field (to de-serialize an object) and this is something that
cannot be done with reflection. So for this we are using
com.sun.Unsafe (which is the internal Sun API to implement
reflection). This is also there in the IBM VMs, but JRockit has
another API to accomplish the same thing.
The other thing is being able to call constructors in the particular
way needed when de-serializing instances of classes that have no
public no-arg constructor. For this, we generally need to call into
VM-specific private static methods also.
Both of the above is something that the given VM's RMI implementaion
(specifically java.io.ObjectStreamClass) would need to realize. So
to the extend that it is permissible to reverse engineer the
implementaition of ObjectStreamClass, we can extract what's needed to
do this.
Apart from this, the ORB can be completely portable.
/Kresten