Problema

As instâncias estão em execução no WebLogic e o arquivo log4j.jar está em APP-INF/lib. Ao tentar iniciar a instância de publicação (ou a segunda instância no mesmo servidor de aplicativos), ocorre um erro semelhante a:
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)

Solução

Siga um destes procedimentos:

  • Não coloque o log4j.jar no carregador de classe comum/compartilhado. Não é uma boa idéia ter um log4j compartilhado para todos os aplicativos Web, já que eles não usam suas próprias categorias. Por exemplo, não é possível dizer qual aplicativo Web origina a mensagem de log.
  • Mova os seguintes jars para o carregador de classe comum:
    • crx-commons.jar
    • crx-api.jar
    • jcr.jar
    • commons-logging.jar
    • commons-collections.jar
    • xercesImpl.jar

Informações adicionais

O log4j é global para todas as classes no mesmo carregador de classe. Uma classe no aplicativo Web de criação registra o FmtLogger (em crx-commons.jar) como registrador na categoria "global" do log4j. Então, a classe de publicação tenta adquirir o mesmo registrador. Há uma exceção de conversão de classe, porque ela possui outra versão do FmtLogger em seu caminho de classe.