tomcat

propósito

  • notas sobre el uso de tomcat

configuración

puerto

  • tomcat se levanta en el puerto 8080
    • localhost:8080

despliegue

  • el servidor despliega los war que tenga el directorio webapps
  • por ejemplo en C:\servidores\ApacheTomcat7.0.27\webapps

servidores

versión 7.0.27

  • es la que uso en la DGA
  • en algunas instalaciones cambio el nombre al directorio para no dejar espacios en blanco
  • esta en C:\servidores\ApacheTomcat7.0.27
    • el el pc HP que es el actual esta tal y como lo uso en el curro
      • C:\Servidores\Apache Tomcat 7.0.27

XAMP

  • tiene también un servidor Tomcat que ya casi no uso ni instalo para usar algo lo más parecido a lo que tengo en el trabajo
  • C:\XAMPP\TOMCAT>catalina_start.bat
    • localhost:8080/manager/html
      • javier
      • javier
  • lo puedo lanzar desde c:\xampp\tomcat>catalina_start.bat

manager

archivo de usuarios de tomcat

  • para poder entrar en el manager del servidor hay que editar el archivo C:\servidores\ApacheTomcat7.0.27\conf\tomcat-users.xml
  • al manager se accede en la dirección http://localhost:8080/manager/html
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="admin-gui"/>
  <role rolename="tomcat"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-status"/> 
  <user username="admin"  password="admin"  roles="tomcat,admin-gui,manager-gui,manager-script,manager-status"/>
  <user username="javier" password="javier" roles="tomcat,admin-gui,manager-gui,manager-script,manager-status"/>
  <user username="tomcat" password="tomcat" roles="tomcat,admin-gui,manager-gui,manager-script,manager-status"/>
</tomcat-users>
  • de esta forma los usuario javier, tomcat y admin tienen todos los permisos necesarios

server.xml

  • ATENCIÓN: No usar acentos en este archivo ni siquiera en los comentarios pues da este error que impide arrancar el servidor
WARNING: Catalina.start using conf/server.xml: 
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte no válido 2 de la secuencia UTF-8 de 3 bytes
  • cambio server.xml para que use la base de datos del pc VAIO cambiando simplemente localhost por 192.168.1.111 que es la ip del otro portátil.
        <Resource name="jdbc/BDGAB"
                    auth="Container"
                    type="javax.sql.DataSource"
                    driverClassName="oracle.jdbc.driver.OracleDriver"
                    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
                    url="jdbc:oracle:thin:@192.168.1.111:1521:xe"
                    username="gab"
                    password="desarrollo"
                    maxActive="20"
                    maxIdle="10"
                    maxWait="-1"
                    scope="Sharable" />
  • así evito el conflicto de puertos y libero al portátil de desarrollo.
  • en el mismo archivo se configura la conexión a base de datos con la ip y no con localhost que no parece funcionar
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" maxActive="20" maxIdle="10" maxWait="-1" name="epcnt_adm.epcnt_admDatasource" password="desarrollo" scope="Sharable" type="javax.sql.DataSource" url="jdbc:oracle:thin:@biz-desast11-01.aragon.local:1533:DESEDUCA" username="epcnt_usr"/>

CONTEXT.XML

  • en el mismo directorio esta el archivo context.xml donde también es necesaria una entrada
	<ResourceLink global="epcnv_adm.epcnt_admDatasource" name="epcnt_adm.epcnv_admDatasource" type="javax.sql.DataSource"/>

SESIONES

  • creo que se almacenan en el archivo C:\Servidores\Apache Tomcat 7.0.27\work\Catalina\localhost\epnom\SESSIONS.ser
  • por aplicación
  • una buena explicación

CONEXIÓN A PREEDUCA

  • en el archivo server.xml tengo varios intentos que no funcionan

PROBLEMAS

SERVIDOR BLOQUEADO

  • se soluciona con la tecla enter o tabulando
  • si seleccionar un texto en la consola de tomcat por ejemplo la select que se lanza aunque parezca mentira se queda bloqueado ;) el servidor

