lunes, 20 de abril de 2009

Oracle to Buy Sun

Es la noticia de la jornada, llego ya tarde en anunciarlo pero, más vale tarde que nunca. Ver:

http://www.sun.com/third-party/global/oracle
http://www.oracle.com/us/corporate/press/018363

Parece que ya es oficial (el primer enlace es de SUN y el segundo es de ORACLE).

IBM ya había retirado su oferta y se sabía que había varios "interesados" detrás de la compañía. Lo que sí era seguro es que SUN vendía, ya que la noticia no le estaba haciendo más que daño. Se decía que el comprador podía ser uno de los siguientes: ORACLE, HP o CISCO (incluso sonó Google) . Uno de ellos se ha llevado hoy el "gato al agua".

Yo siento nostalgia, más que agrado o tristeza. Llevo 16 años asociando Java con el logotipo de las 4 "eSes" de SUN y se me va a hacer extraña otra combinación.

Si ORACLE ha comprado SUN... ¿qué pasará con SJSAS (ORACLE adquirió hace meses BEA WebLogic), con MySQL (competencia directa) y con la implementación de la JVM de SUN (ORACLE tiene la JRockit de BEA)?

ORACLE, creo que, por lo que no va a apostar es por la continuidad del Sun Java System Application Server o Glassfish. ORACLE está intentando posicionar su producto ORACLE (BEA) WebLogic como el Servidor de Aplicaciones J2EE de referencia.

Además ORACLE, con la compra de BEA, se ha hecho con, lo que en boca de "algunos", es la mejor implementación de la JVM (JRockit) de las existentes... con lo que sí puede intentar sustituir la implementación de SUN.

Yo no temo demasiado por MySQL... seguramente la llevará a un mejor lugar (en los gestores de bases de datos es donde tiene toda su fortaleza/conocimiento).

Otro producto que sí puede estar comprometido, en un futuro cercano, es Netbeans. ORACLE apostará (lo ha hecho ya, realmente) por Eclipse y no creo que mantenga vivos los dos productos. Además, en mi opinión, Netbeans es un producto menor, comparándolo con Eclipse.

Sí me preocupa un poco más el mercado de los servidores (hardware), ya que es aquí donde ORACLE tiene menos experiencia.

Más en:

http://java.dzone.com/news/oracle-buys-sun
http://www.elmundo.es/elmundo/2009/04/20/navegante/1240228857.html

sábado, 4 de abril de 2009

And The Winner is... Flex

Siguiendo con los últimos artículos sobre tecnologías existentes, para el desarrollo de aplicaciones empresariales y "ricas" para la web, me atreveré a elaborar un cuadro comparativo con las seleccionadas: Flex, Silverlight, JavaFX, GWT, AJAX y JSF.

Sé que la lista de tecnologías podría ser más amplia pero, sólo me atrevo a elaborar este cuadro con aquellas que conozco, al menos, un poco. Si queréis podéis enviarme comentarios con vuestras opiniones sobre el resultado o para corregir o ampliar la lista y tener, así, una visión más completa.

Los criterios a valorar son los siguientes:
  1. madura, duradera, con una masa de usuarios tras ella y con bibliografía publicada
  2. ligera y que dé un rendimiento aceptable
  3. que me permita desarrollar aplicaciones empresariales
  4. que me permita "persistir" información (acceder a bases de datos) sin dificultad
  5. con la que pueda invocar web services de forma sencilla
  6. que disponga de un conjunto de widgets "potentes" y orientados hacia la creación de formularios y grids (tablas) de datos
  7. con la que puedan generar información en forma gráfica (charts)
  8. con la que pueda generar informes y listados pensados para imprimir
  9. que me permita crear aplicaciones multi-idioma de forma sencilla
  10. que me permita crear interfaces que sean amigables, usables y realmente enriquecidos
  11. con la posibilidad de cambiar de skins (pieles) y que proporcione por defecto, al menos, un conjunto de estas (pieles) atractivo
  12. que no tenga que preocuparme del entorno donde va a ejecutarse la aplicación (sistema operativo y navegador) o que la preocupación sea mínima
  13. que tenga un buen entorno de desarrollo de referencia
