[Seasar-user:7696] Re: セッションレプリケーションで例外発生

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 5月 18日 (金) 18:18:21 JST


土居と申します。

以前OracleでLOBデータを扱った時に、色々はまりました。

Oracleのマニュアルには下記のように書かれています。
---- Oracleのマニュアルより抜粋 ここから ----
重要: JDBC 2.0 の仕様では、PreparedStatement のメソッド
setBinaryStream() およびsetObject() を使用して、ストリーム値
をBLOB として入力でき、また、PreparedStatement のメソッド
setAsciiStream()、setUnicodeStream()、
setCharacterStream() およびsetObject() を使用して、ストリーム
値をCLOB として入力できると規定されています。これにより、LOB ロ
ケータを通さず、直接LOB データ自体にアクセスできます。
Oracle JDBC ドライバの実装では、この機能はリリース8.1.6 以上のデータ
ベースおよび8.1.6 以上のJDBC OCI ドライバを使用した構成でのみサ
ポートされます。その他の構成では、この機能を使用しないでください。
データが破損する可能性があります。
---- Oracleのマニュアルより抜粋 ここまで ----

OracleのThinドライバでは、setBinaryStream()がサポートされていない
のが原因ではないでしょうか?

以前はまった時には、データのINSERT/UPDATEは正常に終了しているのに
データが正しく書き込まれませんでした。

OracleのOCIドライバで試す事ができるのであれば、OCIドライバを
試してみると良いかもしれません。

>ひがさん、中村さん
>
>松崎です。返信ありがとうございます。
>
>> 9iで、byte[]をPreparedStatement#setObject();で
>> 更新できるでしょうか。
>できました。
>
>> 4つ質問があります。
>> 1.使用されているJDBCドライバーのバージョンはいくつでしょうか
>> 2.JDBCドライバーのタイプはType2でしょうかType4でしょうか
>> 3.シリアライズしようとしているオブジェクトのサイズはどれくらいでしょうか
>> 4.エラーはかならず起きますか(成功することもありますか)
>1. ojdbc14.jar、nls_charset12.jar共に9.0.2.0.0です。
>2. Type4を使ってます。
>3. オブジェクトのサイズは数百バイトです。
>4. 必ず起きます。
>
>また、
>org.seasar.extension.httpsession.impl.DbSessionStateManagerImplTest
>のテストを実行しましたが、testUpdateState_insertTxと
>testUpdateState_updateTxで画面で操作した時と同じ例外が発生しました。

<snip />

===OHNS===========================================================
沖縄日立ネットワークシステムズ株式会社 (http://www.ohns.co.jp/)
        沖縄システム部 沖縄第1開発課
                 土居 俊彦 (DOI Toshihiko)
    本    社     TEL:098-868-8420 FAX:098-866-1135 
嘉手納開発センタ TEL:098-921-8111 FAX:098-921-8113 (内線:7854-5433)
===========================================================OHNS===



Seasar-user メーリングリストの案内