cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Kienenberger <mkien...@gmail.com>
Subject Re: Cayenne-generated classes need @SuppressWarnings("serial")
Date Tue, 04 Oct 2011 13:54:56 GMT
I am not an expert on serialization, and it's been a long time since I
looked into it.

By a strange coincidence, the only cayenne project I wrote involving
serialization is the legacy Cayenne 1.2 app I am doing maintenance on
this week, after having not touched it in four or more years.

However, a quick google on the subject turns up these facts:

-- SerialVersionUID seems to matter on the generated subclass,
especially since this is where all of the state of CayenneDataObject
exists.  But I can only infer this -- I cannot find a specific
statement.  [1] [2]

- Having no SerialVersionUID is better than having a wrong or
unmaintained SerialVersionID since by default "the serialization
runtime will calculate a default serialVersionUID value for that class
based on various aspects of the class". [1]

- The default SerialVersionUID is only "bad" in that different JVM
runtimes may not return the same UID.   Here is a simpler methodology
for generating a SerialVersionUID than building it ourselves which
should do what is necessary, so long as two compile processs do not
return the same value for a specific changed class.

        Class cl = generatedClass.getClass();
        long uid = ObjectStreamClass.lookup(cl).getSerialVersionUID();

        The value of uid will be the same as the value printed out by
'serialver'. [3]

And this value would in turn be the same value used by the runtime
serialization.


[1] http://download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.html
[2] http://java.sun.com/javase/technologies/core/basic/serializationFAQ.jsp#serialsuper
[3] http://www.jguru.com/faq/printablefaq.jsp?topic=Serialization

On Tue, Oct 4, 2011 at 5:48 AM, Durchholz, Joachim
<Joachim.Durchholz@hennig-fahrzeugteile.de> wrote:
> Are generated classes ever instantiated via new?
> If not, SerialVersionUID does not serve any useful purpose, it's the programmer-written
subclass that gets asked for the SerialVersionUID.
> In that case, it may help to declare the generated classes abstract. Abstract classes
cannot be deserialized, so the compiler should not complain.
>
> An aside note:
> Adding @SuppressWarnings might not be the best way to go, most warning names are not
standardized and hence differ between compilers.
> I'm not sure whether "serial" is a standardized warning. I think it isn't but don't know
the reference doc to use for checking.
>
> Regards,
> Jo
>

Mime
View raw message