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:


Colocar el driver ojdbc14.jar de oracle en el server jboss(versión utilizada) ubicación jboss-x.0/server/default/lib

 Ubicación de ejemplo: /home/usuario/tekoporu/server/jboss-6.1/server/default/lib/

Tener en cuenta que el mensaje cambiará de acuerdo al tipo de driver para conexión a base de datos se quiera utilizar. Pudiendo ser también postgresql u otro

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

Error al deployar un proyecto "WELD-001408 Unsatisfied dependencies"

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 en ambiente Unix):

.settings

.classpath

.project

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

 usuario@susuario:/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 directorio .settings Entonces se debe eliminar manualmente de la siguiente manera:

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


Para descartar problemas con el fuente o con el servidor de aplicaciones Jboss , se recomienda crear un archivo (.war) o (.jar) y deployarlo manualmente. Para esto ejecutar:

usuario@usuario:/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

Arrancar el servidor JBoss, y probar al aplicación. Si todo funciona, entonces se comprueba que el problema está con los metadatos generados por el plugin maven del eclipse.

Una vez limpiados los metadatos, como se describió más arriba, ya puede importar nuevamente el o los proyectos de tipo maven al workspace de su Eclipse

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

- Copiar un .war generado en otra máquina al Jboss (esto funcionó y fue lo que dió la idea para rastrear el problema, desde otro punto de vista, o sea limpiando los metadatos generados por el plugin de maven).

- Importar nuevamente el o los proyectos a un nuevo workspace (Esto no funcionó).

Solución alternativa

Eliminar el proyecto del server y de la carpeta Deploy en Eclipse. También eliminar las carpetas tmp, work y data que se encuentran en la sgte. ubicación:

/opt/tekoporu/server/jboss-6.0/server/default/ 

Luego iniciar el server sin ningún proyecto deployado. Una vez iniciado completamente deployar nuevamente el proyecto.

Jboss 6.x no soporta Java 7 "java.lang.ClassCastException: org.jboss.wsf.framework.deployment.jms.WebservicesDescriptorProcessorImpl"

Si aparece un error parecido a ésto al momento de iniciar su servidor Jboss 6.x:

<source lang=bash> Broken callback: ClassSingleCallbackItem@508b7fb6{name=interface org.jboss.wsf.spi.metadata.DescriptorProcessor whenRequired=ControllerState@1e9ba5aa{Installed} dependentState=ControllerState@1e9ba5aa{Installed} attributeName=setProcessor owner=AbstractKernelControllerContext@120e7368{ metadata=AbstractBeanMetaData@4803bd43 {name=JMSDescriptorDeployer bean=org.jboss.webservices.integration.deployers.JMSDescriptorDeployer properties= classLoader=BeanMetaDataDeployer$DeploymentClassLoaderMetaData@6a22ca48 {classloader=null} constructor=null autowireCandidate=true installCallbacks=[method=setProcessor, method=setParser]}name=JMSDescriptorDeployer target=org.jboss.webservices.integration.deployers.JMSDescriptorDeployer@1afeb49d state=Installed depends=AbstractDependencyInfo@6d7e9ea4{}} signature=org.jboss.wsf.spi.metadata.DescriptorProcessor}: java.lang.ClassCastException: org.jboss.wsf.framework.deployment.jms.WebservicesDescriptorProcessorImpl </source>

Se debe a que Jboss en su versión 6.x no soporta Java 7.

Observación: Para verificar su versión de Java ejecutar lo siguiente:

<source lang=bash>usuario@usuario:$ java -version</source>

Para solucionar esto, debe modificar el archivo stack-agnostic-jboss-beans.xml que se encuentra en la siguiente ubicación:

 jboss-6.x/server/default/deployers/jbossws.deployer/META-INF/stack-agnostic-jboss-beans.xml

Comentar el incallback e inyectar directamente el bean, para nuestro caso WSDescriptorDeployer y JMSDescriptorDeployer

<source lang=xml>

 <bean name="WSDescriptorDeployer" class="org.jboss.webservices.integration.deployers.WSDescriptorDeployer">


   <property name="processor"><inject bean="WSDescriptorProcessor"/></property>
   <incallback method="setParser"/>
 </bean>


 <bean name="JMSDescriptorDeployer" class="org.jboss.webservices.integration.deployers.JMSDescriptorDeployer">


   <property name="processor"><inject bean="CXFJMSDescriptorProcessor"/></property>
   <incallback method="setParser"/>
 </bean>

</source>

Maven

Error al importar un proyecto Maven existente

Si aparece alguno de éstos errores al momento de importar un proyecto Maven existente realice estos pasos:

  1. Primero deberá eliminar el proyecto importado en el Project Explorer dentro del Eclipse
  2. Para este paso debe tener el maven instalado y en el path. En ubuntu
     sudo apt-get install maven
    Luego ir al directorio donde esta el proyecto con problemas y ejecutar
     mvn clean; mvn eclipse:clean 
  3. Finalmente eliminar estos directorios (para ver los archivos ocultos en Ubuntu sería la combinación de las teclas Ctrl+H en el manejador de archivos), alli se pueden eliminar los siguientes archivos y directorios:
