Category: JEE


Tras unos días jugueteando con OpenXava, he visto las posibilidades que tiene, para crear aplicaciones muy rapidamente. Así que he decidido compartir unos pequeños tips, para crear configurar un entorno que nos permita empezar a crear rápidamente aplicaciones.

Paso 1: Descargar OpenXava

El primer paso y más obvio, es descargar OpenXava, actualmente en su versión 4m2. Podeis hacerlo directamente desde su página o pulsando en el enlace que os ofrezco.

Paso 2: Descargar Eclipse

Bueno, este paso no siempre es necesario si ya teneis un Eclipse descargado, solo aseguraos de que es la versión con soporte para JEE, para poder tener las vistas y librerías necesarias. Podeis descargarlos Aqui

Paso 3: Leeros la documentación oficial

Antes de seguir paso a paso, recomiendo que leais la guía de referencia que viene en la wiki de OpenXava, sobre como crear el primer proyecto. Aunque los pasos que daremos aqui, serán algo diferentes.

Paso 4: Pasar a un workspace más quirurgico.

Si seguimos los pasos de la guía de referencia, esta nos indica que cambiemos el workspace al que viene dentro de la carpeta que descargamos, pero esto no siempre es deseable, ya sea por prefrencias personales, para mantener un orden, o porque después realmente, los ejemplos de openxava no nos interesa tenerlos por ahi pululando.
Así que vamos a personalizar nuestro entorno para empezar a crear aplicaciones OpenXava.

Del arbol de directorios de la carpeta de OpenXava que nos descargamos, dentro del workspace que viene, solo son necesarias dos carpetas de proyectos, que son la de OpenXava y OpenXavaPlantilla.
OpenXava es el proyecto base, sobre el que se apoyaran todas nuestras aplicaciones, y OpenXavaPlantilla, como su nombre indica, es la plantilla para crear nuevos proyectos.
Lo que tenemos que hacer, es copiar esas dos carpetas al workspace que queramos, ya sea el que utilizamos habitualmente, o en uno nuevo y vacio, para dedicarlo solo a las aplicaciones que desarrollemos con este framework.

Una vez tenemos esto, solo tenemos que arrancar Eclipse, y señalar a este nuevo workspace creado.  En caso de que no reconozca los dos proyectos, tendremos que crear un nuevo proyecto desde los directorios copiados.
File > New > Project… > Java Project
Y marcamos la opción de Create Project from existing source, y buscamos la carpeta, le asignamos un nombre al proyecto, preferiblemente el mismo que la carpeta contenedora (vamos, OpenXava y OpenXavaPlantilla)
Con esto, ya tenemos nuestro entorno listo.

Paso 5: Asociar el servidor tomcat a Eclipse

El último paso para tener nuestro entorno listo, es asociar el servidor tomcat a eclipse. Haciendo esto, nos ahorramos tener que estar lanzando los scripts para lanzar/parar el servidor, ya que podemos hacerlo directamente desde Eclipse, y también podremos utilizar el depurador. Lo primero, es poner la carpeta de Tomcat que viene con OpenXava en un lugar que nos resulte apropiado, eso a conveniencia de cada uno.  Ahora solo nos queda asociar el servidor, para ello abrimos la pestaña de servidores ( Window > Show view > Others… > Servers), dentro de la pestañita, pulsamos con el botón derecho y New > Server , ahora seleccionamos Apache Tomcat 6.0 y le damos a siguiente, nos pedirá configurar un RuntimeTime Enviorment para ese server, así que le indicamos un nombre y buscamos la carpeta del tomcat que copiamos, y le damos a finalizar.

Con estos pasos, ya tenemos nuestro entorno listo para crear una nueva aplicación con OpenXava y poder ejecutarla en nuestro servidor. Próximamente, publicaré como crear la primera aplicación OpenXava utilizando MySQL como gestor de base de datos.

Enlaces:

Buscando en la red herramientas de desarrollo rápido, para que nos endendamos, un tipo de herramienta que nos genere código y nos ayude a crear aplicaciones lo más rápido posible. Según la wikipedia, netbeans sería una herramienta de desarrollo rápido, y la verdad que este famoso IDE nos ayuda muchisimo a crear aplicaciones con unos pocos clicks y unas cuantas lineas de código que escribamos nosotros.

La herramienta que he encontrado, se llama OpenXava y nos permite crear aplicaciones web de gestión en escasos minutos. Nos podemos olvidar de tener que generar las tablas para la base dedatos, así como todo el tema de inserción modificación y eliminación de la base de datos. OpenXava se encarga de estas gestiones mediante JPA, aparte, también nos crea la parte de vista y controlador. Practicamente nos hace todo el trabajo, nosotros solo tenemos que escribir unas clases POJO y añadirles unas anotaciones para la persistencia, y en pocos segundos, obtendremos una aplicación funcional, ahorrandonos muchas horas y muchos quebraderos de cabeza.