Y la tabla con las puntuaciones (cada elemento de la lista anterior puede tener una puntuación de 0 a 10, siendo 0 el peor y 10 el mejor) es:
   Flex Silverlight JavaFX GWT AJAX JSF
-- ---- ----------- ------ --- ---- ---
1 7 6 2 5 8 7
2 6 7 5 5 6 7
3 8 8 4 7 5 9
4 7 6 6 7 3 9
5 9 9 6 6 5 6
6 8 8 2 8 3 6 (*) integrando con otras tecnologías
7 7 7 5 6 3 7
8 4 4 2 2 2 4 (*) integrando con otros productos
9 4 4 5 4 2 8
10 8 8 2 8 5 6
11 7 6 2 7 2 5
12 8 6 7 7 5 8
13 9 9 7 3 6 5
-- ---- ----------- ------ --- ---- ---
T= 92 88 55 75 55 87
Así que, en mi opinión, ¡el ganador es... Flex!

viernes, 3 de abril de 2009

¿Qué pasa con JSF?

En mi artículo anterior, que trataba sobre las tecnologías disponibles para ayudarnos en el desarrollo de aplicaciones empresariales para la web, se me olvidó citar una. Además es la tecnología que realmente utilizo para desarrollar el 80% de mis proyectos, en los últimos 3 años.

Por algo será el olvido ;-)

Se trata de JSF o Java Server Faces. Realmente JSF es un estándar más que una tecnología. Yo utilizo una de sus implementaciones: MyFaces de Apache. Aunque hay otras...

JSF nos permitirá construir aplicaciones de usuario desde el lado del servidor. Es decir, nuestro código JSF se ejecutará en el servidor de aplicaciones (debe ser un servidor J2EE), haciendo uso de componentes del servidor (beans para acceder a las bases de datos, por ejemplo) y generando automáticamente páginas HTML resultado, que serán las que realmente reciba el usuario en el navegador. En esto, JSF es diferente a Flex, Silverlight, JavaFX, GWT o AJAX (que se ejecutan del lado del cliente comunicándose asíncronamente con el servidor cuando necesitan de él).

En principio, el uso de JSF facilitará el desarrollo de nuestra aplicación, porque de forma natural hará que cumplamos con el patrón de desarrollo MVC.

Si estás desarrollando aplicaciones empresariales con JSP o servlets, te darás cuenta de lo fácil que es crear código "difícil de mantener". La complejidad va en aumento a lo largo del ciclo de vida de la aplicación. JSF viene a evitar esta complejidad.

JSF te proporciona un control más fino de la navegación, componentes de usuario, validadores, conversores, etc. Además puedes intergarlo fácilmente con un sistema de plantillas llamado Facelets y con otros componentes extendidos: Tomahawk, Trinidad, Tobago, ICEfaces, PrimeFaces, etc.

Algunas de estas librerías de componentes te permiten generar, incluso, verdaderos componentes "AJAXizados". Es decir, generarás el HTML, el JavaScript y las llamadas asíncronas AJAX de forma automática.

Respecto al desarrollo... desarrollaremos la vista de nuestra aplicación con un XHTML extendido con los tags JSF/Facelets. El controlador (las reglas de navegación entre las vistas) se programará mediante la configuración de un XML (faces-config.xml) o mediante anotaciones. El modelo (¿cómo accedo a los datos?) podrá ser desarrollado en Java (mejor dicho, en J2EE). Te aconsejaría utilizar el estándar JPA (Hibernate, EclipseLink, OpenJPA, etc.) para resolver el problema de la persistencia de datos.

