martes, 14 de febrero de 2012

JadClipse, plug-in para decompilar clases java para Eclipse

Otra forma de obtener el código fuente Java a partir de un archivo .class es usando el plug-in JadClipse para Eclipse. Si no eres usuario de Eclipse, te puedes plantear usarlo, como hacemos la mayoría de desarrolladores en Java.
Este complemento se integra totalmente en tu Eclipse, substituyendo al visor estandar de los archivos .class por el visor propio de JadClipse que muestra el código fuente correspondiente. Para ellos se utiliza el famoso y rápido decompilador Jad.
Dependiendo de tu versión de Eclipse deberás instalarte una versión u otra:
Instalación
  • Copia el JAR que te hayas descargado de JadClipse en el directorio de plugins de tu Eclipse.
  • Obten Jad según tu sistema operativo.
  • Reinicia el Eclipse en modo -clean
  • Configura el plugin. En el Eclipse ves a Window >> Preferences >> Java>>JadClipse. En el campo Path to Decompiler debe informar la ruta completa al decompilador Jad (por ejemplo C:\Program Files\Jad\Jad.exe).
  • Finalmente, para que al abrir un archivo .class se abra el visor de Jad debe asociar esta extensión al JadClipse Class File Viewer. Para ello ves a Window>>Preferences>>General>>Editors>>File Associations y comprueba que JadClipse Class File Viewer tiene la asociación por defector para los archivos .class.

Y esto es todo...

sábado, 2 de enero de 2010

Como decompilar clases de Java

¿Alguna vez os ha pasado que habéis perdido el código fuente de clases Java, pero tenéis las clases compiladas?
Esto es lo que me ha pasado a mi hace poco. He perdido el código fuente de un proyecto web Struts, del cual solo tengo el war que se instaló en servidor Tomcat. A partir del war he podido recuperar las páginas jsp, xml, ccs, class, pero no el código fuente Java.
A partir de los archivos .class se puede recuperar los archivos .java. Para ello existen numerosas herramientas gratuitas. Yo he probado con dos, las primera no pudo decompilar algunas de las clases, por lo que tuve que buscar otra. Estas son las dos herramientas que he probado:

1.- JODE

Un vez te descargues el jar (jode-1.1.2-pre1.jar) puede ejectarlo desde el prompt (en mi caso Windows XP):
C:\java -jar jode-1.1.2-pre1.jar
Si todo va bien, se arranca la aplicación:


Como podéis ver, en el panel de la izquierda se muestra los packages de las clases del classpath del JDK que tengáis instalado.
Ahora debemos informar el classpath donde están las clases que queremos decompilar:


Seleccionamos la clase en el árbol de la izquierda, y si todo va bien en el panel superior de la derecha podemos ver el código Java de compilado. Como podéis ver, en mi caso falló:


Así que busqué otra herramienta de decompilación:

2.- Java Decompiler

Como podréis ver en su web, Java Decompiler es un proyecto destinado a decompilar y analizar código Java 5 y versiones posteriores. Se compone de varias herramientas freeware. Yo he utilizado JD-GUI
Una vez descargada, basta con descomprimir el archivo y ejecutar el exe que contiene. En menú File, mediante la opción Open File podemos seleccionar el archivo .class a decompilar, y si todo va bien se mostrará el resultado de la decompilación: el código Java original podéis guardar en su respectivo archivo .java mediante la opción Save Source del menú File.


Como veis, ambas herramientas son fáciles de usar, así que vosotros mismos...
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

domingo, 22 de noviembre de 2009

Could not execute query (Hibernate & MySQL 5)

Could not execute query (Hibernate & MySQL 5)

Si trabajáis con Struts y Hibernate es posible que al realizar una acceso a la base de datos después de un cierto tiempo de inactividad en el servidor os encontréis con el siguiente error:

org.hibernate.exception.JDBCConnectionException: could not execute query

En mi caso, se trata de una aplicación web Struts 1.1, en un servidor Tomcat 5.5, atacando una base de datos MySQL 5.0.45 (JDK 1.5). El servidor es un Fedora, pero también se reproduce el problema en un Windows XP. El acceso a la base de datos se realiza con Hibernate 3.0

El error me le encontraba cada mañana a primera hora al hacer el primer acceso a la base de datos. Si desde el navegador forzaba el refresco de la página, en el segundo intento la página se cargaba correctamente. Parecía pues que el problema era debido a que después de un cierto tiempo de inactividad en el servidor, se cerraban las conexiones a la base de datos.

Buscando soluciones y consultando documentación, encontré varias posibles soluciones (una de ellas sugería capturar la excepción y lanzar la consulta a la base datos repetidas veces hasta no obtener el error, ¡menuda chapuza!).

En mi caso, finalmente opté por usar C3P0 como gestor del pool de conexiones con la base de datos. Así pues, lo que fue:

  1. Descargar la librería C3P0
  2. Añadir la librería C3P0 a mi aplicación Struts
  3. Configurar la propiedades C3P0 en el archivo de configuración de Hibernate (hibernate.cfg.xml):

    org.hibernate.connection.C3P0ConnectionProvider
    <!-- configuration pool via c3p0-->
    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
    <property name="hibernate.c3p0.timeout">1800</property><!-- seconds -->
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.c3p0.idle_test_period">3000</property>
    <property name="hibernate.c3p0.acquire_increment">10</property>

Podéis consultar la documentación de C3P0 y de Hibernate para más información sobre los valores de estas propiedades y para ver el resto de propiedades.

Espero que con esta información tengáis suficiente para resolver el problema. Si no es así podéis añadir un comentario...

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.