2011-02-16 19 views
37

me sale este mensaje de errorWebApproot en la primavera de

[GRAVES: Excepción enviar suceso contexto inicializado a instancia de escuchador de org.springframework.web.util.Log4jConfigListener clase java.lang.IllegalStateException: Web sistema radicular aplicación propiedad ya configurada en un valor diferente: 'webapp.root' = [C: \ Users \ jaanlai \ Documents \ NetBeansProjects \ absSovellus \ build \ web] en lugar de [C: \ Users \ Administrator \ Documents \ NetBeansProjects \ keycard2 \ build \ web ] - ¡Elija valores únicos para el parámetro de contexto 'webAppRootKey' en sus archivos web.xml!

Es extraño, porque no tengo ninguna webAppRootKey definida en mis archivos. ¿Qué es?

+1

Ver http://drglennn.blogspot.com/2008/08/problems- with-webapproot-system.html y http://forum.springsource.org/archive/index.php/t-32873.html para soluciones – JoseK

Respuesta

17

Parece que tiene varias aplicaciones web con la configuración predeterminada Log4jConfigListener en su servidor de aplicaciones.

El comportamiento predeterminado para Log4jConfigurationListener es exponer webapp root como una propiedad del sistema denominada webapp.root, para permitirle usarla al especificar ubicaciones de archivos de registro. Sin embargo, si la propiedad del sistema con el mismo nombre ya existe, arroja una excepción.

Usted puede configurar los nombres de cada aplicación para que la propiedad del sistema utilizando <context-param> nombrado webAppRootKey o desactivar la exposición de la propiedad del sistema mediante el establecimiento de Log4jConfigListener 's <init-param> llamado log4jExposeWebAppRoot-false.

Consulte también:

+0

¿Esto puede evitar que la aplicación se ejecute, dando 404 - la fuente solicitada no está disponible? – michaeljackson4ever

+0

@ michaeljackson4ever: Supongo que no. Después de todo, siempre puedes verificarlo eliminando 'Log4jConfigListener'. – axtavt

+0

Tengo el problema de que la aplicación no se ejecuta. Establecer la clave raíz no ayudó. – michaeljackson4ever

62

El webAppRootKey es un parámetro de contexto que la primavera utiliza en un par de lugares. En este caso, está siendo utilizado por el Log4jWebConfigurer. Se expone la raíz webapp como una propiedad del sistema que se puede utilizar en los archivos de configuración de log4j, algo como esto:

log4j.appender.testfile.File=${webapp.root}/WEB-INF/testlog.log 

que usaría esto si, por alguna razón, querido para localizar sus registros con respecto a la raíz de su webapp .

El problema con el que se está encontrando es que algunos contenedores (notablemente Tomcat) no mantienen un mapeo por aplicación web de las propiedades del sistema. Cuando no especifica un webAppRootKey, Spring lo predetermina a webapp.root. Como está ejecutando dos aplicaciones en el mismo contenedor, la segunda aplicación que está intentando iniciar ve que el webAppRootKey ya está configurado (por defecto) y arroja un error. De lo contrario, el webAppRootKey se configuraría incorrectamente y podría terminar con los registros de una aplicación web en otra aplicación web.

puede especificar un webAppRootKey diferentes utilizando parámetros de contexto en su web.xml así:

<context-param> 
    <param-name>webAppRootKey</param-name> 
    <param-value>webapp.root.one</param-value> 
</context-param> 

Y

log4j.appender.testfile.File=${webapp.root.one}/WEB-INF/testlog.log 

en su log4j. Esto debería encargarse del conflicto.

+3

Tenga en cuenta que tuvimos el mismo problema con Websphere v8, y su solución solucionó el problema. (no quiero que los demás piensen que el problema es solo con Tomcat) –

+0

También tuve este problema en JBoss, y tu solución funcionó para mí. –

+0

@MichaelLucas ¿El problema en Websphere v8 afectó a algo además del registro? – indybee

3

Sólo en caso de que alguien más ha hecho lo anterior sin deshacerse del problema:

Nuestra aplicación web tenía el webAppRootKey ajustado correctamente, pero aún así consiguió la excepción anteriormente. Reiniciar Glassfish y volver a implementar el mismo archivo de guerra funcionó, imagínate.

49
<context-param> 
<param-name>log4jExposeWebAppRoot</param-name> 
<param-value>false</param-value> 
</context-param> 

...

Esto resolvió el problema para mí. El crédito a: - http://forum.springsource.org/archive/index.php/t-32873.html

+1

bueno, iba a definir una propiedad en maven y luego filtrar web.xml. Pero luego no funcionaría en el desarrollo donde uso el plugin de mestrel eclipse para iniciar tomcat con mis webapps. – tbraun

+1

¡Gracias, me ayudó también! – Mythul

+0

Me alegro de que haya ayudado. – MikeRoger

0

Si utiliza logback en lugar de log4j y obtener el mismo error, esto resuelve que:

<context-param> 
<param-name>logbackExposeWebAppRoot</param-name> 
<param-value>false</param-value> 
</context-param>