Como entorno de desarrollo puedes utilizar tanto Netbeans como Eclipse. Los dos entornos disponen de paquetes, lo suficientemente potentes, que te ayudarán en el desarrollo JSF.

Hasta ahora parecen todo virtudes, entonces ¿cuál es el problema? ¿qué ocasionó mi olvido?

A simple vista, con JSF, el desarrollo de aplicaciones empresariales iba a simplificarse, JSF venía a hacernos la vida más sencilla a los desarrolladores, y... realmente esto no es así. La curva de aprendizaje es alta y al final el paquete (la aplicación) resulta complejo.

Además, algo muy importante para mí, pierdes el control sobre lo que el usuario va a recibir en su navegador, ya que todo va a ser generado automáticamente según las reglas que marca la tecnología. No resulta fácil, ni favorable, "forzar" el saltarse estas reglas. Así que, te tienes que adaptar a ellas.

Mi consejo es, si tu jefe (empresa o cliente) no quiere apostar por una tecnología con capacidades para crear verdaderas aplicaciones enriquecidas (léase Flex, Silverlight o GWT) deberás optar por desarrollar con JSF. Piensa, además, en incluir Facelets, Tomahawk y/o ICEfaces.

La apuesta no es muy arriesgada, te lo aseguro, aunque sí un poco "aburrida".

jueves, 2 de abril de 2009

Flex vs Silverlight vs JavaFX vs GWT vs AJAX

Desde hace meses, tantos como los que llevo sin escribir un nuevo post, he estado estudiando otras tecnologías, que el "mercado" oferta, para cubrir la necesidad de desarrollar aplicaciones enriquecidas para la web.

La lista seleccionada, es simplemente una muestra, hay más, es la siguiente (da pie al título del post): Flex, Silverlight, JavaFX, GWT y AJAX.

Mi objetivo es: quiero tener claro cuál de ellas cumple con los requisitos mínimos que exijo, a la tecnología seleccionada, para desarrollar mis proyectos con garantía de éxito. Por supuesto es indispensable que sea lo más "abierta" posible... hay que leer con lupa la letra pequeña del apartado "licencias" en cada una de ellas. Con la tecnología seleccionada quiero poder desarrollar aplicaciones (con ánimo de lucro ;-) ) sin que esto suponga un coste añadido para mi empresa.

Quiero una tecnología:
  1. madura, duradera, con una masa de usuarios tras ella y con bibliografía publicada
  2. ligera y que dé un rendimiento aceptable
  3. que me permita desarrollar aplicaciones empresariales
  4. que me permita "persistir" información (acceder a bases de datos) sin dificultad
  5. con la que pueda invocar web services de forma sencilla
  6. que disponga de un conjunto de widgets "potentes" y orientados hacia la creación de formularios y grids (tablas) de datos
  7. con la que puedan generar información en forma gráfica (charts)
  8. con la que pueda generar informes y listados pensados para imprimir
  9. que me permita crear aplicaciones multi-idioma de forma sencilla
  10. que me permita crear interfaces que sean amigables, usables y realmente enriquecidos
  11. con la posibilidad de cambiar de skins (pieles) y que proporcione por defecto, al menos, un conjunto de estas (pieles) atractivo
  12. que no tenga que preocuparme del entorno donde va a ejecutarse la aplicación (sistema operativo y navegador) o que la preocupación sea mínima
  13. que tenga un buen entorno de desarrollo de referencia
