Buscar
Social
Ofertas laborales ES
jueves
jun182009

Servicios web con Spring-WS

Spring-WS es una extensión a Spring para facilitar la creación de servicios web Java. Spring-WS se basa en el concepto de "contrato primero", con el cual se define primero el contrato del servicio y luego se implementa, evitando atar al contrato como sucede en los casos en los cuales se genera el mismo a partir de las clases Java.

En el tutorial Servicios web con Spring-WS vemos cómo crear un servicio web utilizando este framework de Spring. El tutorial incluye ejemplos para publicar un servicio web a partir de un WSDL existente, publicación automática usando un XSD, generación de distintipos tipos de Endpoint (usando JDom y Castor para convertir XML en objetos Java) y manejo de fallos. 

miércoles
jun172009

Mañana y pasado se celebra el Sun Open Communities Forum

Ya sé que para los que no hayáis ajustado vuestra agenda anteriormente para poder asistir al evento probablemente sea un poco tarde. Pero este año el evento se va a retransmitir mediante streaming, por lo que podréis seguirlo sin necesidad de desplazaros a Madrid, tanto los que viváis en España, como los que estáis en Latinoamérica o en cualquier otra parte del mundo. Eso sí, los de Latinoamérica vais a tener que madrugar un poco si queréis ver las primeras charlas de la mañana ;).

 

Para poder acceder a los enlaces del streaming (hay dos, uno para cada track) es necesario registrarse. El registro, por supuesto, es gratuito.

 

Por último, para los quistes interesados en la JavaCup, deciros que la forma de enterarnos lo antes posible del resultado de la final es siguiendo el evento a través de streaming; a las 16:30 GMT +1 retransmitiremos la gran final de la JavaCup 2009 en el Track 1 del evento.

miércoles
jun172009

Aplicaciones basadas en XUL. ¿Por qué no?

Ahora mismo estoy trabajando en dar soporte XUL a ItsNat.

XUL para el que no lo conozca es un sistema de componentes basado en markup que ha estado presente en el mundo web desde el renacimiento del Mozilla 1.0, en torno a 10 años, actualmente está presente en cualquier navegador Gecko y por supuesto en el FireFox. En XUL está desarrollado el "chrome" del propio FireFox, es decir el sistema de menues, botones, barras y diálogos está hecho con XUL. Por hacer una analogía XUL viene a ser una especie de sistema de componentes basados en tags como en JSF o ZK (de hecho ZK está inspirado en XUL), con la diferencia de que dichos tags son directamente entendidos por el navegador sin necesidad de traslación a HTML, por lo tanto a través de JavaScript podemos manipular dicho DOM XUL en el cliente y con CSS modificar la visualización por defecto, además XUL permite embeber elementos HTML sin problema. Un par de ejemplos online puedes encontrarlos aquí y aquí.

Soportar XUL en ItsNat es una tarea sencilla pues en el concepto "el navegador es el servidor" encaja muy bien la gestión de cualquier namespace que esté soportado por el navegador, de hecho ItsNat actualmente ya soporta SVG puro. Realmente XUL está ya soportado.

El soporte de XUL permitirá desarrollar aplicaciones cliente/servidor similares a las aplicaciones de desktop basadas en componentes XUL usando AJAX y siguiendo la filosofía Single Page Interface. Los componentes "free" de ItsNat se adaptan sin problema al markup de XUL como ya se hace en SVG, el problema surge con componentes por defecto interactivos tal y como checkbox o listbox, similares a los correspondientes en HTML (input checkbox y select), en estos elementos se puede usar las técnicas de eventos y transporte de datos de bajo nivel de ItsNat pero sería deseable crear componentes específicos que simplificaran su gestión desde el servidor usando data models, selection listeners etc.

XUL no es nuevo, como decía antes XUL ha estado presente desde la primera versión del motor Gecko en torno al año 2000. Buscando tutoriales, ejemplos de código XUL y aplicaciones basadas en XUL el resultado ha sido desolador, los resultados son escasos y mucha documentación y experiencias tienen bastantes años detrás. Esto es importante a la hora de dedicar recursos a una tecnología cuyo uso principal es el look and feel, menues y diálogos del propio FireFox.

Esto me ha llevado a plantearme ¿por qué apenas se usa XUL?, yo mismo he encontrado varias posibles respuestas:

1) Es una tecnología que sólo funciona en una sola familia de navegadores (Gecko).  

2) Es una tecnología web que aunque funciona también en modo remoto (código XUL cargado desde un servidor web) su propósito fundamental es aportar una experiencia de usuario similar a las aplicaciones de desktop. XUL no tiene un tag form aunque se podría usar el del HTML.

3) Los frameworks web servidor han ignorado totalmente el soporte de XUL. Un soporte básico se puede conseguir en los frameworks tipo "action" con libertad de diseño del template, pero desde luego el soporte es nulo con AJAX.

El apartado 1 a día de hoy no tiene una solución clara, o mejor dicho sí la tendría en ItsNat pero requería montones de trabajo, se trataría en navegadores no Gecko de generar HTML y JavaScript (para simular el comportamiento visual por defecto de los componentes XUL), y a través de la correspondencia de árboles DOM entre cliente y servidor, tratar de simular por ejemplo que un elemento XUL ha sido pulsado en el cliente cuando realmente ha sido un elemento HTML para dirigir dicho evento al elemento correcto en el servidor.

