[hibernate-dev] Re: Hibernate Search: approval for changes, "commit conventions"?

Emmanuel Bernard emmanuel at hibernate.org
Fri May 30 10:51:16 EDT 2008


On  May 30, 2008, at 02:31, Sanne Grinovero wrote:

> 2008/5/30 Max Rydahl Andersen <max.andersen at redhat.com>:
>>>> 3)//TODO set a serial number
>>>> May I auto-generate a serialVersionUID for classes were missing,
>>>> or do you have some special policy about them I should be aware of?
>>>
>>> I never understood that part of Java, you are free to go :)
>>
>> Please just remember that just because tools (like eclipse and  
>> others) warns about a missing serialversionUID it
>> does not mean it should be there. Simon Kicthing described it well  
>> in HBX-444:
>>
>> "When you declare a serialVersionUID you're also declaring that you  
>> are aware of all the issues regarding serialising one version of a  
>> class and reimporting the serialized data into a different version  
>> of the class, and are promising to update the serialVersionUID  
>> whenever you make an *incompatible* change to the class.
>>
>> However most people don't have a clue what is and what is not a  
>> serialization-incompatible-change to a class. In this situation I  
>> think the default behaviour (which is that the serialization  
>> mechanism declares incompatibility if *any* change occurs to the  
>> class) is much safer than having an auto-generated serialVersionUID  
>> on the class resulting in potientially corrupted objects on  
>> deserialization."
>>
>> Just my 2 cents...
>> -max
>>
>
> Thanks a lot Max for clarifying,
> your 2 cents are valuable.
>
> I knew about the requirement to change the UID, but really hadn't a
> clue about the default behaviour:
> I thought it was "unspecified" and I really dislike that word.
> I agree with you it looks like safest to generally skip it, still I
> was curious about the comment
> "//TODO set a serial number" : someone thinks we need one, and
> probably knows better than me.
>
> Could it be useful (or do you have any requirement) to maintain
> compatibility across "some" (please define) versions?


Simon's explanation is the reason why I usually leave it out.
That being said, the class marked as "//TODO set a serial number" is  
the WorkQueue. That's a left over. It really should have been  
LuceneWork which is passed along serialized in JMS (and potentially  
other ways of communication).
I have removed the TODO from WorkQueue and added a clear JavaDoc in  
LuceneWork

  * WARNING: This class aims to be serializable and passed in an  
asynchronous way across VMs
  *          any non backward compatible serialization change should  
be done with great care
  *          and publically announced. Specifically, new versions of  
Hibernate Search should be
  *          able to handle changes produced by older versions of  
Hibernate Search if reasonably possible.
  *          That is why each subclass susceptible to be pass along  
have a magic serialization number
  *          NOTE: we are relying on Lucene's Document to play nice  
unfortunately






More information about the hibernate-dev mailing list