¿Debo actualizar a Tomcat8 desde Tomcat 7?
tomcat 8.5 23 (3)
Mi proyecto se está ejecutando actualmente en Tomcat 7. ¿Debo obtener la actualización a Tomcat 8? ¿Cuáles son los pros y los contras de hacer eso? es Tomcat 8 mejor en términos de rendimiento, utilización de la memoria?
A continuación le explicamos cómo entender por su cuenta cuándo realizar la actualización. Puede usar esto con cualquier versión de Tomcat, ahora o en el futuro, no solo cubre la actualización de Tomcat 7 a Tomcat 8.
La mayoría de los cambios en Tomcat cuando se cambia una versión principal son actualizaciones a las especificaciones de servlet, JSP y JDK en las que se basa una versión particular. Si no necesita las especificaciones más recientes para su aplicación y la versión que está utilizando no está "archivada" (Tomcat 7 no está archivado al momento de escribir esto), probablemente no necesite actualizar. http://tomcat.apache.org/whichversion.html cubre cómo hacer una selección.
En situaciones del mundo real, su elección también puede estar influenciada por otros factores, por ejemplo, si la versión que desea es compatible con el administrador de paquetes en su distribución de producción. O por el contrario , si su distribución solo tiene una versión específica de Tomcat, puede actualizar porque ahorra mucho tiempo.
Recuerde que las nuevas características también significan la posibilidad de nuevos errores. Si no está utilizando las especificaciones de una nueva versión de Tomcat, ¿quiere arriesgarse a que algo se rompa? El hecho de que una versión tenga el potencial para un mayor rendimiento no significa que no se bloquee en su entorno de implementación único. La mejor respuesta aquí, si puede pagarlo, es implementar ambas versiones detrás de un equilibrador de carga en caso de que el nuevo no funcione.
Dicho esto, siempre hay mejoras en el software. Sugiero leer las notas de la versión para ver las versiones de la versión principal que eliges para elegir la mejor para tus circunstancias. https://tomcat.apache.org/tomcat-8.0-doc/RELEASE-NOTES.txt cubre la versión 8.0, por ejemplo.
Una vez que elija una versión principal, generalmente desea usar la versión más reciente, ya que los errores se corregirán con el tiempo.
Como su proyecto ya se está ejecutando en Tomcat 7, le recomendaría mantener el status quo por más tiempo. No hay mucha información disponible sobre la mejora del rendimiento de Tomcat 8. Algunos problemas se informan en Internet, que es común para cualquier nueva versión de un producto.
Tomcat 8 tiene un mejor rendimiento en entornos concurrentes.
Según mi experiencia con los productos de tomcat, lo más probable es que la actualización no dé como resultado un rendimiento significativo a menos que tenga una aplicación que requiera muchos recursos. Por favor, lea el enlace a continuación antes de upgradation
Cambios importantes
Java 1.7 ==> El primer cambio importante, es que Tomcat 8 requiere ahora Java 7 o posterior para poder ejecutarse, por lo tanto, si está migrando desde la versión anterior de Tomcat, debe actualizar a Java 7
Specification Changes
Servlet 3.1 (JSR 340)
JSP 2.3 (JSR 245 maintenance release)
EL 3.0 (JSR 341)
WebSocket 1.0 (JSR 356)
Specification Changes: EL 3.0
Coercion of nulls to Number, Character or Boolean
- EL 2.2 and earlier (0, 0, false)
- EL 3.0 and later (null, null, null)
System property
– org.apache.el.parser.COERCE_TO_ZERO
– Set to true for EL 2.2 behaviour
Specification Changes: JSP 2.3
Minor changes to reflect the changes in EL 3.0
JSP 2.3
– Supported: GET, POST and HEAD
– Undefined: Everything else
JSP 2.2 and earlier
– Undefined: Most implementations assumed all
Tomcat only permits GET, POST and HEAD
– Protection against verb tampering
Specification Changes: WebSocket 1.0
Tomcat 7 initially shipped with a proprietary WebSocket API
- Tomcat 8 ships with a JSR 356 WebSocket implementation
– Also back-ported to Tomcat 7
- The proprietary WebSocket API is deprecated in Tomcat 7
- Applications using the proprietary API need to migrate
– Relatively simple
– https://svn.apache.org/r1424733
Specification Changes: Servlet 3.1
- Session ID changes by default on authentication
– Prevents session fixation
Tomcat Changes:
Connectors
Default connector has changed from BIO to NIO
– BIO is likely to be dropped for Tomcat 9
- Only BIO option not supported by NIO is irrelevant for NIO
– disableKeepAlivePercentage
- May notice different network / CPU loads
– More established, idle connections
– Marginally higher CPU load
Static Resources
Tomcat 7
– Aliases
– VirtualLoader
– VirtualDirContext
– JAR resources
– External repositories
- All variations on a theme
- Each implemented differently
Tomcat 8
– New WebResources implementation
▪ JAR resources
– External resources for class loader
- Completely new configuration
- Caching attributes removed from Context
Resources now defined by as:
– Pre-resources
– Main resources
– JAR resources
– Post-resources
Resources attributes:
– base
– internalPath
– webappMount
– readOnly
Internal APIs
- Lots of changes
– Manager, Loader and Resources are now Context only
– Mapper moved from Connector to Service
– WebResources
- If you extend a Tomcat class, review the API docs
Database Connection Pools
- Tomcat 7 and earlier based on DBCP 1
- Tomcat 8 based on DBCP 2
- Better performance in concurrent environments
– Comparable to Tomcat’s JDBC pool
- There are some changes to configuration attributes
– Reflect consistency changes made in Commons Pool 2
- maxActive -> maxTotal
- maxWait -> maxWaitMillis
- Validation no longer requires a validation query
– Uses Connection.isValid()
Conectores de servidor
En términos de los conectores del servidor, la implementación predeterminada del conector HTTP y AJP ha cambiado de la implementación de IO de bloqueo de Java (BIO) a la implementación de IO de no bloqueo de Java (NIO). El BIO anterior aún puede ser utilizado, pero las funciones de Servlet 3.1 y WebSocket 1.0 que usan E / S no bloqueante se volverán en su lugar bloqueo de E / S, lo que puede provocar un comportamiento inesperado de la aplicación.
Recursos de la aplicación web
El elemento de recursos que forma parte de la configuración y representa todos los recursos disponibles para la aplicación web ha sido revisado. Ahora incluye clases, archivos JAR, HTML, JSP y cualquier otro archivo que contribuya a la aplicación web. Se implementan implementaciones para usar directorios, archivos JAR y WAR como origen de estos recursos y la implementación de los recursos puede extenderse para proporcionar soporte para archivos almacenados en otros formularios, como en una base de datos o un repositorio versionado.
Depuración remota
Al iniciar Tomcat 8 con la opción jpda para habilitar la depuración remota, Tomcat 8 escucha en localhost: 8000 de forma predeterminada. Versiones anteriores escuchadas en *: 8000. Si es necesario, este valor predeterminado puede anularse configurando la variable de entorno JPDA_ADDRESS en, por ejemplo, setenv. [Bat | sh].
Cambios en API
Si bien la API interna de Tomcat 8 es ampliamente compatible con Tomcat 7, ha habido muchos cambios en el nivel de detalle y no son compatibles con binarios. Los desarrolladores de componentes personalizados que interactúan con las partes internas de Tomcat deben revisar el JavaDoc para la API correspondiente.
De particular interés son:
El Administrador, el Cargador y los Recursos se han movido de Contenedor a Contexto ya que el Contexto es el único lugar donde se usan.
El asignador se ha movido del Conector al Servicio ya que el Asignador es idéntico para todos los Conectores de un Servicio dado.
Hay una nueva implementación de Recursos, como dijimos, que fusiona Alias, VirtualLoader, VirtualDirContext, recursos JAR y repositorios externos en un solo marco en lugar de uno separado para cada característica.
A continuación, se proporcionan algunos enlaces que proporcionan más información sobre los cambios en tomcat 8
http://people.apache.org/~markt/presentations/2013-09-Apache-Tomcat8.pdf
Consulte a continuación las nuevas características principales de Tomcat 8. Esto ayudará a decidir si migrar si los necesita.
La versión 8.0 de Tomcat se alinea con la especificación Java EE 7. Es compatible con:
- Es compatible con Java Servlet 3.1
- Páginas de servidor de Java (JSP) 2.3
- Lenguaje de expresión unificado de Java (EL) 3.0
- Java WebSocket 1.0
Tomcat 8 puede usar Apache Portable Runtime para proporcionar escalabilidad, rendimiento y una mejor integración superiores con las tecnologías de servidor nativas.
En términos de los conectores del servidor, la implementación predeterminada del conector HTTP y AJP ha cambiado de la implementación de IO de bloqueo de Java (BIO) a la implementación de IO de no bloqueo de Java (NIO)
También tenga en cuenta que Tomcat 8 requiere Java 7 o posterior para ejecutarse, por lo que solo debe migrar si está utilizando al menos Java 7 en su proyecto.