- - PR -
WASCE+Oracle独自JDBCメソッド使用方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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を絶対に使用することは前提となっているので、 使用しないという対応策以外でお願いします。 |
|
投稿日時: 2008-10-15 01:50
Connection や PreparedStatement の実際の型を getClass().getName() で調べてみましょう。
型が分かればソースコードを見て、ラップしているオリジナルの型を取得できるメソッドが定義されているかどうか確認できますね。 |
|
投稿日時: 2008-10-15 06:34
コードベースのGeronimoでもそうですが、TranQLコネクターは純粋にJDBC APIをWrapしたものなので、非JDBC APIを呼び出すことは多分できません。
インギさんがコメントしたとおり、最悪TranQLコネクターを改訂する方法しかないかもしれません。 TranQLのソースコードは、ここから確認できます。 なお、WASCEはソースコード非公開であるため、ライセンス上バイナリーファイルの改訂はできません(有償サポートによって配布されたパッチ等の修正プログラムの適用は除く)。ただし、TranQLコネクターについては、その条件から除外されているはずです。ライセンスを再度確認してください。 |
|
投稿日時: 2008-10-15 10:11
>インギ様、おがわ様
ご回答ありがとうございます。Connection、PreparedStatementを調査して 最悪の場合TranQLコネクターにOracleデータソースが取得できるような 仕組みを組み入れることになるわけですね。 まずは調査+ソースコードを入手していろいろと試してみたいと思います。 また何かありましたら記載させて頂きます。書き込みありがとうございます。 |
|
投稿日時: 2008-10-15 11:02
リフレクションでラッパー内部のPreparedStatementを
取得すれば使えるんじゃないですか? SecurityManagerに許可さえされれば privateだろうとsetAccessible()でアクセスできます。 変更に対する弱さとしてはソース修正と似たようなものですが、 お手軽に試せます。 |
|
投稿日時: 2008-10-15 12:23
TranQLが何をやっているかを、実際にソースを見てないので分かりませんが、
実際のコネクションやステートメントに対する委譲処理の、 その前後で何を行っているかをきちんと精査した方がよいかと思います。 トランザクションの制御が関わってくる場面で、 処理をインターセプトしているだけだと思うので、 恐らくset系の値設定系メソッドなら、 特に問題にはならないかもしれませんけど。 |
1