問題点

WebLogic のインスタンスを実行しているときに、APP-INF/lib に log4j.jar ファイルがあります。発行インスタンス(または同じ appserver の 2 番目のインスタンス)を開始しようとすると、次のようなエラーが表示されます。
javax.servlet.ServletException at weblogic.servlet.internal.ServletStubImpl.createServlet(ServletStubImpl.java:909) at weblogic.servlet.internal.ServletStubImpl.createInstances(ServletStubImpl.java:873) at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:812) at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:3281) at weblogic.servlet.internal.WebAppServletContext.preloadServlets(WebAppServletContext.java:3226) at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3207) at weblogic.servlet.internal.WebAppServletContext.setStarted(WebAppServletContext.java:5737)

解決策

次のいずれかの操作を行います:

  • common/shared クラスローダーに log4j.jar を配置しないでください。カテゴリを使用しないので、すべての webapp 用に log4j を共有しない方がいいです。例えば、ログメッセージがどの webapp から生じているかわかりません。
  • 次の jar を共通の classloader に移動します。
    • crx-commons.jar
    • crx-api.jar
    • jcr.jar
    • commons-logging.jar
    • commons-collections.jar
    • xercesImpl.jar

追加情報

log4j は同じ ClassLoader のすべてのクラスに対してグローバルです。作成者 webapp クラスは「global」 log4j カテゴリのロガーとして FmtLogger(crx-commons.jar)を登録します。次に、発行クラスが同じロガーを取得しようとします。クラスパスには FmtLogger の別のバージョンがあるため、クラスの cast 例外が発生します。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー