Tomado de: Tomcat7 y Genexus Blog de configuracion de Genexus y Tomcat7 WebSAc Tomcat7 Consulta stackoverflow sobre tomcat7 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. | |||||||||||||||||||||||||||
domingo, diciembre 17, 2017
Tomcat 7 y Genexus
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario