SAC  # 31566 Tipo : Issue 27/03/2012     
 
Descripción : Error 404 File not Found al utilizar Tomcat 7 
 
Abstract 
Tomcat 7 tiene un cambio importante a nivel de seguridad que afecta la prototipación de aplicaciones generadas con Java.
Para mostrar los servlets de los objetos GeneXus, se utiliza una clase llamada servlet invoker que permite ejecutar todos los servlets generados.
En Tomcat 7, como cumple con la especificación de servlet 3.0, ya no se soporta dicho mecanismo de ejecución y los mismos deben ser declarados.

Por defecto al prototipar con Tomcat 7 se detalla el siguiente error:
404 "resource not found"

Se describe en este sac, algunos puntos a tener en cuenta para trabajar con Tomcat 7.
 
Descripción Detallada 
Cuando se trabaja con Tomcat 7 se debe tener en cuenta lo siguiente:
_ Asegurarse que la propiedad "use annotations for servlet definition" en web information se habilita (valor "Yes").
_ Utilizar la propiedad Java Package name y especificar un valor.

A partir de Tomcat 7, todos los servlets se tienen que generar con un metatag llamado WebServlet.
Cuando la webapp levanta, el tomcat recorre todas las clases de la aplicación para ver cuáles tiene ese tag para determinarlos como servlets a ejecutar. Es recomendable que todos los servlets tengan package; si los mismos tienen package, la aplicación es ejecutable.

Por compatibilidad, si no se utiliza "Java package name", igualmente GeneXus creará en la WebApp un folder vacío, de nombre 'dummy' para que la aplicación sea ejecutable; de lo contrario, el error 404 "resource not found" se detalla en el browser.

En algunos build de tomcat 7 ,como el (7.0.35), al hacer deploy de una aplicación que no utiliza el gam se genera un error HTTP 404 , dicho error genera este log en el tomcat:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tomcat_error_foroJavaEnvironment]]

Caused by: java.lang.NoClassDefFoundError: artech/security/api/gamrefreshtoken

Este problema se ha debido a que en las clases standars (gxclassR.jar) se hace referencia por reflexión a servlets del gam, y en caso de no tener el jar del GAM ( artech.security-<DBMS>.jar ) en la aplicación se genera el error anterior. En el upgrade 2 se arreglan este error, y en el U1 se puede trabajar utilizando el work around descripto a continuación.
 
Work Around
Para evitar el error HTTP 404:
Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tomcat_error_foroJavaEnvironment]]

Caused by: java.lang.NoClassDefFoundError: artech/security/api/gamrefreshtoken

hay que hacer 2 cosas.
1- entrar al archivo de configuración del tomcat Tomcat 7.0\conf\catalina.properties y en la propiedad tomcat.util.scan.DefaultJarScanner.jarsToSkip agregar el jar gxclassR.jar.
Se puede agregar *.jar que mejora la performance, pero si existen otra aplicaciones distinta de genexus con servlets referenciados desde el jar que se deben levantar estas aplicaciones van a fallar.
Esto es para evitar que se scanee el jar para buscar annotations.

2- Modificar el web.xml que esta en el web-inf de la aplicacion (\Tomcat 7.0\webapps\<carpetadelaAplicacionenTomcat>\WEB-INF) y quitar la siguientes lineas

<servlet> <servlet-name>GXOAuthAccessToken</servlet-name> <servlet-class>com.genexus.webpanels.GXOAuthAccessToken</servlet-class> </servlet>
<servlet-mapping> <servlet-name>GXOAuthAccessToken</servlet-name> <url-pattern>/oauth/access_token</url-pattern> </servlet-mapping>

Este web.xml se genera cada vez que se corre la aplicación , así que cada ves que se corre la aplicación hay que modificarlo. Para evitar esto se puede modificar el web7.xml que esta en el target enviroment , si se modifica este web.xml solo se precisa modificarlo una vez dado que el otro web.xml se crea a partir de este , pero si se pasa a usar el gam hay que volver a escribir las lineas que se borraron.
 
SAC Relacionados   
 
SAC Descripción
29603 Compatibilidad con Tomcat 7
33789 Error al correr un war generado con el deployment wizard en servidores con especificacion de servlet 3.0
 
 
Información de Productos Asociados 
Producto Reportado en Versión Estimada corr. en versión Liberado en versión  
Gen. JAVA XEV1 upg: 7 XEV1 upg: 8
XEV1 upg: 8
     
Estimada corr. en versión  
Gen. JAVA XEV2 upg: 0 XEV2 upg: 2
XEV2 upg: 2