Errores frecuentes en aplicaciones Struts2 con Eclipse y Tomcat

Introducción

¿Tu aplicación struts2 falla?

¿Falla eclipse?

¿Ni si quiera arranca el tomcat o te está vomitando toda la stacktrace, toda la pila de llamadas erróneas por la consola?

Antes de echarse a llorar, desesperarse, increpar al proyecto apache, al profesor debes asegurarte de unos mínimos:

  • Tu proyecto no tiene errores de compilación
  • Tus clases y jsps no tienen ni un solo error.
  • Los ficheros XML no tienen ni un solo error.
  • No has confundido mayúsculas/minúsculas
Cómo revisar la consola

Cuando en la consola veas un montón de errores encadenados que no cunda el pánico. En java un simple error puede mostrar toda una ristra de errores que en realidad no es más que un volcado de llamadas que fallan en cadena, no porque sea especialmente grave.

Simplemente sube hacia arriba y observa dónde comienza el error. En algún punto te dirá que tienes un error en una clase tuya en una línea concreta. No es un error de compilación, es simplemente que en ese punto se ha desencadenado un error: no encuentra un fichero, no accede a la red, no encuentra una propiedad, algo es nulo…

Debes corregir ese error en esa clase o entender porqué ocurre, pero no te dejes agobiar por las 200 y pico líneas de Exception.

Error 404

Parece que no encuentra los contenidos, ni las acciones struts ni las jsp ni nada. Y lo peor es que algo que antes funcionaba ahora no. Primero asegúrate de que realmente el recurso al que quieres acceder existe. Obvio.

-> Solución: revisar

Revisa la consola porque tu proyecto tiene un error, y ahí se está explicando el porqué. Un fallo en un el struts.xml, una clase action que no existe, etc.. GOTO introducción.

Proyecto erróneo o con exclamación

Puede que al mover un proyecto de un lado para otro tengas problemas porque está configurado para otro JDK, o las librerías de tomcat no están en el mismo sitio, etc… A veces incluso deja de reconocer las clases y librerías básicas (String, java.util.*) o las librerías de tomcat (HttpServer, Session, ...). Debes :

->Solución: verificar el buildpath

Si hay algo incorrecto al entrar en la pestaña libraries del buildpath debieras ver alguna de ellas en rojo o una nota que dice (Unbound). Quita esa librería y añadela otra vez.

En el caso del JRE: debes añadir una library de JRE y asociar la de tu sistema.

En el caso de Tomcat: debes añadir una library de “Server Runtime” y seleccionar la de tomcat.

No encuentra action

Puede que nos salte un error en la consola tan grande como este:

Caused by: Unable to load configuration. - action - file:/C:/Users/Trabajo/Desktop/Trabajos/Pello/Sistemas%20de%20gestión%20Empresarial/Eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Tulebox/WEB-INF/classes/struts.xml:22:50
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:70)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490)
... 15 more
Caused by: Action class [info.fer.dice.Dice] not found - action - file:/C:/Users/Trabajo/Desktop/Trabajos/Pello/Sistemas%20de%20gestión%20Empresarial/Eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Tulebox/WEB-INF/classes/struts.xml:22:50

-> Solución: verificar paquetes, directorios y acciones

En ese caso debemos revisar el fichero struts.xml o el que esté incluyendo a través de la directiva Seguramente estamos haciendo una referencia a una acción cuya clase no está en la ruta correcta. Verifica que se corresponde el nombre del paquete con la ruta de directorios. Es decir,si la clase es SuperAction si el package de la clase es:

package org.cuatrovientos.struts2.example;

Entonces la clase debe encontrarse en el directorio

src > org > cuatrovientos > struts2 > example > SuperAction

Y en el action debe poner lo siguiente:

Deben coindicir si no dará error de Action no encontrada.

Cambio algo y sigue fallando lo mismo

Muchas veces corriges un error y el error persiste. O lo que es peor, algo que funcionaba, cambias alguna tontería y deja de arrancar. Parece ser que a veces el tomcat se queda pinzado, o por mucho que ejecutes el proyecto en el servidor te está ejecutando una versión vieja.

->Solución: vacía el Tomcat

Para asegurarte de que el proyecto que ejecutas es el bueno, saca todos los proyectos de tomcat. En la pestaña servidores, despliega el tomcat y quítale los proyectos, al menos el que quieres ejecutar. si ese proyecto viene de un copy paste de otro quita todos.

Ahora ejecuta de nuevo y lo harás con la última versión.

Tomcat no arranca
Tomcat logo

O Tomcat encountered a problema y resulta que no es capaz de iniciarse y no puedes iniciar la aplicación. Puede deberse a dos razones.

  1. Hay otra instancia de tomcat en marcha. Por ejemplo la del XAMPP. Hay que pararla o hacer que eclipse se ejecute en ella.
  2. Tomcat no es capaz de reiniciarse.
