私はリモートJBoss 5サーバー上のEJBを両方とも呼び出す2つのTomcat 6インスタンスを持っています。EJB3メソッドのハッシュはどこでどのように計算されますか?
両方のTomcatsに同じクライアントコードをデプロイすると、EJBメソッドを呼び出すときにアプリケーションサーバーからNullPointerException
が取得され、もう一方では正常に動作します。
デバッガでコードを調べると、呼び出し元のメソッドのハッシュコードが2つの呼び出し間で異なるように見えますが、同じである必要があると想定しています。ハッシュコードが異なるため、org.jboss.ejb3.service.ServiceContainer
にリモートメソッドが見つかりません。
2つの呼び出し間でハッシュコードが異なることがあります。詳しくは、動作中のTomcatはJBossサーバーと同じマシンにありますが、失敗したTomcatはネットワーク経由でJBossに接続する必要があります。両方のTomcatsの接続構成は同じです。
ソリューションは、Tomcatのlibディレクトリにjboss-aspect-jdk50-client_4.2.2.jar
の存在だった - このファイルは、アプリケーションが正しく動作することができ取り除きます。
私がまだ理解していないのは、これがローカルのTomcatインスタンスで動作し、リモートでは動作しない理由です。私は、クラスローディングの順序が多少異なっているか、通信が遠隔であったために別の戦略が使用されたという事実を想定しています。
誰かがこの最後のビットに説明を提供できる場合に備えて、ちょっと質問を開いておきます。
ほとんど私の編集された答えをご覧ください - あなたは説明することができます... – Rich
TomcatはJBossにどのように接続していますか?普通の古いRMI? TomcatのEJB3クライアントコンテナのいくつかの種類? –
JBoss 5クライアントライブラリを使用してjnp:// URL(4.2.2 jar)に接続しています(このコードはJarsのコードではありません。迷路です。 – Rich