VERIFICAR TOKEN WS - ERROR AL VERIFICAR TOKEN CON GEB

mar 12, 2021 3:24:59 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
WARNING: Interceptor for {http://service.verificarTokenWs.ws.geb.aragon.es/}VerificarTokenWsService#{http://service.verificarTokenWs.ws.geb.aragon.es/}verificarTokenWs has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType.  Incoming portion of HTML stream: <HTML>
    <HEAD>
        <TITLE>P&aacute;gina en mantenimiento</TITLE>
        <link rel="stylesheet" type="text/css" href="/erorrdga/css/internet.css" />
                <link rel="stylesheet" type="text/css" href="/errordga/css/dga.css"/>
    </HEAD>

    <BODY>

        <div class="seemTable">
        <div class="seemTd100AlignIzq fondoApl1 padding10Inf alto56">
                <div class="seemTd25AlignIzq padding10Sup">
                        <div class="seemTd98AlignIzdfq izquierda logoApl1">&nbsp;</div>
                </div>
                <div class="seemTd50AlignIzq izquierda alto56">
                        <h1 class="sinMargen blanco "> <br>
<span style="font-size:80%; margin-left:37% " class="negrita mayusculas">P&aacute;gina en mantenimiento </span> </h1>
                </div>

        </div>
        <div class="seemTd100AlignIzq usuarioConectado fondoApl2 derecha padding3">
        &nbsp;
        </div>
</div>
       <h2>Se ha producido un error al tramitar su petici&oacute;n. Int&eacute;ntelo nuevamente pasados unos minutos.</h2>

    </BODY>
</HTML>
  • me da este error al arrancar
  • en otra aplicación no pasa
  • los archivos de certificados
    • cacerts y keystore.jks en C:\Program Files\Java\jdk1.7.0_25\jre\lib\security
  • los properties en C:\Servidores\Apache Tomcat 7.0.27\webapps\properties apuntaban a una configuración vieja

Caused by: java.lang.NoClassDefFoundError: Lorg/apache/logging/log4j/Logger;

  • 2020-10-02 09:03:20
  • no despliega EPCNT en local y me da este error después de que ayer funcionara perfectamente
  • en el build.xml me había dejado la entrada para WL de la última compilación para AST
	<!-- Servidor para el que se genera el ear -->
	<property name="servidor" value="WL"/>
	<!--<property name="servidor" value="Tomcat"/>--> 

NO SALEN LOS CSS

  • en aplicaciones PADDOC no salen los css dga.css y internet.css lo que hace que el aspecto sea extraño
  • esto es porque se ha borrado el contenido de la carpeta C:\Servidores\Apache Tomcat 7.0.27\webapps
  • es en los directorios de esa carpeta donde están esos css y ademas las pantallas de http://localhost:8080/manager/html/list

PUERTO COMPARTIDO

  • el error al lanzar tomcat en el mismo puerto que oracle
dic 22, 2017 1:42:43 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
dic 22, 2017 1:42:43 PM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]

borrar despliegues

  • es importante borrar lo desplegado en
    • C:\servidores\ApacheTomcat7.0.27\webapps esto no lo veo claro al menos en la instalación en mi equipo nuevo HP
    • C:\servidores\ApacheTomcat7.0.27\work\Catalina\localhost
  • no borrar el despliegue en el directorio work hace que los cambios sobre todo en librerías no tengan efecto

con una aplicación simple struts me da este molesto error

INFO: Despliegue del archivo C:\servidores\ApacheTomcat7.0.27\webapps\Strutus2XML.war de la aplicaci¾n web
dic 28, 2017 9:59:35 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
dic 28, 2017 9:59:35 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Fall¾ en arranque del Contexto [/Strutus2XML] debido a errores previos
  • miro los logs del servidor en C:\servidores\ApacheTomcat7.0.27\logsp
  • localhost.2017-12-28.log
