0

Oracle データベースを使用する単純な Web サービスがあります。サービスを内部でテストすると正常に動作しますが、クライアント (同じマシン上で別の WAR 内) を介して Web サービスを呼び出すと、invocationtargetexception がスローされます。OracleDriver のインスタンス化に問題があることを最終的に発見しました。例外はまったくスローされないため、エラーが何であるかを見つけることができません。

グーグルは oracle.jdbc.driver.OracleDriver の代わりに oracle.jdbc.driver.OracleDriver を使用するソリューションのみを提供しましたが、それは何も修正していないようです。私が使用しているjarはojdbc14.jarで、私が知る限り、Webサービスのクラスパスに適切に含まれています...単純なメインメソッドでサービスをテストすると機能するためです。

編集: InvocationTargetException は、Axis サーバーからの AxisFault によって生成されます。invocationtargetexception はラッパー クラスであり、.getCause() を使用して例外を抽出しようとすると、常に null が返されます。

jboss を使用してサービスを展開しており、サーバー用ではなくソース用のライブラリにドライバー JAR ファイルを含めていました。/jboss/server/default/lib にドライバーを含めることで解決しました。

4

2 に答える 2

0

詳細な情報がなければ、具体的な提案を提供することは困難です。ただし、ネイティブ OCI ライブラリ経由で接続を試み、システムにインストールされているライブラリが見つからず、InvocationTargetException をスローする Oracle ドライバを使用した経験があります。これはすべて非常に漠然とした記憶によるものであるため、走行距離はほぼ確実に異なります。

しばらく時間が経ちましたが、記憶が正しければ、接続 URL が正しく構成されておらず、OracleDriver (またはそのラッパーの 1 つ) が一連の可能な接続方法を繰り返し、機能する方法を見つけようとしていたことがありました。URL が正しく構成されていた場合、OCI の試行に到達することはありませんでしたが (シン接続メソッドの試行が最初に行われました)、接続 URL が正しく構成されていない場合、シンの試行が失敗し、OCI の試行が発生し、OCI の試行も失敗しました。ホストにOCIクライアントがインストールされていないためです(InvocationTargetExceptionが発生します)。

そのため、確認すべき点がいくつかあります。

  1. 接続 URL は有効ですか? 両方の場所で同じ接続 URL を使用している場合、両方のプロセスが同じ NIC にバインドされていますか? それらが異なる NIC にバインドされている場合、同じホスト上であっても、接続がおかしくなる可能性があります。
  2. どちらの場合も環境は同じですか - OCI クライアントが開発環境で使用されている場合、依存する環境変数がいくつかある可能性があります。これらの環境変数が、サーブレット コンテナーが実行されている環境で同じように設定されていない場合、異なる動作が予想されます。
于 2009-05-26T15:08:56.660 に答える
0

2つの戦争?あなたの ojdbc.jar は、Web サービスの WAR の WEB-INF/lib 内にあると思います。

WAR が EAR 内にある可能性があるため、MANIFEST.MF でドライバーを参照する必要があります。

詳細: http://java.sun.com/j2ee/verified/packaging.html

于 2009-05-26T15:17:25.533 に答える