facebook

SUID generation for Beans implementing Serializable

  1. MyEclipse IDE
  2.  > 
  3. Java EE Development (EJB, JSP, Struts, XDoclet, etc.)
Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #256046 Reply

    Does anyone know of a convenient way to create SUIDs for JavaBeans implementing the Serializable Interface? I consider the tool serialver which comes with the JDK very UNCONVENIENT since you have to pass the entire classpath manually for every bean! According to the documentation it is recommended to define the SUIDs in code rather then let the compiler generate it. Also Eclipse generates a warning if it cannot find a declaration such as

    static final long serialVersionUID = {the generated SUID}L;

    I guess there should be a tool in Eclipse/MyEclipse to perform this operation since JavaBeans are used a lot in Web Applications and JavaBeans that remain in Session Scope should definitely be serializable. Unfortunately I did not find something. So what is the recommended way to do this?

    Any hint would be greatly appreciated.

    Tom

    #256096 Reply

    Riyad Kalla
    Member

    Highlight the warning and either use CTRL-1 or use the quick fix to perform a “Generate” for the SUID.

    #256131 Reply

    Hmmm.., I found this solution yesterday but it gives me an error and always returns 1L for all classes!

    The error is: The archive: /MapOnAirLib/MapOnAirLib.jar which is referenced by the classpath, does not exist.

    This library is something I have written and which is used in several of my classes. They just compile fine. What I do NOT understand is the path! It is not stored in a directory called /MapOnAirLib! For deployment it is in WEB-INF\lib as a JAR file. The IDE includes the JAR file from a different directory on the harddisk, basically it is in a different Eclipse project.

    So I guess that this path is wrong but I have no idea, how it composes this path!

    After that error MyEclipse generates the following code:

    /**
    * Comment for <code>serialVersionUID</code>
    */
    private static final long serialVersionUID = 1L;

    It does this in every class!

    Do you have any idea, what I should check?

    Many thanks.

    Tom

    #256136 Reply

    Riyad Kalla
    Member

    To clarify, the JDT is providing this functionalty, MyEclipse doesn’t instrument the Java editor.

    Is your error a runtime error a compilation error? If it’s a compilation error (which it looks like) I’d suggest you clean our your build path and make sure it’s correct, possibly removing any stale entries or ones marked with exclamation points.

    #256162 Reply

    Hello Riyad,

    No it is not a compilation error. The app compiles and runs fine!

    The message box with the above mentionned error message appears when I highlite the warning message and click ‘Quick fix’ and then select ‘add generated serial version id’. If I select ‘add default serial version id’ it works without error message but adds 1L as value for servialVersionUID.

    I don’t know what JDT does but it seems it likes to calculate the hash depending on what is in my class and does for whatever reason NOT find this library.

    I probably number the IDs myself, if I do not find a solution.

    Tom.

    #256163 Reply

    Riyad Kalla
    Member

    Tom,
    From what you said and how I understand it now, this is a popup error when you try and generate a real SUID for your class, correct? No idea why this is popping up to be honest… does your class reference anything from that JAR?

    If you check your project Build Path under Libraries, do any of the libraries have exclamation points next to them?

    #256164 Reply

    I searched Google, and I found that this seems to be a known bug. I currently run 3.1.1 and will upgrade to 3.1.2. I also found some statements, that the bug appears again in 3.2…! So I have to try and error….

    Tom

    #256165 Reply

    Riyad Kalla
    Member

    Very strange, keep us posted. Thanks for doing some research to get to the bottom of this.

    #256170 Reply

    Unfortunately the upgrade to 3.1.2 did not help at all.

    In my .classpath file I have:

    <classpathentry sourcepath=”D:/Projects/Eclipse/Libraries/MapOnAirLib/src” kind=”lib” path=”D:/Projects/Eclipse/Libraries/MapOnAirLib/MapOnAirLib.jar”/>

    I still get this popup error ‘The archive: /MapOnAirLib/MapOnAirLib.jar which is referenced by the classpath, does not exist.’

    So this path is not correct but I have no idea why. Of course there are no exclamation points etc. But I think this tool starts a new JVM and it looks very much like it would not take over the classpath or other environment variables correctly. Somewhere I read something like it is dependent on the order…..

    I probably post this on a Eclipse forum.

    Tom

    #256172 Reply

    Riyad Kalla
    Member

    Open windows explorer, copy and paste that path: D:/Projects/Eclipse/Libraries/MapOnAirLib/MapOnAirLib.jar
    into it, and hit enter. Does it work?

    #256181 Reply

    Yes it does, the jar is opened in my winzip program!

    Tom

    #256188 Reply

    Riyad Kalla
    Member

    Very frustrating, I’m not sure what to say.

    #256294 Reply

    Final followup to this topic.

    I posted the question in the Eclipse forum. To summarize the discussion here the outcomings:

    a) this feature seems to be rarely used. People seem to disable the warning in the IDE configuration.
    b) Those who do NOT want to disable warnings create their own numbering scheme, usually in a very simple way: starting at 1 and increase by 1 for every new class and version.

    This is what I proposed earlier, so I think there is not more to say about it.

    Cheers

    Tom

Viewing 13 posts - 1 through 13 (of 13 total)
Reply To: SUID generation for Beans implementing Serializable

You must be logged in to post in the forum log in