En otro artículo mostraré una tabla comparativa, pero "a bote pronto" puedo decir que:
  • Flex: sobre esta tecnología, de Adobe, ya he escrito varios artículos en este blog. Desarrollaremos la vista en XML (MXML) y, parte de, la lógica en ActionScript3. La lógica de negocio "dura" (por ejemplo: el acceso a bases de datos o la generación de PDFs) puede ser desarrollada, de forma más natural, en J2EE pero también podría ser en .NET, PHP o cualquier otra tecnología del lado del servidor conocida. Al final, la aplicación generada es un SWF (FlashPlayer) aunque también se puede generar, sin mucho esfuerzo, una aplicación escritorio (con AIR). El entorno de desarrollo de referencia es FlexBuilder (de pago). Ya he construido un par de aplicaciones reales, en producción, con ella y me ha generado bastante satisfacción.
  • Silverlight: tecnología de Microsoft. Empezó un poco rezagada, con respecto a Flex, pero está cogiendo "velocidad de crucero". El principal problema es que, como a todo lo que sale de la factoría de Microsoft, le cuesta adquirir la confianza necesaria por parte de los desarrolladores (por "recelo" no siempre fundado). Desarrollaremos la vista en XML (XAML) aunque la lógica de negocio "dura" será desarrollada de forma natural en .NET o invocando, fácilmente, servicios web (por ejemplo, desarrollados en Java). Al final, la aplicación generada necesita que instales un componente (Silverlight) en tu navegador, que aún no está disponible para todas las plataformas y navegadores. El entorno de desarrollo de referencia es Visual Studio (hay una versión Express). La sensación general es de expectación, parece bastante interesante, lástima que sea de Microsoft.
  • JavaFX: tecnología de Sun. Mi experiencia, llevo más de 15 años desarrollando con Java, me había creado bastante ansiedad por probar la primera versión de esta tecnología. A los dos días me aburrió "soberanamente" y ya la he abandonado. Le queda mucho por madurar (aconsejo que, incluso, por repensar). Desarrollaremos en un exotérico lenguaje "JSONenizado" feo y desagradable. Menos mal que por detrás seguimos teniendo a Java al rescate. La aplicación necesitará, para ejecutarse, del plugin Java instalado en tu navegador. El entorno de desarrollo de referencia es Netbeans, aunque también disponemos de un plugin para Eclipse. Si quieres desarrollar una aplicación triste y fea... prueba JavaFX. La sensación general es de decepción... quizá si orientas tu aplicación hacía el entorno móvil (¿alianza Android/JavaFX?) tenga algún sentido.
  • GWT: tecnología de Google. Trata de hacer más sencilla la tarea de desarrollar una aplicación AJAX. La idea es sorprendente... desarrollamos en Java y el compilador GWT nos genera código JavaScript. Es bastante sencillo invocar servicios desarrollados del lado del servidor mediante RPC. No hay un entorno de desarrollo de referencia, tenemos que conformarnos con algún plugin para Eclipse y algún módulo para Netbeans. El resultado final resulta un poco austero (como todo lo que hace Google) y debe ser reforzado con alguna librería de widgets adicional (GWT-EXT o SmartGWT)... lo que siempre resulta un problema añadido (ahora mismo, por ejemplo, no está muy clara la continuidad de GWT-EXT y el esfuerzo de migrar a SmartGWT puede ser alto). La sensación es de gran utilidad, despierta mi interés, alguna vez nos sacará de un apuro... pero, no depositaría todo mi desarrollo en esta tecnología (por si acaso).
  • AJAX: está tecnología realmente es un conjunto de tecnologías (XHTML, CSS, JavaScript, DOM y XMLHttpRequest) con la que se consigue una "mejor experiencia de nuestros usuarios" al usar aplicaciones o contenido simple en la Web. Si queremos que nuestra experiencia, como desarrollador, sea también mejor debemos hacer uso de alguna librería que nos facilite la vida: jQuery, Prototype, Mootools, etc. (pruébalas en este orden). No te aconsejo crear una aplicación empresarial en AJAX (salvo que sea con GWT)... simplemente "enriquece" con ella tus contenidos webs.
Mi consejo final es: hoy en día puedes apostar por Flex (la curva de aprendizaje no será muy alta), acércate poco a poco y sin prisas a GWT, observa de cerca a Silverlight (no lo deseches sólo por la marca) y, de momento, olvídate de desarrollar aplicaciones empresariales con JavaFX o con AJAX.