3

主な顧客向けアプリケーションとバックエンド Web サービスとの間のインターフェースとなる、多数の Web サービス クライアント アプリケーションがあります。これらの Web サービス アプリケーションは、独自の JAXWS スタブ コードを生成して、Web サービスおよび実装コードと直接やり取りし、JAXWS コードとそれを使用する任意のアプリケーションとの間のクリーンなインターフェイスを提供します。ここ数週間、これらに関していくつかの小さな問題がありましたが、それらのほとんどは解決されました。

これらを顧客向けアプリケーションに統合する段階になったとき、主に JDK1.5 と 1.6 の非互換性に焦点を当てた多数の問題に遭遇しました。これらは現在解決されていますが、解決策のない別の問題が発生しています。Web サービス クライアントは AOP を使用して、ヘッダー資格情報、例外処理、スロットリングなどの一般的な設定を行います。

<aop:config>
    <aop:pointcut id="pointcut" expression="execution(* MyService.*(..))" />

    <aop:aspect id="throttling" ref="throttlingAdvisor">
        <aop:around pointcut-ref="pointcut" method="doThrottle" />
 </aop:aspect>
    <aop:aspect id="errorHandling" ref="errorHandlingAdvisor">
        <aop:around pointcut-ref="pointcut" method="handleExceptions" />

各アスペクトは POJO Bean を参照します。これらの Bean には、org.aspectj.lang.ProceedingJoinPoint のメソッド パラメータ タイプを使用して構成に記述されたメソッドが含まれます。これは、インターセプトしているメソッドの引数を抽出するために使用されます。

これらは、Web サービス クライアントごとに 1 つずつあります (applicationContext-webservicename.xml 内)。この xml ファイルは、パッケージ化された JAR に含まれています。この JAR は顧客向けアプリケーションに含まれ、顧客向けアプリケーションの web.xml によってロードされるメインの applicationContext.xml にインポートされます。

これらの Web クライアントには多数の単体テストがあり、すべて合格しており、個別に問題がないことを証明しています。すべてのサービスが顧客向けアプリケーションに含まれている場合、起動時に java.lang.NoClassDefFoundError: ProceedingJoinPoint 例外が発生します (JDK1.5.0_17 で tomcat 5.5 を使用しています)。

特別な意味がある場合に備えて、java.lang.NoClassDefFoundError の JavaDoc を調べました。JVM がクラスが存在しないと考えているようです。次に、見つからないと主張しているクラス(aspectjrt-1.5.4.jarおよびaspectjweaver-1.5.4.jar)を含むjarを探しました。これらのクラスの重複があるため、各jarを順番に削除して確認しましたまったく同じエラーが発生します。

必要な依存関係がありませんか? この問題の一般的な原因はありますか (昨日これを検索しましたが、あまり見つかりませんでした)。どんな助けでも大歓迎です。

4

3 に答える 3

1

この間ずっと、この問題の解決策を見つけることができました。SVNコミットが検出されたときに、Bambooを使用してプロジェクトをビルドします。竹の環境は、依存プロジェクトを構築したときに開発マシンと一致するように設定されていましたが、この奇妙な問題が発生しました。

なぜこれが行われたのかはまだわかりませんが、その間、この特定のプロジェクトを手動でビルドしてデプロイしています。

同様の問題が発生している人への私のアドバイスは、内部のMavenリポジトリから自分を隔離し、すべてのプロジェクトをローカルで再構築することです。

みんなの助けてくれてありがとう。

于 2009-11-23T10:09:07.647 に答える
0

クラスローダーの問題である可能性があります。AspectJ JARはどこにありますか?WEB-INF / libにそれらがある場合は、Tomcat common / libにコピーして、それが役立つかどうかを確認してみてください。

アプリサーバーのクラスローダーが起動時にそれらを必要としている可能性がありますが、アプリケーションクラスローダーはクラスローダー階層の下位にあるため、WEB-INFからそれらを取得していません。

于 2009-11-03T11:06:55.017 に答える
0

spectjrt.jar のみを server/lib フォルダーに追加します。aspectjweaver.jar は追加しません。重複したクラスも混乱を招く可能性があります。ランタイム jar (「rt」はランタイムを表します) は、ランタイム用に想定されています。ウィーバー jar は、コンパイル/ウィーブ時に使用されます。LTWまたはCTWを使用していますか?

于 2009-11-03T11:47:31.663 に答える