Sacha,

Besides Oracle's drivers being a crap, the CLOB and all SQL 99 types 
could use improvement.  Supposedly Oracle's new 9.0.2 drivers fix most 
of these problems.  Fixing general Object persistence is the first think 
I will be working on after I finish the docs (this week), so I will look 
at this then.  I am even planing on putting a hack in just for Oracle's 
BLOB problems, so I can also put one in for CLOBS.  Normally I wouldn't 
put a hack in for a vendor but Oracle it to huge.  The flag of this 
option will be some thing <oracle-sucks-and-i-use-it>.  =)

-dain

Sacha Labourey wrote:

> Hello Dain,
> 
> I had to look at the JAWS code and how it handled CLOB and have found
> numerous issues (see my previous post on jboss-dev).
> 
> I've quickly taken a look at the new ejb2.0 code you implemented and saw
> that you're using about the same code for CLOBs. Thus, I think that your
> code will have trouble handling CLOBs.
> 
> Some quick info I found by looking at jaws:
> 
> - the "read-CLOB" code is actually never used: the code is there but is
> never reached. The code tests if the field is a string and try to read it
> from the recordset by using getString. In Oracle, for example, this will
> return null and not raise an exception => null is assigned to the CMP field
> even if the CLOB contains data. A check should be added to use the CLOB code
> if Type.CLOB has been assigned as the JDBC type of the CMP field.
> 
> - the "write-CLOB" code handles BLOB and CLOB in the same way => like binary
> content. This leads to several problems.
> First, the String is wrapped in a MarshalledObject and transformed in a
> byte[] then persisted in the database => the string that is persisted in the
> database is unreadable by any other application (because it is Java-encoded)
> and no SQL Clob-operators can be used in queries.
> Second, and this is more an Oracle issue, we have trouble sending back a
> Clob to the driver. Either we use preparedStatement.setClob or
> preparedStatement.setCharacterStream. I've tried to modify JAWS so it uses
> preparedStatement.setClob and I have coded a new class that implements
> java.sql.Clob (and containing the String) that I send to the
> preparedStatement. Here, we have an Oracle problem: this driver expects a
> oracle.sql.Clob object (and is thus not spec compliant): a CastException
> occurs. So it doesn't work. Secondly, I've used setCharacterStream. I think
> it is the best solution. Nevertheless, we still have a problem: it will only
> work with Oracle OCI driver, not the thin driver!!! So I haven't been able
> to test the code (but at least it works with thin when strings are < 2k).
> 
> What do you think?
> 
> Cheers,
> 
> 
> 
>                       Sacha
> 
> 
> _______________________________________________________________
> Hundreds of nodes, one monster rendering program.
> Now that's a super model! Visit http://clustering.foundries.sf.net/
> 
> _______________________________________________
> Jboss-development mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-development
> 



_______________________________________________________________
Hundreds of nodes, one monster rendering program.
Now that's a super model! Visit http://clustering.foundries.sf.net/

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to