3

AServlet2つのサーブレットとを含むWebアプリケーションA.warがありますBServlet。どちらもヘルパークラスをインスタンス化しますcom.mycompany.Foo.class(これは私自身のクラスであり、サードパーティのライブラリではありません)。

ここで、2つのサーブレットを2つの別々のWARに分割したいと思います。A.warにはAServletのみが含まれ、新しいB.warには。が含まれますBServlet。HTTPGETを介してAServlet呼び出します。BServlet両方のWARにがありcom.mycompany.Foo.classます。同じJBossインスタンスに両方のWARをデプロイしたい。

問題は、両方のWARに同じクラスが存在し、同じJBossインスタンスにWARがデプロイされているために、クラスローディングの問題が発生するかどうかです。

4

2 に答える 2

1

いいえ、問題は発生しません。デフォルトでは、WebアプリケーションのクラスローダーはJava2委任モデルとは異なります。Webアプリケーションが最初にクラスを必要とする場合、ローカルリポジトリ(つまり、wEB-INF /classesまたはWEB-INF/libsのクラスとライブラリ)を検索します。ディレクトリ)委任する代わりに。したがって、提案している構成は問題なく機能します。

しかし、両方のwarに同じクラスが含まれるため、このクラスをjarにパッケージ化して、jbossインスタンスのlibディレクトリーに配置することを検討しましたか?このように、インスタンスにデプロイするすべてのWebアプリケーションにそれを含める必要はありません。

こちらのJbossドキュメントをご覧ください。

于 2012-11-16T21:51:56.550 に答える
1

com.mycompany.Foo.classはい、両方のWARで完全に同じでない場合は、問題が発生します。JBoss 5.1では、デフォルトでクラス名は一意です(統合されたクラスローディング)。つまり、1つしか存在できずcom.mycompany.Foo.class、両方のアプリケーション間で共有されます。この動作は無効にすることができます。

詳細については、(JBossClassLoaderHistory)[https://community.jboss.org/wiki/JBossClassLoaderHistory]を確認してください。

于 2012-11-17T22:11:47.153 に答える