->Solución: parar y reiniciar

Por si acaso cárgate todos los proyectos que hay en el tomcat (pestaña servers, desplegar el tomcat y quitar todos), y luego detén el servidor. Ahora vuelve a ejecutar la aplicación y lo hará con más garantías de éxito.

... and greetz for u ;)

by Pello Altadill 11/01/2013 01:44:50 - 3481 hits

Interfaz Metro y Shortcuts en Windows 2012

Métodos abreviados Algunas cabezas pensantes le han dado una vuelta al interfaz gráfico de las últimas versiones de Windows. Dida lo que diga el Vaticano el purgatorio y el infierno existen y debe ser el destino para los creadores de Metro, que es como se llama el interfaz que aparece ahora en al pulsar la tecla windows. Aquí dejaré unas pautas para poder sobrevivir. Pese a que existen herramientas para quitarlo, para tener un inicio normal, etc… creo que no queda más remedio que acostu...

by Pello Altadill 08/31/2013 21:56:26 - 2055 hits

More »

Montar un laboratorio con máquinas virtuales en un host

Supongamos que queremos montar un laboratorio de máquinas virtuales para jugar con servidores y clientes. Varias máquinas virtuales que queremos: que sean visibles desde el host o equipo físico, que sean visibles entre ellas yque además puedan salir al exterior a través del equipo físico. Y es más, queremos que esas máquinas virtuales tengan IP fija ya que al ser servidores no queremos que las IPs bailen Y Vamos a suponer que tenem...

by Pello Altadill 08/31/2013 00:50:13 - 11558 hits

More »

Monitorizando un servidor Windows 2012

Otra cosa no sé pero si queremos monitorizar un servidor windows por herramientas no será. En comparación revisar un linux puede parecer una tarea sencilla porque el sistema es tan simple (todo son procesos y ficheros), que con unos comandos y una revisión del log nos hacemos una idea rápido. En el caso de windows, el sistema dispone de una monitorización gráfica de serie con todo lujo de detalles, cosa que para linux te obligaría a meter cosas tipo RRDtool, mrtg, etc... aunque obviamente, de nad...

by Pello Altadill 08/30/2013 00:55:09 - 1303 hits

More »

Windows 2012 Server

Con eso de escribir acerca de linux y de hacer bromas sobre lo horrible que es windows es muy común que de forma inmediata te encasillen como talibán linuxero. Más aún si eres fiel a Debian y despotricas de Ubuntu por estar hecho para ser fácil. Pero lo cierto es que ante la típica pregunta de un comercial de ¿Qué sistema es mejor? o ¿qué lenguaje es mejor? para mí la re...

by Pello Altadill 08/28/2013 23:22:53 - 957 hits

More »

socket.io ...and websockets for all.

Otra de las novedades que trae HTML5 es la de los famosos websockets. El protocolo HTTP funciona de tal manera que no existe una conexión fija entre el cliente y el servidor; el navegador y el servidor se están continuamente lanzando piedras con mensajes, y a veces para simular que la conexión es permanente (una sesión) se acompaña de alguna marca como una cookie. Los websockets nos dan la posiblidad de establecer una conexión fija entre cliente y servidor como la que hay en un IRC o en los ...

by Pello Altadill 08/24/2013 23:11:46 - 1477 hits

More »

Alojamiento gratuito de Node.js en openshift

A la hora de desarrollar aplicaciones web tenemos muchos lenguajes donde elegir. Todos ellos funcionarán perfectamente en nuestro equipo local pero claro, ¿qué pasa si queremos publicar nuestra aplicación? ¿Y si además queremos hacerlo gratis? Una de las cosas que más atractivas de lenguajes como php es que lo tienes disponible para todos los sistemas, para todos los sabores de linux y lo que es mejor en infinidad de alojamientos gratuitos, con mysql incluido. Además php funciona de manera muy s...

by Pello Altadill 08/24/2013 15:27:46 - 5067 hits

More »

Ejemplo simple de ContentProvider Android

Un ContentProvider de Android es una especie de BD que una aplicación abre al resto de aplicaciones. Por ejemplo, si hacemos una aplicación con una BD SQLite está solamente estará disponible para la propia aplicación pero la podriamos abrir/ofrecer al resto del sistema a través de un content provider. Pero ojo¿solamente bases de datos? No, los content providers pretenden como su nombre indica proveer contenido y lo mismo puede ser una BD que unos ficheros, que unos datos arbitrarios. Lo peculiar ...

by Pello Altadill 08/23/2013 22:14:09 - 1558 hits

More »