dic 28, 2017 9:59:35 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Excepción arrancando filtro struts2
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
  • borro lo desplegado en

    • C:\servidores\ApacheTomcat7.0.27\work\Catalina\localhost
  • borrar el directorio

    • C:\servidores\ApacheTomcat7.0.27\work\Catalina\localhost
  • ha cambiado el problema

    • es siempre un consejo de David Torrea 👍

CANNOT CREATE JDBC DRIVER OF CLASS '' FOR CONNECT URL ‘NULL’

18 mar 2020 19:26:07,929 ERROR es.aragon.epdtm.dal.PersonalStoredProcedure:execute(77): ERROR: No se ha podido ejecutar la sentencia en Base de Datos (INTENTO 1): SQL: {? = call EPCNT_PCK_ADM_PARAMETRO.F_OBTENER_PARAMETROS()} {}Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
  • revisar si esta bien la conexión de base de datos definida en los archivos context.xml y server.xml

    • en el servidor C:\Servidores\Apache Tomcat 7.0.27\conf\context.xml
  • es porque hay que copiar los properties en C:\Servidores\Apache Tomcat 7.0.27\webapps\properties\epcnt_adm pues es donde los toma el servidor para arrancar

    • son los que están en la aplicación en C:\proyectos\epcnt_adm\src\conf\properties\des para desarrollo
  • también puede ser porque no este bien definido en este archivo y lo este buscando en el proyecto del que se ha copiado la configuración web\WEB-INF\applicationContext-WS.xml

LISTENER DOES NOT CURRENTLY KNOW OF SID GIVEN IN CONNECT DESCRIPTOR

18 mar 2020 19:36:52,120 ERROR es.aragon.epdtm.dal.PersonalStoredProcedure:execute(77): ERROR: No se ha podido ejecutar la sentencia en Base de Datos (INTENTO 1): SQL: {? = call EPCNT_PCK_ADM_PARAMETRO.F_OBTENER_PARAMETROS()} {}Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
  • faltaba poner el SID correcto que es DESEDUCA
  • diferencia entre SID y SERVICE_NAME bastante bien explicado en este blog

java.lang.ClassNotFoundException: es.aragon.eppla.listeners.ApplicationListener

  • compila bien pero en el directorio C:\Proyectos\EPPLA_ADM\build\web\WEB-INF\classes\es\aragon\eppla\listeners no esta la clase AplicationListener.class
  • por eso da el error
  • cerramos otras aplicaciones y recursos y volvemos a lanzar la compilación
    • de esa forma se soluciona
12-Apr-2022 10:49:53.548 INFORMACIÓN [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath
12-Apr-2022 10:49:53.597 GRAVE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Error configurando escuchador de aplicación de clase [es.aragon.eppla.listeners.ApplicationListener]
	java.lang.ClassNotFoundException: es.aragon.eppla.listeners.ApplicationListener
		at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1415)
		at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1223)
		at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:537)
		at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:518)
		at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149)
		at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4686)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5232)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:727)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)
		at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:673)
		at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1881)
		at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
		at java.util.concurrent.FutureTask.run(FutureTask.java:266)
		at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
		at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
		at java.lang.Thread.run(Thread.java:748)
12-Apr-2022 10:49:53.597 GRAVE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Se ha saltado la instalación de escuchadores de aplicación debido a error(es) previo(s)

(Error de E/S: The Network Adapter could not establish the connection)

26 mar 2020 13:23:26,340 ERROR es.aragon.epdtm.dal.PersonalStoredProcedure:execute(98): ERROR: No se ha podido ejecutar la sentencia en Base de Datos (INTENTO 2): SQL: {? = call EPCNT_PCK_P_ADM_PARAMETRO.F_OBTENER_PARAMETROS()} {}Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Error de E/S: The Network Adapter could not establish the connection)
  • en el archivo server.xml del servidor asegurarse de que no hay entradas repetidas pues eso produce errores e incoherencias

ENLACE DE LOS PROPERTIES

  • durante la migración a Java 8 y al Tomcat 8 nos dio problemas hasta que vimos como se conectaba la aplicación con los properties que están en el servidor
  • En el fichero “catalina.bat” añadir la referencia al properties:
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\webapps\properties"