Problema

Está ejecutando sus instancias en WebLogic y tiene log4j.jar en APP-INF/lib. Cuando intenta iniciar su instancia de publicación (o la segunda instancia en el mismo servidor de aplicaciones), obtiene un error similar 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)

Solución

Realice una de estas acciones:

  • No ponga el log4j.jar en el cargador de clases común/compartido. Es una mala idea tener un log4j compartido para todos los webapp, ya que no usan sus propias categorías. Por ejemplo, no puede saber desde qué webapp se origina el mensaje de registro.
  • Mueva los siguientes archivos jar al cargador de clase común:
    • crx-commons.jar
    • crx-api.jar
    • jcr.jar
    • commons-logging.jar
    • commons-collections.jar
    • xercesImpl.jar

Información adicional

log4j es global para todas las clases en el mismo cargador de clases. Una clase en author webapp registra el FmtLogger (en crx-commons.jar) como registrador en la categoría 'global' log4j. Luego, la clase de publicación intenta adquirir el mismo registrador. Hay una excepción de conversión de clases, porque tiene otra versión del FmtLogger en su ruta de clases.