Foros del Web » Programación para mayores de 30 ;) » Java »

Ayuda struts.xml

Estas en el tema de Ayuda struts.xml en el foro de Java en Foros del Web. Buenas, estoy intentado cargar el fichero struts.xml desde otro path que no sea el que viene definido por defecto y se me produce el siguiente ...
  #1 (permalink)  
Antiguo 14/12/2010, 07:01
rakilinda
Invitado
 
Mensajes: n/a
Puntos:
Ayuda struts.xml

Buenas,

estoy intentado cargar el fichero struts.xml desde otro path que no sea el que viene definido por defecto y se me produce el siguiente comportamiento:

La primera vez que arranco la aplicación en tomcat no me encuentra las url mapeadas del fichero de struts pero si hago un cambio en el fichero web.xml y se recarga la aplicación (no la paro y arranco yo) , sí que las encuentra. Hay algo que se me escapa y no sé que es. ¿Alguien puede echarme una mano?

La configuración que tengo es la siguiente:

1. En el web.xml le paso al servlet la ruta del directorio del fichero de struts:

<servlet>
<servlet-name>Inicializar</servlet-name>
<servlet-class>es.rakilinda.inicializar.Init</servlet-class>
<init-param>
<param-name>struts_config_dir</param-name>
<param-value>WEB-INF/config/struts</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

2. El servlet carga en el classpath el directorio:

private static final Class parameters[];

static
{
parameters = (new Class[] {java.net.URL.class});
}

Metodo:
----------

String prefix = getServletContext().getRealPath("/");
String struts_config_dir = getInitParameter("struts_config_dir");
URL url = new File(prefix+struts_config_dir).toURL();

URLClassLoader urlclassloader = (URLClassLoader)ClassLoader.getSystemClassLoader() ;
Class class1 = java.net.URLClassLoader.class;

try
{
Method method = class1.getDeclaredMethod("addURL", parameters);
method.setAccessible(true);
method.invoke(urlclassloader, new Object[] {
url
});
}
catch(Throwable throwable)
{
throw new IOException("Error.");
}

Muchas gracias.
  #2 (permalink)  
Antiguo 17/12/2010, 10:30
rakilinda
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ayuda struts.xml

Mirando las trazas al iniciar el servidor, mis trazas de carga aparecen entre dos de contexto inicializado:

17-dic-2010 17:16:19 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
17-dic-2010 17:16:19 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.
urlclassloader: file:/C:/Datos/Tomcat-5.5.31/bin/bootstrap.jar
urlclassloader: file:/C:/Datos/bea/jdk150_06/lib/tools.jar
urlclassloader: file:/C:/Datos/Tomcat-5.5.31/webapps/Rakilinda/WEB-INF/config/struts/
urlclassloader: file:/C:/Datos/Tomcat-5.5.31/webapps/Rakilinda/WEB-INF/config/literales/
17-dic-2010 17:17:02 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
17-dic-2010 17:17:02 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
17-dic-2010 17:17:06 org.apache.coyote.http11.Http11BaseProtocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-9080
17-dic-2010 17:17:08 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:9009
17-dic-2010 17:17:08 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/547 config=null
17-dic-2010 17:17:09 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
17-dic-2010 17:17:09 org.apache.catalina.startup.Catalina start
INFO: Server startup in 69077 ms

mientras que cuando modifico el web.xml, tomcat recarga la aplicación y sólo aparece lo siguiente:

17-dic-2010 17:21:40 org.apache.catalina.startup.HostConfig checkResources
INFO: Reloading context [/Rakilinda]
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.
17:22:11,158 INFO Init:67 - url file:/C:/Datos/Tomcat-5.5.31/webapps/Rakilinda/WEB-INF/config/struts/
urlclassloader: file:/C:/Datos/Tomcat-5.5.31/bin/bootstrap.jar
urlclassloader: file:/C:/Datos/bea/jdk150_06/lib/tools.jar
urlclassloader: file:/C:/Datos/Tomcat-5.5.31/webapps/Rakilinda/WEB-INF/config/struts/
urlclassloader: file:/C:/Datos/Tomcat-5.5.31/webapps/Rakilinda/WEB-INF/config/literales/

Creo que es un tema de que no se ha cargado struts cuando se ejecuta mi servlet que añade los path.

Continuo buscando a ver si encuentro una solución.
  #3 (permalink)  
Antiguo 21/12/2010, 10:25
 
Fecha de Ingreso: octubre-2010
Mensajes: 27
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Ayuda struts.xml

Hola rakilinda,

La pregunta del millón seria ¿Porque deseas hacer ese cambio?, si es algo de seguridad me parece que ello va a depender del servidor web o aplicaciones.

Bueno, sugiero que pongas el nombre y EXTENSION del archivo de configuración del struts. Por ejemplo:

<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

Cualquier cosa estoy en el [email protected]

Saludos

Manuel
  #4 (permalink)  
Antiguo 28/12/2010, 08:42
rakilinda
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ayuda struts.xml

Hola,

es más un tema de organización para tener todos los ficheros de configuración dentro de un mismo directorio. Gracias de todas formas por la ayuda.

Después de muchos intentos al final lo he conseguido. Os lo explico por si alguien se encuentra en una situación similar. He hecho los siguientes cambios:

1. Eliminar del web.xml el servlet-name con nombre "Inicializar".
2. En ese mismo web.xml, he modificado el filter de struts por este, que es donde le paso los parámetros que le pasaba al servlet del punto 1:

<filter>
<filter-name>struts2</filter-name>
<filter-class>es.rakilinda.web.servlet.StrutsFilter</filter-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/config/log4j.xml</param-value>
</init-param>
<init-param>
<param-name>struts_config_dir</param-name>
<param-value>WEB-INF/config/struts</param-value>
</init-param>
<init-param>
<param-name>literales_dir</param-name>
<param-value>WEB-INF/config/literales</param-value>
</init-param>
</filter>

3. Después me he creado la clase StrutsFilter que hereda de StrutsPrepareAndExecuteFilter y he sobreescrito el método init para que haga lo que hacía el servlet de Inicializar y después llamo al init de la clase padre.

Con todo eso he conseguido que me coja los ficheros de struts en el directorio que quería.

Espero que le sirva a alguien.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:52.