You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Charles Moulliard <cm...@gmail.com> on 2012/02/28 09:26:14 UTC

EOFException during UUID deserialize

Hi,

I get the following exception with OpenJPA 2.1.1 deserialize a UUID Type
from a H2 Database. IS there a trick ?

Caused by: java.io.EOFException
	at
java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
[classes.jar:1.6.0_29]
	at
java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3018)
[classes.jar:1.6.0_29]
	at
java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2819)
[classes.jar:1.6.0_29]
	at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1050)
[classes.jar:1.6.0_29]
	at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:616)
[classes.jar:1.6.0_29]
	at
java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:808)
[classes.jar:1.6.0_29]
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1564)
[classes.jar:1.6.0_29]
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
[classes.jar:1.6.0_29]
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
[classes.jar:1.6.0_29]
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
[classes.jar:1.6.0_29]
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
[classes.jar:1.6.0_29]
	at org.apache.openjpa.util.Serialization.deserialize(Serialization.java:86)
[openjpa-all-2.1.1.jar:2.1.1]

Model

@Entity
@Table(name = "T_REQUEST")
@NamedQueries({
        @NamedQuery(
                name = "findRequestById",
                query = "SELECT req FROM Request req WHERE req.id = :id"
        ),
        @NamedQuery(
                name = "findAllRequests",
                query = "SELECT req FROM Request req"
        )
})
public class Request implements java.io.Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "REQUEST_ID")
    private Long id;

    @Column(name = "TRACKING_ID")
    @Transient
    private UUID trackingId;

....

DB Script 

CREATE TABLE PUBLIC.T_REQUEST (
    REQUEST_ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT
NULL PRIMARY KEY,
    REQUESTER VARCHAR(50),
    TRACKING_ID UUID,
    STATUS_APP1 VARCHAR(10),
    STATUS_APP2 VARCHAR(10),
    DESCRIPTION VARCHAR(50),
    REPLY_TO VARCHAR(70),
    CREATION_DATE TIMESTAMP,
    MODIFICATION_DATE TIMESTAMP
);

Regards,

Charles

--
View this message in context: http://openjpa.208410.n2.nabble.com/EOFException-during-UUID-deserialize-tp7324828p7324828.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: EOFException during UUID deserialize

Posted by Pawel Veselov <pa...@gmail.com>.
Hi.

You are using special data type UUID in H2 database. You are using 
Object type in an entity. JPA doesn't have special support for UUID java 
type. So, it stores it as serialized data, which is in database terms is 
a binary BLOB. That serialized byte array doesn't quite fit into the 
UUID type in H2 database.

If OpenJPA has an adapter framework to support custom types (not that I 
know it does), that would be the best thing to use here.

Otherwise, you either need to declare your trackingId entity field as 
String (dunno what H2 would say to that), or declare your trackingId 
column as BLOB. Neither of those options sound good for what you are 
probably trying to do, so I would normalize both the field, and the 
column to be strings (for H2, you can use VARCHAR_IGNORECASE even). You 
can have helper UUID getTrackingIdUUID() and setTrackingIdUUID(UUID) 
methods in your entity, that would convert a string into UUID and back, 
depending on whether it's a set or a get.

Thanks,
   Pawel.

On 02/28/2012 12:26 AM, Charles Moulliard wrote:
> Hi,
>
> I get the following exception with OpenJPA 2.1.1 deserialize a UUID Type
> from a H2 Database. IS there a trick ?
>
> Caused by: java.io.EOFException
> 	at
> java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
> [classes.jar:1.6.0_29]
> 	at
> java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3018)
> [classes.jar:1.6.0_29]
> 	at
> java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2819)
> [classes.jar:1.6.0_29]
> 	at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1050)
> [classes.jar:1.6.0_29]
> 	at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:616)
> [classes.jar:1.6.0_29]
> 	at
> java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:808)
> [classes.jar:1.6.0_29]
> 	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1564)
> [classes.jar:1.6.0_29]
> 	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
> [classes.jar:1.6.0_29]
> 	at
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
> [classes.jar:1.6.0_29]
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
> [classes.jar:1.6.0_29]
> 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
> [classes.jar:1.6.0_29]
> 	at org.apache.openjpa.util.Serialization.deserialize(Serialization.java:86)
> [openjpa-all-2.1.1.jar:2.1.1]
>
> Model
>
> @Entity
> @Table(name = "T_REQUEST")
> @NamedQueries({
>          @NamedQuery(
>                  name = "findRequestById",
>                  query = "SELECT req FROM Request req WHERE req.id = :id"
>          ),
>          @NamedQuery(
>                  name = "findAllRequests",
>                  query = "SELECT req FROM Request req"
>          )
> })
> public class Request implements java.io.Serializable {
>
>      @Id
>      @GeneratedValue(strategy = GenerationType.AUTO)
>      @Column(name = "REQUEST_ID")
>      private Long id;
>
>      @Column(name = "TRACKING_ID")
>      @Transient
>      private UUID trackingId;
>
> ....
>
> DB Script
>
> CREATE TABLE PUBLIC.T_REQUEST (
>      REQUEST_ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT
> NULL PRIMARY KEY,
>      REQUESTER VARCHAR(50),
>      TRACKING_ID UUID,
>      STATUS_APP1 VARCHAR(10),
>      STATUS_APP2 VARCHAR(10),
>      DESCRIPTION VARCHAR(50),
>      REPLY_TO VARCHAR(70),
>      CREATION_DATE TIMESTAMP,
>      MODIFICATION_DATE TIMESTAMP
> );
>
> Regards,
>
> Charles
>
> --
> View this message in context: http://openjpa.208410.n2.nabble.com/EOFException-during-UUID-deserialize-tp7324828p7324828.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.