Miguel Monreal Ordiñana

Archive for the ‘Java’ Category

Mi idea era limpiar HTML mal formado y pasarlo a XHTML, eso lo he conseguido con JTidy (aún con la poca documentación existente ;( ).

Una vez conseguido y pasar de un codigo HTML horrible tal que así:

<P ALIGN="LEFT">
<FONT FACE="Verdana" SIZE="10" COLOR="#0B333C" LETTERSPACING="0" KERNING="0">
Lorem ipsum dolor
</FONT>
</P>

A XHTML (mucho mejor):

<p style="text-align:left;font-size:10px;font-family:Verdana;color:#0B333C">
Lorem ipsum dolor
</p>

Quería hacer desaparecer el atributo style (y demás posibles atributos) por completo y dejar los <p> limpios. Quizá haya otras maneras, pero se me ocurrió hacerlo con expresiones regulares. Estuve echando un ojo a este tutorial (y al JavaDoc) y este es el código Java necesario:

// Cadena original
String              s = "Lorem ipsum dolor";
// Patron
String        pattern = "<p.*?>";
// Cadena por la que sustituir el patron
String       replace  = "<p>";

// Compilar el patron ignorando si esta en mayusculas o minusculas
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(s);
System.out.println("Antes:" + s);

// Sustituimos todas las ocurrencias
s = matcher.replaceAll(replace);
System.out.println("Despues:" + s);

Antes:

<p style="text-align:left;font-size:10px;font-family:Verdana;color:#0B333C">
Lorem ipsum dolor
</p>

Despues:

<p>
Lorem ipsum dolor
</p>

Creo que hay partes de la JDK de Java que su uso no es para nada fácil e intuitivo, incluso a veces poco eficiente. Hablo por ejemplo del manejo de ficheros (I/O) y en este caso de calendario, fechas, tiempo, zonas horarias etc.

Resulta realmente lioso hacer uso de ellas para cosas tan sencillas como crear y comparar de fechas o saber cuantos días faltan para una fecha.

De nuevo una librería opensource viene al rescate reimplementando de una manera sencilla esta pata coja de la API. Se trata de la librería Joda, y en su página se define así:

Joda-Time has been created to radically change date and time handling in Java. The JDK classes Date and Calendar are very badly designed, have had numerous bugs and have odd performance effects. Here are some of our reasons for developing and using Joda-Time

Aunque la API es muy grande me ha parecido fácil de utilizarla.

Por cierto para saber cuantos días faltan para un fecha es tan sencillo como lo siguiente:

Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();
Etiquetas: , ,

Una de las cosas que primero aprendí cuando empecé a trabajar en un entorno productivo fué la importancia de que un proyecto además de cumplir con su cometido lo haga de una manera rápida (cada vez más).

Viendo que muchos sitios con tecnologías php+mysql (una combinación que ofrece una velocidad superior a java) estaban implementando sistemas de caché (wp-cache para wordpress mismo) pensé que para un proyecto web en Java era más que una sugerencia.

Yendo al grano. He estado echandole un ojo a oscaché, una solución de opensymphony (webwork, ahora struts 2). De las diversas herramientas que dispone destaco la API para poder cachear objetos Java.

A través de la clase GeneralCacheAdministrator (clase estática a la que se accede a través de un singleton) iremos guardando nuestros objetos Java (objetos simples, listas, etc.) pudiéndoles establecer un tiempo de refresco, en el que el contenido se actualiza de la base de datos o incluso seguir sirviendo contenido dinámico en caso de caida de la base de datos (fail over). (Ver ejemplos)

Además de esto incluye taglib propio cacheo de fragmentos o páginas enteras jsp, CacheFilter (servlet para cacheo de contenido en general, pdfs, etc.) e incluso una integración con Hibernate entre otras cosas.

Las primeras impresiones son buenas, y ya lo estamos empezando a usar en producción

¿Utilizais algún sistema de cacheo?

UPDATE: Desde el día 28/03/08 se encuentra disponible una beta pública del plugin de Struts 2 para  NetBeans

En relación al post anterior, leyendo los foros de webwork, he encontrado un hilo que habla sobre el desarrollo de un plugin de NetBeans para su integración con Webwork 2.2.x y otro para la integración con Struts 2.Ambos se están llevando a cabo desde Sun.

Éstas son las páginas:

Tal y como cuenta el hilo, Philip Luppens ha hecho la siguiente lista de deseos (que no es poco) para estos plugins. Alguno de ellos:

  • Edición gráfica/texto del fichero xwork.xml
  • Registrar una clase en xwork.xml
  • Posibilidad de usar annotations para los ficheros de configuración, validation.xml, xwork.xml, etc.
  • Wizard para crear nuevos interceptor, convertidores de tipo (type conversors), etc.
  • Drag & drop de tag/componentes/directivas para jsp/freemarker/velocity
  • Crear un plugin para siteGraph
  • Creación de un explorador de acciones para poder añadir, probar/parar acciones con expresiones OGNL (similar a valuestack explorer)

La idea es ir creando estas funcionalidades en el plugin para Webwork e incorporarlo posteriormente en el de Struts 2.

Finalmente aquí hay más herramientas relacionadas con Webwork

Me sorprendieron las ventajas para programar en web que aporta el framework Webwork, sobretodo por ser un framework apenas intrusivo y sencillo. Presenta otras muchas bondades (y algún que otro problema), pero sobre todo elimina el pensamiento unido entre framework y complicación e intrusismo que venían labrando frameworks como Struts en sus version anterior a la 2.

Esta unión alejaba a los programadores de usar cualquier ayuda externa y se solía recurrir a programar “a pelo” con JSTL y EL (Expression Language) o a crear tu propio framework, con lo que ello suponía, tiempo de desarrollo, bugs, aprendizaje a los nuevos desarrolladores del equipo, etc.

Debido a esto las comunidades que desarrollaba struts y webwork por separado se han unido para crear struts 2, que conjuga las bondades de Webwork con la experiencia y el enorme soporte que acarrea la comunidad de struts.Existe ya una versión estable preparada para producción . La migración de webwork 2.2.x a Struts 2 es casi inmediata, apenas se basa en cambio de nomenclatura.Un poco menos directa es la migración de Struts 1.x a Struts 2

De esta manera creo que deja de tener sentido no apoyarte en algo que realmente facilita el trabajo farragoso de cada día y que miles de usuarios/empresas usan a diario, aportando tanto una respuesta a la hora de repotar errores como de feedback muy buenos.

De todas maneras, si no te convence, existen otras muchas alternativas, Tapestry, Coccoon, Zend, Equinox, Spring MVC…