2

いくつかの外部ライブラリを使用する ebj があります (この場合、これらのライブラリは自分で作成したものです)。それらを EJB に含めました。

問題は、glassfish が必要な jar を 1 回だけ (最初の展開時に) ロードするように見え、さらに展開するための jar を既に持っていると見なすことです。これは単なる仮定ですが、EJB が使用するライブラリの 1 つに変更を加え、EJB を再デプロイすると、加えられた変更は適用されません...Glassfish は、キャッシュなどに保持している可能性のある古い jar を引き続き使用します (グラスフィッシュのリポジトリで瓶の痕跡を見つけることができます)。

これまでに見つけた唯一の解決策は、サーバーを再起動することです...小さな変更を加えるたびにglassfishが再起動するのを待たなければならない開発/テストセッションにはあまり適していません。

私の質問は次のとおりです:この動作を回避し、glassfish が展開ごとに必要な jar を強制的にリロードする方法はありますか?

私を読んでくれてありがとう。

注: 私はローカルで netbeans を使用して展開していますが、glassfish 管理コンソールから直接実行しても同じ結果になります。

4

2 に答える 2

0

Windows プラットフォームの Glassfish 3.1.2 でも同じ問題が発生しました。アプリケーションが IDE から削除または再デプロイされているとき、何かがそれらのファイルを開いているため、(明らかに) Windows はデプロイ操作でそれらを削除できません。

私の解決策は、より動的で高速な「ディレクトリ展開」ではなく、各パブリッシュで「展開用のリアル Jar アーカイブ」を使用して展開を「完全展開」に変更することでした。

Netbeans を使用しなくなったため、Netbeans に対してこの変更を行う方法/方法がわかりません。

ServersEclipse の場合:ビュー/タブでサーバーをダブルクリックして、サーバーのOverview設定を開きます。ページの一番下の設定は ですUser (sic) Real Jar Archives for Deployment ...。チェックして(デフォルトではチェックされていません)、もう一度やり直してください。

于 2012-07-31T15:58:09.267 に答える
0

わかりましたので、ようやく具体的な結果が得られました。多くの人が私のやり方で働いているかどうかはわかりませんが、私のニーズに合った解決策を公開します.

まず、netbeans プラットフォームを使用して (つまり、netbeans プラグインを使用して) スタンドアロンの Java クライアントに EJB をデプロイする場合、不安を感じるかもしれません。

問題は、EJB を再デプロイするときに、glassfish (3.1.2、他のリリースで同じ問題が発生するかどうかはわかりません) が必要な jar をリロードしないことでした。そのため、EJB にいくつかの依存関係があり、それらに変更が加えられた場合、glassfish はそれらを認識せず、EJB (再) デプロイ後も古い jar を使用し続けます。オラクルによってバグとしてタグ付けされているので、すぐに解決されると思います(または解決されない)が、オラクルが仕事をするまで、ここに解決策があります.

注: このエラーは、EJB に netbeans プラグインの依存関係がある場合にのみ発生します。そうでない場合は、EJB をエンタープライズ アプリケーションに追加してデプロイするだけで、jar が自動的に再ロードされます。

あなたが私の場合だと仮定します。netbeans プラグインに依存する EJB を含む EE アプリケーションをコンパイルする場合。次のエラーが発生する場合があります。

Target "dist-ear" does not exist in the project "the path your netbeans plugin"

これを解決するために、プラグインのbuild-impl.xmlファイルにターゲットを追加しました。

<target name="dist-ear" />

次に、エンタープライズ アプリケーションの依存関係として netbeans プラグインを追加します。

アプリケーションを再デプロイした後、EJB の依存関係が読み込まれている可能性があり、glassfish サーバーを再起動する必要はありません。

于 2012-08-01T11:17:28.077 に答える