Guilhem Lavaux wrote:
Guilhem Lavaux wrote:

Ito Kazumitsu wrote:

Hi,



Hi Ito !



Interested in Prevayler (http://www.prevayler.org/), which is marked untested in our "Compatibility - Application Testing", I tried it.

The result was unsatisfactory.  The simplest demo of Prevayler
cannot run on kaffe.  After studying the cause of the error,
I found something buggy in java.io.ObjectInputStream.

My test program is attaced below.  The test shows that a
field that is marked "final" cannot be restored by
java.io.ObjectInputStream#readObject.


This is linked to ObjectStreamField.java:67


toset = !Modifier.isFinal(field.getModifiers());

I guess it was placed there for a good reason but I don't remember which one. We have to check in the spec again.


The reason was quite evident... you can't set a final variable. It's rather someone sets (or doesn't set) A to the right value when it is initializing a new instance using readObject().


Cheers,

Guilhem.

Actually, the case is getting worse. I have made some more tests and it depends on the compiler you used to build the class files.


KJC or GCJ-3.3.1, executed by sun's VM: s1 is set by ObjectInputStream
Jikes or Sun's javac, executed by sun's VM: s1 is not set by ObjectInputStream, the final value is kept.


Also it seems ObjectInputStream is capable of setting final values. That is a bit annoying as java.lang.reflect.Field's spec says we absolutely cannot.

So there are two problems in one !

I'll give GCJ-CVS a try later and I will have to fix KJC bytecode generation also after all.

Cheers,

Guilhem.


_______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to