Quantcast

Blobs

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Blobs

John Eichelsdorfer
Been doing a lot of development lately implementing our document repository.  Specifics include OJB 1.0.4 and MySql 5.0 with a fairly recent driver.

We were using LONGVARCHAR to represent long textual information, but was hoping to make it a bit more generic by changing over to using a BLOB.

Our mapping is:
<class-descriptor class="com.comp.prod.model.document.DocumentContentVO"
        table="doc_content">
        <object-cache
                class="org.apache.ojb.broker.cache.ObjectCacheDefaultImpl">
                <attribute attribute-name="timeout" attribute-value="3600" />
        </object-cache>
        <field-descriptor name="docId" column="doc_id"
                jdbc-type="BIGINT" primarykey="true" />
        <field-descriptor name="content" column="content"
                jdbc-type="BLOB" />
</class-descriptor>

Basically our DocumentContentVO contains just the two attributes:

    public Long docId;
    public java.sql.Blob content;

With the appropriate getters and setters.  The MySql database has a nullable content column of type blob.

We were going to use javax.sql.rowset.serial.SerialBlob to add Blobs back into the database, but it never gets this far.  It throws an exception when it attempts to use our mapping to this object above in an initial query.

We get the following error:

Exception: IllegalAccess error setting field:content in object:com.comp.prod.model.document.DocumentContentVO host=0:0:0:0:0:0:0:1:

org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error setting field:content in object:com.comp.prod.model.document.DocumentContentVO
        at org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectImpl.setValueFor(Unknown Source)
        at org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectImpl.set(Unknown Source)
        at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.buildOrRefreshObject(Unknown Source)
        at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectFrom(Unknown Source)
        at org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unknown Source)
        at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown Source)
        at org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(Unknown Source)
        at org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Unknown Source)
        at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
        at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
        at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
        at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown Source)
        at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
        at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Can not set java.sql.Blob field com.comp.prod.model.document.DocumentContentVO.content to [B
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
        at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
        at java.lang.reflect.Field.set(Field.java:657)
        ... 79 more

Any ideas?

Thanks as usual.

John



Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Blobs

Armin Waibel
Hi John,

the LOB-support of OJB 1.0.4 is very rudimentary (AFAIK OJB always
expects that LOB's are byte[] or String fields on java object level).

The upcoming OJB 1.0.5 have more experienced LOB-support (don't remind
me that I announced the release long ago ;-)).
I recommend to give OJB 1.0.5RC1 a try (mysql blobs are supported):
http://www.mail-archive.com/ojb-user%40db.apache.org/msg16078.html
In the included documentation you can find a new howto about LOB's.

regards,
Armin

johne wrote:

> Been doing a lot of development lately implementing our document repository.
> Specifics include OJB 1.0.4 and MySql 5.0 with a fairly recent driver.
>
> We were using LONGVARCHAR to represent long textual information, but was
> hoping to make it a bit more generic by changing over to using a BLOB.
>
> Our mapping is:
> <class-descriptor class="com.comp.prod.model.document.DocumentContentVO"
> table="doc_content">
> <object-cache
> class="org.apache.ojb.broker.cache.ObjectCacheDefaultImpl">
> <attribute attribute-name="timeout" attribute-value="3600" />
> </object-cache>
> <field-descriptor name="docId" column="doc_id"
> jdbc-type="BIGINT" primarykey="true" />
> <field-descriptor name="content" column="content"
> jdbc-type="BLOB" />
> </class-descriptor>
>
> Basically our DocumentContentVO contains just the two attributes:
>
>     public Long docId;
>     public java.sql.Blob content;
>
> With the appropriate getters and setters.  The MySql database has a nullable
> content column of type blob.
>
> We were going to use javax.sql.rowset.serial.SerialBlob to add Blobs back
> into the database, but it never gets this far.  It throws an exception when
> it attempts to use our mapping to this object above in an initial query.
>
> We get the following error:
>
> Exception: IllegalAccess error setting field:content in
> object:com.comp.prod.model.document.DocumentContentVO host=0:0:0:0:0:0:0:1:
>
> org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error
> setting field:content in
> object:com.comp.prod.model.document.DocumentContentVO
>         at
> org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectImpl.setValueFor(Unknown
> Source)
>         at
> org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectImpl.set(Unknown
> Source)
>         at
> org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.buildOrRefreshObject(Unknown
> Source)
>         at
> org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectFrom(Unknown
> Source)
>         at
> org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unknown
> Source)
>         at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown Source)
>         at
> org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
> Source)
> Caused by: java.lang.IllegalArgumentException: Can not set java.sql.Blob
> field com.comp.prod.model.document.DocumentContentVO.content to [B
>         at
> sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
>         at
> sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
>         at
> sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
>         at java.lang.reflect.Field.set(Field.java:657)
>         ... 79 more
>
> Any ideas?
>
> Thanks as usual.
>
> John
>
>
>
>
>
> -----
> JohnE
>
> http://www.jobbank.com jobbank.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Loading...