- PR -

WASCE+Oracle独自JDBCメソッド使用方法について

1
投稿者投稿内容
wonkeun
会議室デビュー日: 2008/10/14
投稿数: 2
投稿日時: 2008-10-14 19:10
[環境]
WASCE:Ver2.0.0.1
eclipse:3.3.2
Oracle:Oracle Database 10g Express Edition
Java:1.5

上記環境にてOralce独自クラスメソッド(OraclePrepaedStatement.setFixedCHAR)
を使用したいと考えております。

[作業内容]
@管理コンソール画面にてコネクションプールの設定(Oracle Thin)
Aモジュール側にてJNDIでデータソースを取得。
BAにて取得したデータソースよりコネクション情報を取得。
Cコネクション情報よりPrepaerdStatementを取得。
D条件セット→エラー発生。

以下Java内でのロジックです。参考にして頂いてご回答いただければ幸いです。

[Javaソース]
//データソース取得
Context ctx =new InitialContext();
ds = (DataSource)ctx.lookup("プール名")

//コネクション取得
Connection con = ds.getConnection();

//PrepaerdStament作成
PrepaerdStatement ps = con.prepaerdStatement("SQL文");

//条件セット(オラクル固有のメソッドを使用したいためキャスト)
(OraclePrepaedStatement) ps.setFixedCHAR(1,value)
※ここでClassCastExceptionが発生します。

推測で、汎用的なライブラリ(tranql-connector-ra)がOracle独自クラスをサポートしていないと
思うのですが、この場合、どのように設定すればオラクル固有クラスを使用することが可能ですか?
※ちなみにWebOTXから取得したコネクションでは上記ソースは正常に動作します。

仕様上、setFixedCHAR+Wasceを絶対に使用することは前提となっているので、
使用しないという対応策以外でお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-10-15 01:50
Connection や PreparedStatement の実際の型を getClass().getName() で調べてみましょう。
型が分かればソースコードを見て、ラップしているオリジナルの型を取得できるメソッドが定義されているかどうか確認できますね。
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2008-10-15 06:34
コードベースのGeronimoでもそうですが、TranQLコネクターは純粋にJDBC APIをWrapしたものなので、非JDBC APIを呼び出すことは多分できません。
インギさんがコメントしたとおり、最悪TranQLコネクターを改訂する方法しかないかもしれません。
TranQLのソースコードは、ここから確認できます。

なお、WASCEはソースコード非公開であるため、ライセンス上バイナリーファイルの改訂はできません(有償サポートによって配布されたパッチ等の修正プログラムの適用は除く)。ただし、TranQLコネクターについては、その条件から除外されているはずです。ライセンスを再度確認してください。
wonkeun
会議室デビュー日: 2008/10/14
投稿数: 2
投稿日時: 2008-10-15 10:11
>インギ様、おがわ様
ご回答ありがとうございます。Connection、PreparedStatementを調査して
最悪の場合TranQLコネクターにOracleデータソースが取得できるような
仕組みを組み入れることになるわけですね。

まずは調査+ソースコードを入手していろいろと試してみたいと思います。
また何かありましたら記載させて頂きます。書き込みありがとうございます。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2008-10-15 11:02
リフレクションでラッパー内部のPreparedStatementを
取得すれば使えるんじゃないですか?

SecurityManagerに許可さえされれば
privateだろうとsetAccessible()でアクセスできます。

変更に対する弱さとしてはソース修正と似たようなものですが、
お手軽に試せます。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-10-15 12:23
TranQLが何をやっているかを、実際にソースを見てないので分かりませんが、
実際のコネクションやステートメントに対する委譲処理の、
その前後で何を行っているかをきちんと精査した方がよいかと思います。

トランザクションの制御が関わってくる場面で、
処理をインターセプトしているだけだと思うので、
恐らくset系の値設定系メソッドなら、
特に問題にはならないかもしれませんけど。
1

スキルアップ/キャリアアップ(JOB@IT)