Hello Vasily,

in several projects we had made serialVersionUID mandatory for all
serializables.
And because it's just an id a lot of opinions are coming up in
discussions how to specify it.

Just as clarification, in the approach with the version number it was
not changed with each modification.  Only if a change was causing an
impact to the serialized version.
Rationale was that in case of a mismatch the message would be easier
to interpret then the traditional values.

But I guess the traditional approach would be the preferred.

Regards,
Heinz

On 8/31/06, Zakharov, Vasily M <[EMAIL PROTECTED]> wrote:
Heinz,

Adding serialVersionUIDs to Serializable classes is sure a great idea!
It's strongly recommended by Sun, and all the way helps when dealing
with serialization in large projects.

It's not in fact important what particular value you specify for
serialVersionUID field, the only thing important is you change the
serialVersionUID for a class when its serialized form changes, and ONLY
if its serialized form changes. From this perspective, using class
version number is not a good idea, as a class may be modified (and thus
version number changed), but a serialized form may stay the same, and
changing serialVersionUID would introduce an unnecessary serialization
incompatibility.

The traditional way is to use 'serialver' program from Sun's JDK. If
this way is for some reason uncomfortable for you, you may use some
other way to calculate serialVersionUIDs, like Eclipse built-in feature
or the like. The particular value is not important, only changes to it
are.

Note however, that small values like 1 or 2 are traditionally used as
serialVersionUIDs for synthetic and other system classes, like Enums and
RMI Stubs, that are serialized in a special way. So using such values in
"normal" classes may confuse the future readers of the code and make
them wonder if that particular class is serialized in a special way. So
I'm suggesting using traditional (20-digit or so) values for
serialVersionUIDs.

Thank you!

Vasily Zakharov
Intel Middleware Products Division


-----Original Message-----
From: Heinz Drews [mailto:[EMAIL PROTECTED]
Sent: Thursday, August 31, 2006 9:46 AM
To: geronimo-dev
Subject: Standard for serialVersionUID

As I have mentioned in another message I have accidently used class
files in modules created by Eclipse embeded compiler.  This calculates
serialVersionUID different way then javac.

I think that adding serialVersionUID to all serializable class would
address the situation best.
There are quite a number of class without the uid.  I would volunteer
to add them but which standard should be used?

Eclipse provides the option set it to 1 or  to calculate the uid. But
the calculation is different to the one doen by javac.

In other projects I have found the convention to use version number to
support detection of incompatible modifications.  The version number a
much nicer to read in the message reporting mismatches than the
generated ones.

Least impact would be to calculate the value with the serialver tool.
This avoids the need for redeploying.

Which standard should be chosen?

--Heinz

Reply via email to