きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

setArrayを使う時の注意

昔の日記に書いたことも含めて再度まとめてみる。


J2EE環境では、コネクションラッパーではなく、実際のOracleコネクションを取り出すことが必要。


これは、OracleのArrayを作り出すのに避けては通れない。


iBATISでならTypeHandlerを実装して、一連のことをやる。
型を解決する際にOracle側に命名規則があるので、問題を回避するために自分はプロシージャはパッケージにしなかった。


コレクション型を使う時は、NLS拡張機能のorai18n.jarをクラスバスに通す必要がある。
ここの確証が持てなかったんだけど、ようやく記載されてるマニュアルを見つけた。


orai18n.jarは、10gのojdbc14.jar用と、11gのojdbc5.jarおよびojdbc6.jar用があるので間違えずに使おう。


コレクション型を使ったプロシージャの場合、SYS.DBMS_PICKLERという謎のパッケージのファンクションがどこかで動いている節がAWRレポートから読み取れた。何をやってるのかググっても分からない。


WebSphere6.1.0.19にて、JDBCプロバイダを作成し、ojdbc5.jarおよびorai18n.jarにクラスバスを通す。
困ったことに、ojdbc14.jarにクラスバスが通っていると上手く動かない。
それはSystemOut.logに出力されるドライババージョンにて確認できる。
古いJDBCプロバイダおよびWebSphere変数、データソースを削除してしまえば、この事象は回避できる。
同一APサーバで、バージョンの異なるドライバを読み込めないっつーことになってしまう。ひょっとすると、同一Nodeでもアカンかもなー。そういう本番構成を聞いたことないので、あまり問題だとは感じない。


このあたりを注意しとけば、コレクション型を引数にとるプロシージャを呼び出せるようになるべ。