El apartado 2 que podría ser un problema antiguamente, hoy es una ventaja pues la tendencia actual es la de emular al desktop visualmente y a evitar la recarga de la página lo cual se consigue via AJAX.

El apartado 3 puede cambiar, ItsNat sería quizás el primer framework céntrico en el servidor que procesara AJAX de XUL.

En resumen, el apartado 1 es el principal problema no resuelto, una aplicación XUL sólo funciona a día de hoy en navegadores Gecko, lo que me hace pensar es que en tiempos en donde Flex y AIR, soluciones claramente propietarias, apuestan por conquistar el mundo de las aplicaciones (embebidas en HTML en el caso de Flex y en el desktop en el caso de AIR), ¿por qué XUL no es cada vez más una opción de primer orden?.

Flex se ejecuta a través de un plugin en el navegador, ¿qué impide a un Active X embeber FireFox en el Internet Explorer? esto no es nuevo, existe dicho Active X pero abandonado.

En el caso del escritorio el proyecto Prism pretende introducir aplicaciones basadas en FireFox en el escritorio "sin navegador", un claro competidor de AIR, dichas aplicaciones obviamente también podrían ser XUL.

¿XUL puede ser una nueva opción a la hora de desarrollar aplicaciones web?

¿Podría darse un renacimiento de XUL como un futuro estándar de componentes web que adoptaran otros navegadores?

 

martes
jun162009

OpenXava 3.1.3: Productividad y flexibilidad para Java EE

OpenXava 3.1.3 es un marco de trabajo para desarrollar aplicaciones Java empresariales de una forma diferente: OpenXava evita MVC. Es un motor de aplicación JPA en el que tu provees tus POJOs anotados con JPA y obtienes una aplicación lista para producción.
Productividad Con OpenXava, solo necesita escribir tu modelo, POJOs con anotaciones. No necesitas escribir la vista, y los controladores (para mantenimientos, listados, etc) se reutilizan.

Es decir, si escribes una clase como esta: 

 

@Entity
public class Profesor {

@Id @Column(length=5) @Required
private String id;

@Column(length=40) @Required
private String nombre;

// Getters y setters

}

Obtienes una aplicación (mirala aquí) para matenimiento, listado en PDF, exportación a excel, búsquedas, ordenación, validaciones, etc. Solo has de escribir una simple clase Java, nada de XMLs, JSPs ni generación de código.
OpenXava no es solo para escribir mantenimientos simples para clases simples, con él puedes crear aplicaciones sofisticadas con lógica compleja e interfaces de usuarios avanzadas. OpenXava soporta referencias, colecciones, herencias, pestañas anidadas, marcos anidados, etc.
Flexibilidad Dado que OpenXava se uso desde su mismo principio para desarrollar aplicaciones de gestión de la vida real (y no meros prototipos) tiene un nivel bastante alto de flexibilidad gracias a sus potentes anotaciones para vistas declarativa, los editores personalizados para propiedades, y la opción de crear la vista a mano.
Además, desde esta nueva versión 3.1.3, OpenXava te permite definir la forma en la interfaz de usuario se genera. Esto es posible porque puedes declarar editores personalizados para referencias (@ManyToOne, @OneToOne) y colecciones (@OneToMany, @ManyToMany). Es decir, si tienes esta colección en tu entidad JPA:

 

@OneToMany(mappedBy="padre", cascade=CascadeType.REMOVE)
private Collection comentarios;

 

Entonces OpenXava produce una interfaz de usuario genérica para la colección, tal y como la de esta demo. Si esta interfaz de usuario no se acopla a tu caso concreto puedes usar la anotación @Editor:

 

@OneToMany(mappedBy="parent", cascade=CascadeType.REMOVE)
@Editor("ComentariosBlog")
private Collection comentarios;

 

Y has de tener el editor definido en editores.xml, así:

 

 Si tienes varias colecciones de ComentarioBlog esparcidas por tu aplicación, puedes definir tu editor así:

    



De esta forma no necesitas poner @Editor en cada una de las colecciones BlogComment.
Además, puedes definir el editor por defecto para todas las colecciones o referencias, como sigue:

    


    


Así, todas las colecciones y referencias de la aplicación serán dibujadas por tu propio editor. Por tanto, estás definiendo la forma en OpenXava genera la interfaz gráfica.



Más información: http://www.openxava.org/

¿Pensáis que usar JSF, FLEX, JavaFX or GWT directamente para generar la interfaz gráfica es de verdad productivo?
¿Creéis que una interfaz de usuario automática desde el modelo puede ser lo suficientemente flexible para aplicaciones de la "vida real"?
lunes
jun152009

Próxima reunión CRJUG -  WebServices

Hola, Solo para anunciar por este medio la próxima reunión del Java User Group de Costa Rica. El 23 de Junio a las 6:30 pm en el Auditorio de la Universidad Latina.

El tema es Java Web Services y el expositor es Rodrigo Nuñez, la agenda es la siguiente:

- Definicion de Web Services
- Conceptos y Herramientas para SOA
- WebServices en Java
   o Metro
   o GlassFish
   o Sysdinet
- REST en Java
- WebServices en .Net
- Opciones de Escalabilidad y Seguridad
- Conclusiones


Saludos,

J