target
.settings
.classpath
.project
testdata

Ir al Eclipse e importar nuevamente el proyecto como proyecto maven.

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.

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

 usuario@usuario:/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:

usuario@usuario:~$ 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

O bien ejecutar el siguiente comando:

usuario@usuario:~$ jps -l 

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

usuario@usuario:~$ 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:

usuario@usuario:~$ kill -9 NRO_PROCESO_JAVA 

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

Al iniciar eclipse sale sin motivos (error relacionado a oxygen-gtk)

Cuando iniciamos eclipse y deseamos instalar algún complemento desde el Eclipse Marketplace y repentinamente sale por completo.

Iniciar el eclipse por consola y verificar el error, si es similar a lo siguiente:

<source lang="bash">

  1. A fatal error has been detected by the Java Runtime Environment:
  2. SIGSEGV (0xb) at pc=0x00007f8b07cb8718, pid=8714, tid=140235794671360
  3. JRE version: Java(TM) SE Runtime Environment (7.0_72-b14) (build 1.7.0_72-b14)
  4. Java VM: Java HotSpot(TM) 64-Bit Server VM (24.72-b04 mixed mode linux-amd64 compressed oops)
  5. Problematic frame:
  6. C [libgobject-2.0.so.0+0x19718] g_object_get_qdata+0x18
  7. Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
  8. An error report file with more information is saved as:
  9. /opt/tekoporu/eclipse-3.7/hs_err_pid8714.log

Compiled method (nm) 30175 718 n org.eclipse.swt.internal.gtk.OS::_g_object_get_qdata (native)

total in heap  [0x00007f8b2509cb90,0x00007f8b2509cf10] = 896
relocation     [0x00007f8b2509ccb0,0x00007f8b2509cd10] = 96
main code      [0x00007f8b2509cd20,0x00007f8b2509cf10] = 496
  1. If you would like to submit a bug report, please visit:
  2. http://bugreport.sun.com/bugreport/crash.jsp
  3. The crash happened outside the Java Virtual Machine in native code.
  4. See problematic frame for where to report the bug.

</source>

Se debe cambiar la apariencia de las aplicaciones

En Kubuntu ir a Preferencias del sistema => GTK => En la sección de Temas GTK cambiar la opción por defecto oxygen-gtk por cualquiera de las otras opciones.

Debido a que el tema oxygen-gtk genera confictos con nuestro eclipse, causando que se crashee.

Luego clic en Aplicar

Error al crear miniatura: Falta archivo

Pasos para recuperar un workspace corrupto

1- Eliminar el siguiente archivo workspace/.metadata/.plugins/org.eclipse.core.resources/.snap aveces éste archivo cuenta con un número adelante como por ejemplo 96.snap

2- En el caso de que no se solucione con la opción 1, hacer lo siguiente: Iniciar eclipse desde linea de comandos con la opción de clearPersistedState

./eclipse -clearPersistedState

Tekoporu Report

Fuente Lucida Sans no esta disponible

Tekoporu Report como su nombre lo indica nos ayuda a generar reportes, utiliza dos tipos de archivos:

  • El primero es donde damos el formato a nuestro reporte(archivo con extensión .jrxml)
  • El segundo es el archivo compilado correspondiente al punto anterior(archivo con extensión .jasper)

Si les llegase a aparecer un error similar a lo descrito abajo:

14:27:31,423 GRAVE [javax.faces.event] (http-localhost%2F127.0.0.1-8080-4) 
net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '''Lucida Sans''' is not available to the JVM. See the Javadoc for more details.

Los pasos a realizar son:

Deben utilizar el componente iReport 3.0.0(Probado con ésta versión) para abrir el reporte

  • Abrir el reporte (que es archivo con extensión .jrxml)
  • Cambiar el tipo de fuente por ej. a Arial
  • Posteriormente compilar el mismo (En el iReport => Ir a la pestaña Construir => Compilar). Ésto generará el archivo con extensión .jasper

Una vez generado dicho archivo, reemplazar el archivo ya existente en Eclipse y deployar nuevamente el Proyecto.

POSTGRES

Cuando nos salga algun error similar a

 SQLSTATE[22008]: Datetime field overflow: 7 ERROR:  date/time field  value out of range: "27/01/1982" HINT:  Perhaps you need a different "datestyle" setting.

Corresponde a una configuracion del Datestyle

DateStyle - Ajusta el formato de visualización de los valores de fecha y hora, así como las normas para la interpretación de los valores de entrada de fecha ambigua. Por razones históricas, esta variable contiene dos componentes independientes: la especificación de formato de salida (ISO, Postgres, SQL, o alemán) y la especificación de entrada / salida para ordenar año / mes / día (DMY, MDY, o AMD).

Para solucionar ir al archivo main del postgres

Ejemplo de ubicacion: /etc/postgresql/9.3/main

Y editar la linea

postgresql.conf:datestyle = 'iso, dmy'

Dejar como dmy