Migrar tomcat 9.0 a tomcat 10
Debido a unos requerimientos de un cliente que necesitaba que el sistema quedara en la ultima versión de Tomcat, que al momento de escribir este articulo es Tomcat 10.1.12.
Nota:verificar la versión en su sistema con :
$ sudo tomcat/bin/version.sh
----------------------------------------------------------------------------------------------------------------------
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/10.1.13
Server built: Aug 23 2023 21:34:59 UTC
Server number: 10.1.13.0
OS Name: Linux
OS Version: 6.1.41-63.114.amzn2023.x86_64
Architecture: amd64
JVM Version: 11.0.20+8-LTS
JVM Vendor: Amazon.com Inc.
----------------------------------------------------------------------------------------------------------------------
Esta nueva visión tiene unos cambios importantes porque en general se pretende que una aplicación escrita para Java EE 8 que se ejecuta en Apache Tomcat 9 y convertirla automáticamente para que se ejecute en Apache Tomcat 10 que implementa Jakarta EE 9.
Dado este nuevo paradigma, algunas de las librerías que normalmente funciona en Tomcat 9 ya no lo hacen en Tomcat 10, mostrando errores de escuchadores (listener) o inconsistencias con las librerías que depende de javax y que se ven en el archivo logs/catalina.out como errores GRAVE o SEVERO, y aunque tomcat 10, requiere de java-1.8 en adelante yo preferí cambiar a la versión java-11 aprovechando que estoy actualizando mis sistemas, este cambio introducen algún inconvenientes en tema de librerías o comandos java deprecated.
Instalar java-11 en ec2, dejo esta anotación por ec2, ya qu ec2 genera algunos inconvenientes a la hora de instalar java y javac, porque las librería (amazon-linux-extras) donde usualmente estaba java, en ec2 2023 ya no existe y si se instala conforme a las indicaciones de AWS no instala javac
Esta linea de comando funcionó correctamente.
$ sudo dnf install -y java-11-amazon-corretto-devel
verificar la versión de java.
----------------------------------------------------------------------------------------------------------------------
$ sudo java -version
openjdk version "11.0.20" 2023-07-18 LTS
OpenJDK Runtime Environment Corretto-11.0.20.8.1 (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.20.8.1 (build 11.0.20+8-LTS, mixed mode)
verificar que javac quedó instalada
$ sudo javac -version
javac 11.0.20
----------------------------------------------------------------------------------------------------------------------
Para las demás opciones de Linux no se presenta ese problema.
Para curarme en salud, actualice todas las librerías que necesito para mis desarrollos a su versión mas reciente, particularmente en mi caso javamail, fileupload, httpClient, las librerías commons y las dependiente de postgres y mongodb entre otras.
En general sin mayor problema salvo algunas cambios con el camando para manejo de variables double
que paso a valueOf().
anterior:
doble = (new Double(string)).doubleValue();
actual:
doble = Double.valueOf(string);
Solo tuve inconvenientes con librera que utilizo a modo Ajax denominada DWR, que no actualizan hace bastante tiempo y que en mis desarrollos utilizó mucho.
Un mensaje de error similar al siguiente:
java.lang.noclassdeffounderror: javax/servlet/servletcontextlistener
o este otro.
One or more listeners failed to start. Full details will be found in the appropriate
container log file
Es una clara indicación de que es probable que se requiera la migración a Jakarta EE 9, de algunas de la librerías de Tomcat o que se debe eliminar el archivo javax si existe.
La solución la proporciona el mismo Tomcat en lo que ellos denominan migración, jakartaee-migration-1.0.7.
Puede hacer uso del comando migrate.sh que viene con a distribucion en la carpeta ../bin/migrate.sh
O buscar la que página del proyectto jakarta que proporciona enlaces de descarga para obtener la última versión del software Tomcat Migration Tool para Jakarta EE, así como enlaces a archivos de versiones anteriores, y que está documentada en el siguiente link: https://github.com/apache/tomcat-jakartaee-migration.
Allí está el comando :java -jar jakartaee-migration-*-shaded.jar <source> <destination>
Que permite actualizar las librerías que tiene problemas de versión Tomcat 9 a la versión Tomcat 10
Cuando se descarga la librería, tiene en la carpeta /bin un comando llamado migrate.
que facilita el proceso de actualización así.
Descargar el archivo con extensión .cgi (en realidad es un script .sh) para migrar tomcat 9 a tomcat 10 desde el siguiente link: https://tomcat.apache.org/download-migration.cgi
Descomprimir la carpeta que se descarga:
sudo unzip jakartaee-migration-1.0.7-bin.zip
Ingresar a la carpeta
$ sudo cd jakartaee-migration-1.0.7-bin/bin
ejecutar el comando:
$ sudo bin/migrate.sh archivoMigrar.jar archivoActualizado.jar
Donde archivoMigrar.jar es el archivo .jar que se quiere actualizar y archivoActualizado.jar es el
archivo que quedó después de la conversión.
Recordar mover el archivo original .jar que se convirtió a otra localización diferente a donde se tiene
actualmente, para que no se genera problemas de compatibilidad entre el anterior archivoMigrar.jar y el nuevo archivoActualizado.jar.
A partir del Tomcat 10 , el modelo se seguridad SSL bajo Letsencript cambio:
# Crear certificado
#sudo certbot certonly --standalone -d www.misitio.org -d misitio.org
# Copiar el contenido del directorio /etc/letsencrypt/live/www.misitio.org/
`privkey.pem`
`fullchain.pem`(no se requiere para este proceso)
`chain.pem`
`cert.pem`
$ sudo cp /etc/letsencrypt/live/www.misitio.org/* /usr/local/tomcat/conf
NOTA: No se necesita el archivo www.misitio.org/fullchain.pem , pude estar o no en la copia.
Así debe quedar el archivo el nuevo tomcat/conf/server.xml bajo tomcat 10
server.xml
---------------------------------------------------------------------------------------------------------
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true">
<SSLHostConfig>
<Certificate
certificateFile="conf/cert.pem"
certificateKeyFile="conf/privkey.pem"
certificateChainFile="conf/chain.pem" />
</SSLHostConfig>
</Connector>
---------------------------------------------------------------------------------------------------------
Nota:
Recordar que el puerto seguro quedo en 8443 y por lo tanto debe ser invocado con:
https://misitio.org:8443
* Sino muestra un error indicando que necesita el certificado TLS.
Tener presente que dependiendo de la versión del sistema operativo, es probable que se requiera ajustar la libreria ARP que es
una librería que proporciona una mayor integración con los componentes
nativos del sistema operativo donde se ejecuta Apache Tomcat mejorando
de esta forma su rendimiento.
Verificar si esta presente alguna impatibilidad con el sistema y manejo del SSL con la libreria nativa que se encuentra en /bin, en la carpeta /logs puede indicar error similar a la siguiente
org.apache.catalina.core.AprLifecycleListener.init Se encuentra instalada una versión incompatible [1.2.16] de la biblioteca nativa APR de Apache Tomcat, mientras que Tomcat necesita la versión [1.2.34]
En tal caso se debe descargar la versión correcta de ARP, desde el sitio de apache tomcat:
Este un archivo tgz, que debe ubicar y descomprimir en la carpeta /bin de su tomcat.
luego debe instalarla para lo cual debe ingresar a la carpeta que se desplego por ejemplo:
/tomcat-native-1.2.16-src.
en ella se encuentra una carpeta interna llamada native
Si no se tiene definida la variable java-home , debe ubicarla porque el comando para instalación de la librería ARP la solicita.
Confurar el make de instalación con el comando:
En te caso java-home esta ubicada en /usr/lib/jvm/java-11-openjdk
$ sudo ./configure --with-java-home=/usr/lib/jvm/java-11-openjdk --with-apr=/usr/bin/apr-1-config
Para instalar la librería nativa.
$ sudo make
$ sudo make install
Comentarios
Publicar un comentario