JEE Troubleshooting

De wiki.mitic.gov.py
Ir a la navegaciónIr a la búsqueda

En este apartado se detallan pasos a seguir para la resolución de problemas comunes al momento del desarrollo en un entorno de JEE con Eclipse y Maven, se encuentran agrupados en secciones dependiendo de la herramienta en la cual se ha encontrado el problema.

Jboss

Script para limpiar temporales del jboss

<source lang="bash">

  1. !/bin/bash
  2. limpia los temporales del Jboss y del eclipse
  3. awi[at]alefq.com

JBOSS_HOME=/opt/tekoporu/server/jboss-6.1 JBOSS6_HOME=/opt/jboss-6.0 WORKSPACE_DIR=$HOME/workspaces JBOSS_SERVER_NAME=default ZEN="zenity --info --title Temporales --text"

cd $CURRENT_JBOSS_HOME

f_limpiar_jboss() { CURRENT_JBOSS_HOME=$1 if [ -d $CURRENT_JBOSS_HOME ]; then

		$ZEN "Limpiando temporales de $CURRENT_JBOSS_HOME" &

echo "Limpiando directorios temporales del JBoss $CURRENT_JBOSS_HOME" echo "Limpiando data" rm -rf $CURRENT_JBOSS_HOME/server/${JBOSS_SERVER_NAME}/data/* echo "Limpiando work" rm -rf $CURRENT_JBOSS_HOME/server/${JBOSS_SERVER_NAME}/work/* echo "Limpiando tmp" rm -rf $CURRENT_JBOSS_HOME/server/${JBOSS_SERVER_NAME}/tmp/* fi }

f_limpiar_jboss $JBOSS_HOME sleep 3 f_limpiar_jboss $JBOSS6_HOME

if [ "$1" = "W" ]; then #Si se pasó el parámetro W limpiamos también el workspace $ZEN "Limpiando temporales de $WORKSPACE_DIR" & echo "Limpiando temporales del workspace" cd $WORKSPACE_DIR find $WORKSPACE_DIR -type f -name "*.tmp" -print0 | xargs -0 rm -v fi echo "listo"

</source>

"The address is already in use" o "La dirección ya se está usando"

java.net.BindException: Address already in use: es uno de los errores más comunes, especialmente cuando se trata de programación web. Este error surge respecto al puerto 8080 (HTTP) o 1098 (RMI) cuando éste está siendo usado por otras aplicaciones que se ejecutan en la misma PC o Servidor. A continuación una imagen de como se vería dicho error:

Será necesario ver cuales son los puertos que están siendo usados y por cuales procesos, para ello, desde la consola debemos ejecutar el comando: sudo netstat -tlnp tal como se muestra en la imagen siguiente:

Seguidamente, será necesario liberar el puerto 8080, en el ejemplo de la figura sería:

Para ello, ejecutamos el comando kill -9 seguido del ID del proceso del cual queremos liberar el uso del puerto 8080, entonces, ejecutamos: kill -9 5276 como se muestra a continuación:

Con estos pasos, se habrá liberado el puerto, y el JMV Bind estará disponible para volver a ejecutar el Servidor de Aplicaciones.

"El JBoss nunca termina de iniciar el servicio - Starting JBoss....."

Si al querer iniciar el servicio del JBoss éste nunca termina de iniciarse completamente, se propone la siguiente solución a este problema. Es necesario modificar el archivo

/etc/hosts

Allí el nro. IP con el que se levanta el JBoss debe coincidir con el nombre de la máquina o el "hostname" que se utiliza en la configuración del JBoss Runtime. Por ejemplo, si está utilizando el parámetro -b 127.0.0.1 esta sería la línea

127.0.0.1	localhost nombre_de_la_maquina

Si utiliza el nro. de ip de su lan, sería algo como esto

192.168.1.100 nombre_de_la_maquina

Con esta modificación el servicio del JBoss debería terminar de iniciarse mucho más rápido.

"Falta de conexión con la Base de Datos"

Cuando se desea iniciar el servicio de JBoss para levantar una aplicación muchas veces el servicio nunca termina de iniciarse y puede que se deba por muchos motivos. Uno de ellos ya se menciona en la sección anterior, otra ocurriría por la falta de conexión con la base de datos al cual debe conectarse la aplicación. Este error o warning se visualizaría en la consola de nuestro entorno de desarrollo (IDE) de la siquiente manera.



Lo primero que se debería intentar es identificar el motivo por el cual no se estableció la conexión, para lo cual se debe abrir una consola y probar lo siguiente:

"Ping a la dirección IP"

Con esta opción se verificará si la conexión de red a la máquina donde se encuentra la base de datos fue o no establecida. En el caso favorable desplegará los paquetes que fueron transmitidos. En el caso desfavorable desplegará un mensaje del tipo "Unreachable" o "Inalcanzable".

ping "dirección IP"

"Telnet a la dirección IP"

Con esta opción se comprueba si el servicio de la base de datos está arriba. Para lo cual se debe escribir "telnet" más la "dirección IP" de la máquina donde se encuentra instalada la base de datos más el "puerto" donde escucha. Si la conexión fue exitosa debería desplegar un mensaje de "Connected" o "Conectado". Si no se estableció la conexión el mensaje sería "Unable to connect to remote host: No route to host".

telnet "dirección IP" "puerto de la base de datos"

"No se registra el driver"

Cuando se desea iniciar el servicio de JBoss para levantar una aplicación puede aparecer éste tipo de warning, que se visualizaría en la consola de nuestro entorno de desarrollo (IDE) de la siguiente manera, el mismo se debe a que no tiene el driver para oracle:



Problemas al Reiniciar el servicio de Jboss

Si al momento de reiniciar el servicio del Jboss

 service jboss restart 

Aparece el mensaje de Waiting for Jboss processes to stop mas de 10 veces, quiere decir que el servicio no se reinició correctamente y puede que existan procesos colgados.

  • Para matar el proceso, se deberá ejecutar:
 kill -9 PID 

Donde PID es el número del proceso que deseamos matar.

Luego se puede proceder a reiniciar el servicio del Jboss nuevamente.

  • Para verificar si el servicio se reinició correctamente ejecutar el siguiente comando:
  tail -f /opt/jboss-6.0/server/default/log/server.log 
 

Observación: Si se procedió a matar un proceso con kill, hay que tener en cuenta que se deben eliminar las carpetas tmp y work que se generan en la carpeta Default del servidor Jboss. Su ubicación puede ser la siguiente: /opt/tekoporu/server/jboss-6.0/server/default

Maven

Error al importar un proyecto Maven existente

Si aparece alguno de éstos errores al momento de importar un proyecto Maven existente, primero deberá eliminar el proyecto importado en el Project Explorer dentro del Eclipse, luego ir al directorio donde esta nuestro proyecto y ver los archivos ocultos(En Ubuntu sería la combinación de las teclas Ctrl+H), alli se pueden eliminar los siguientes archivos y directorios:

target

.settings

.classpath

.project

testdata

Ir al Eclipse e importar nuevamente el proyecto.

Inconvenientes a la hora de importar un proyecto Maven

Primero se debe descartar que se tenga problemas de acceso a Internet, una vez descartado verificar que el JAVA_HOME este correctamente seteado(Por lo general esta seteado en la siguiente ubicación /etc/profile.d/java_home.sh, pudiendo ser otra). Otro aspecto a tener en cuenta es que se debe tener instalado el Maven (Si tiene instalado el entorno de desarrollo Tekoporu ya posee instalado el Maven)

Para obtener mas información del Maven(Versión ), ejecutar el siguiente comando:

  apt-cache policy maven 

Se recomienda salir completamente del Eclipse y en una terminal ir a la ubicación en donde se encuentra nuestro pom.xml del proyecto y ejecutar

 mvn compile 

Que se encarga de compilar todo nuestro proyecto.

Luego se puede volver a importar el proyecto Maven en el Eclipse.

Error al deployar un proyecto

Si al momento de intentar deployar un proyecto Maven en Eclipse aparece éste tipo de error:

 DEPLOYMENTS IN ERROR:
   Deployment
"vfs:///opt/jboss-6.0/server/default/deploy/waspe.war_WeldBootstrapBean"
is in error due to the following reason(s):
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied
dependencies for type [XACMLPolicyBuilder] with qualifiers [@Default] at
injection point [[field] @Inject private
org.ticpy.waspe.view.XacmlMB.xacmlBuilder], **ERROR**
   Deployment "java:global/cdi/waspe/waspe/BeanManager" is in error due
to the following reason(s): ** NOT FOUND Depends on
'java:global/cdi/waspe/waspe/BeanManager' ** 

Lo primero que debe hacer es eliminar del workspace en el Eclipse los proyectos que tenga importados, luego salir del Eclipse.

Observación: Cuando se importa proyectos de tipo Maven al Eclipse se crean los siguientes ficheros ocultos:

.settings

.classpath

.project

Abrir una consola y posicionarse donde se encuentra nuestro archivo pom del proyecto y ejecutar lo siguiente:

 setics@setics:/opt/desarrollo/sources/wsdldiscovery/wsdldiscovery$ mvn eclipse:clean 

Éste comando se encarga de realizar la limpieza de las configuraciones del Eclipse, elimina los ficheros .project y .classpath pero no elimina el fichero .settings Entonces se debe eliminar manualmente de la siguiente manera:

 setics@setics:/opt/desarrollo/sources/wsdldiscovery/wsdldiscovery$ rm -rf .settings 

Si quisiera deployar el proyecto desde consola se necesita el siguiente plugin en nuestro archivo pom

<source lang=xml >

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jboss-maven-plugin</artifactId> <version>1.5.0</version> <configuration> <jbossHome>/opt/tekoporu/server/jboss-6.1</jbossHome> <serverName>default</serverName> <startOptions>-c default -b 0.0.0.0</startOptions> <fileName>${baseDir}/target/waspe-0.0.1-SNAPSHOT.war</fileName> </configuration> </plugin> </plugins> </build>

<properties> <htdocs.url>sftp://web.sourceforge.net/home/groups/d/de/demoiselle/htdocs</htdocs.url> </properties>

</project> </source>

Siempre en la ubicación donde se encuentra nuestro pom ahora ejecutar:

setics@setics:/opt/desarrollo/sources/wsdldiscovery/wsdldiscovery$ mvn jboss:start

Que lo que hace es deployar el proyecto desde consola. Para más información [Jboss Maven Plugin]


Para descartar problemas con el fuente (.war) deployado. Ejecutar:

setics@setics:/opt/desarrollo/sources/wsdldiscovery/wsdldiscovery$ mvn  -Dliquibase.should.run=false -DskipTests=true  package 
  • -Dliquibase.should.run=false Hace que no se corra el liquibase
  • -DskipTests=true Hace que no se corran los test

Ahora ya puede importar nuevamente el o los proyectos al workspace de su Eclipse


  • Algunas de las otras opciones llevadas a cabo para solucionar el problema y no funcionaron fueron:

- Copiar el .war al Jboss - Importar nuevamente el o los proyectos a un nuevo workspace

Eclipse

Script para iniciar el Eclipse con los directorios limpio de archivos temporales

<source lang="bash">

  1. !/bin/sh
  2. Iniciar el eclipse limpiando antes, archivos temporales del Jboss
  3. y del workspace
  4. awi[at]alefq.com

ECLIPSE_HOME=/opt/eclipse-helios-SR2 JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64/jre PATH=$JAVA_HOME/bin:$PATH

  1. Limpiamos los temporales del jboss y del workspace (parámetro W)

/usr/local/bin/limpiar-temporales-jboss+eclipse.sh W "${ECLIPSE_HOME}/eclipse" $@ & </source>

Al iniciar el Eclipse la barra de progreso queda congelada

Si al momento de iniciar el Eclipse nos damos cuenta que la barra de progreso se quedó colgada o congelada, se recomienda primero cerrar el Eclipse para ello ejecutar lo siguiente:

 xkill 

Y hacer click sobre el Eclipse colgado.

Luego iniciar desde la consola el Eclipse, si se tiene instalado el entorno de desarrollo Tekoporu la ubicación del mismo es el siguiente: /opt/tekoporu/ide/eclipse-3.6

 setics@setics:/opt/tekoporu/ide/eclipse-3.6$ ./eclipse 

Al hacer ésto, se desplegará el log de los posibles inconvenientes por el cual pudo haberse congelado nuestro Eclipse, uno de ellos se expone a continuación:

09:05:53.069 [org.eclipse.jdt.internal.ui.text.JavaReconciler] WARN  org.mortbay.log - failed SocketConnector@0.0.0.0:50313:
java.net.BindException: La dirección ya se está usando
09:05:53.077 [org.eclipse.jdt.internal.ui.text.JavaReconciler] DEBUG org.mortbay.log - EXCEPTION
java.net.BindException: La dirección ya se está usando
at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.6.0_24]

Entonces se recomienda verificar si quedó algún proceso java por detrás, para verificar ejecutar:

setics@setics:~$ ps aux | grep java  

user  11815 18.2  7.2 3329724 433940 pts/0  Sl   09:05   0:27 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java

Si se tienen procesos java entonces proceder a interrumpirlos o matarlos, inicialmente de la siguiente manera:

setics@setics:~$ kill NRO_PROCESO_JAVA 

Volver a ejecutar el comando de verificación, si aún quedan procesos entonces se debe forzar la interrupción, como se muestra a continación:

setics@setics:~$ kill -9 NRO_PROCESO_JAVA 

Con ésto se debería poder iniciar sin mayores inconvenientes nuestro Eclipse