[Oracle] Java ストアドプロシージャで Java クラス・ライブラリを使用する | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

Oracle の Java ストアドプロシージャで使用する Java クラスの中で、Oracle が用意していない Java クラス・ライブラリを参照する必要がある場合、これらを Oracle で使えるようにするにはどうすればいいのか。

普通の Java 的に考えると JAR ファイルや ZIP ファイルとして用意されている Java クラス・ライブラリをどこかのフォルダに配置して、 CLASSPATH を設定してやればいいように思うのですが、どうもそうではないようです。

Oracle では CLASSPATH に変わる参照の解決の機能として”リゾルバ”なるものが用意されており、これによって Java クラス間の参照が解決されるという仕様になっています。

この時、参照関係にある Java クラスは、スキーマ・オブジェクトとしてロードされている必要があります。

つまり、JAR ファイルや ZIP ファイルも .class ファイルと同様に Oracle 上にロードしてやらなければならないということになります。

Oracle に Java クラスをロードするには、loadjava ユーティリティを使う方法と、CREATE JAVA 文を使う方法がありますが、JAR ファイルや ZIP ファイルをロードできるのは loadjava ユーティリティだけです。

例えば、SCOTT スキーマに commons.jar という JAR ファイルをロードする場合、コマンドプロンプトから以下のように実行します。

loadjava -user scott/tiger commons.jar

このように JAR ファイルや ZIP ファイルを指定して loadjava ユーティリティを実行すると、アーカイブが展開され、個々のクラスが別々のスキーマ・オブジェクトとして Oracle上 にロードされ、Java クラス間の参照の解決が行われるということです。

大量のクラスを含む Java クラス・ライブラリの場合、大量のスキーマ・オブジェクトがロードされてしまい、うっとおしいですが、どうやらこのようにするしかないらしいです^^;



【関連エントリ】
[Oracle] Java ストアドプロシージャの利用法 2004/07/30
[Oracle] Java ストアドプロシージャで日本語ファイル名が扱えない 2004/12/27
[Oracle] loadjava ユーティリティが落ちる? 2006/06/29
[Oracle] Java ストアドプロシージャで Java クラス・ライブラリを使用する 2006/07/05
[Oracle] Java ストアドプロシージャで DLL を使用する際の注意点 2006/07/11