Os recomiendo que le echeis un vistazo a sus ejemplos, para que veais su potencial:

http://www.openxava.org/web/guest/demos

Bueno, después de unas cuantas semanas sin postear, volvemos con las pilas recargadas. Vamos a empezar con un pequeño tutorial, para introducir informes creados con Jasper Reports en nuestras aplicaciones webs usando el framework Struts 2.

Para este tutorial, vamos a presuponer que se saben crear informes con jasper report (mejor, si utilizamos la herramienta iReport) y que tenemos ya montada una aplicación con Struts 2.

Lo primero que tenemos que hacer, es importar tantos las librerías de Jasper repots como el plugin para struts 2. El jar del pluggin lo podreís encontrar, con las librerias de struts 2, se llama struts2-jasperreports-plugin-2.1.x.jar , como veis, es muy facil identificarla.  Para ver que librerias necesitais de jasper report, podeis remitiros a la documentación oficial.

Una vez importadas las librerias, lo siguiente, sería abrir nuestro fichero de configuración struts.xml y hacer que el package en el que está la acción que nos mostrará el report, incluya el soporte para interpretar los informes:


<package name="default" namespace="/" extends="struts-default,json-default,jasperreports-default">

 <action name="Certificados">
 <result name="success" type="jasper">
 <param name="location">informes/report3.jasper</param>
 <param name="dataSource">resultados</param>
 <param name="format">PDF</param>
 <param name="reportParameters">params</param>
 </result>

 <result name="informe2" type="jasper">
 <param name="location">informes/peticion_justificacion.jasper</param>
 <param name="connection">conexion</param>
 <param name="format">PDF</param>
 <param name="reportParameters">params</param>
 </result>
 </action>
 </package>

Como podemos ver, el paquete, extiende la clase jasperreports-default , con lo que las acciones podrán devolver resultados del tipo jasper, para poder imprimir nuestros informes.  Después de eso, podeis ver dos acciones, y es de notar que el tipo es  jasper, con lo cual, ya se entiende, que es un informe.  Las acciones,  tienen que llevar los siguientes parámetros de forma obligatoria:

  • location: es la localización del informe compilado que queremos que se ejecute como resultado.
  • datasource : podemos especificar el nombre de una propiedade de la acción, que deberá devolver una colección de beans, de la cual queremos extraer las propiedades.
  • connection: pondremos el nombre de una propiedade de la acción que devuelva una conexión a la base de datos, que usará el report para conectarse y ejecutar la sentencia que lleve este implicita.

Entre datasource y connection, solo hace falta especificar una de las dos. En el código de ejemplo, hay dos parámetros más:

  • format: Será el formato de salida del informe, podrá ser PDF o cualquier otro que permita Jasper Report, (ver la documentación oficial)
  • reportParameters: Será un mapa, con una lista de parámetros que se utilizará dentro del report, por ejemplo para parametrizar la consulta del report.

Ahora solo nos queda ver, el código de una acción, que como veremos a continuación, puede llegar a ser muy simple:


public class CertificadosAction extends ActionSupport implements ApplicationAware{
private Collection resultados;
private Map<String,Object> app;
private Map<String,Object> params;

@Override
public String execute(){
ProxyBD proxy = (ProxyBD)app.get("db"); // Un objeto que envuelve la conexión
resultados = proxy.getDatos();
params = new HashMap<String,Object>();

params.put("param1","dato 1");
params.put("fecha",new Date());

return SUCCESS;
}

public Connection getConexion(){
ProxyBD proxy = (ProxyBD)app.get("db");
return  proxy.getConnection();
}

public Map getParams(){
return params;
}
public Collection getResultados(){
return resultados;
}

public void setApplication(Map<String, Object> arg0) {
app = arg0;
}
}

Como se puede ver, para un informe sencillo, el código de la acción es realmente reducido, incluso para informes más complejos, no es necesario complicar mucho más la acción. Se puede ver, que tiene varios atributos,  uno los resultados, que sería el datasource para el informe, otro son los parámetros adicionales que se desean enviar al report y por último, la conexión, de forma que esta misma acción, se puede reutilizar para diferentes report, dependiendo del resultado de la acción.

De momento, esto es todo por ahora,  en próximas entregas veremos como tratar con subreports sin perder la cabeza y algún que otro truquillo más.

Enlaces: