miércoles, 6 de marzo de 2013

...Y cuatro


"No sé por qué me salvó la vida. Quizá en esos últimos años él amó la vida con más intensidad que nunca, no sólo su vida, la de cualquiera, mi vida. Y lo único que quería eran las mismas respuestas que el resto de nosotros: ¿de dónde vengo?, ¿a dónde voy?, ¿cuánto tiempo me queda? Todo lo que podía hacer era quedarme allí y verlo morir"- Deckard
Blade Runner


Hoy este blog cumple su cuarto año en la que probablemente sea la situación socio-económico-política más difícil de la gente de mi generación. Es difícil apartar el contexto en el que este blog se publica y evitar la tentación de escribir algo sobre la crisis y la actualidad. Y aunque este blog tiene y seguirá teniendo una temática exclusivamente técnica (o tecnológico-científica, si incluyo los temas de astronomía y actualidad tecnológica) es inevitable que se impregne del desánimo y la indignación social en la que vivimos.

Quizá por ello he querido (una vez más) traer aquí la secuencia final de Blade Runner, invocando la misma catarsis y perplejidad existencial que provocaba en Deckard... y probablemente aguardando la renovación que se supone que esperamos y deseamos muchos.

2013 (C) Fran Barquero

Gracias, Fran, por la ilustración de aniversario de este Blog.

Saludos y gracias por tu visita.


viernes, 15 de febrero de 2013

Error del instalador Unix de glassfish 3.1.2.2


A la vista de suficientes ojos, todos los errores resultan evidentes.
Ley de Linus, formulada por Linus Torvalds, (1997).

Si has instalado Glassfish 3.1.2.2 en un servidor Unix en español y has seleccionado "Instalación personalizada", habrás sufrido el extraño error:

org.jdom.input.JDOMParseException: Error on line 98: El tipo de elemento "htmlpanel" 
debe ir seguido de una de estas especificaciones de atributo: ">" o "/>".
WARNING: No se ha podido procesar un evento de navegación para 
command=AC_NEXT [Comando=AC_NEXT Error=Invalid SwiXML Descriptor. ]

La interfaz gŕafica presenta una imagen como la siguiente:


Tal y como me imaginé, tiene que ver con el poco cuidado que está teniendo Oracle con los idiomas últimamente en los instaladores (el instalador de la versión 3.1 también adolecía de similares problemas). La solución es muy sencilla: ejecutar el instalador forzando el idioma inglés, por ejemplo, así:

szarza@szarza:~$ LANG=EN ./glassfish-3.1.2.2-unix.sh

con lo que podremos acceder a la instalación personalizada sin problemas.



Supongo que existe algún error en los XML del instalador con recursos en español que no se escapan debidamente.

Espero que os ayude en casos similares.

viernes, 14 de diciembre de 2012

2012: El fin de los magufos


“Windows NT addresses 2 Gigabytes of RAM, which is more than any application will ever need.”
(Microsoft, on the development of Windows NT, 1992)

Este año que termina es el año favorito de los magufos. Tras las bobadas del fallido fin del mundo del año 2000, llega el siguiente fin del mundo: el 21 de Diciembre de 2012. Ya veremos cuando será el próximo...

Ayer se me ocurrió escribir sobre esto pensando en el pasado 12-12-12, al que se le atribuyeron no pocas insensateces cuando todo el mundo sabe que lo único importante de ese día es que es el cumpleaños de uno de mis hermanos. Con las profecías chorradas de Nostradamus ya cubiertas de polvo, a los charlatanes cuentistas y demás inventores de tonterías, les dió por mirar, mira tú, nada más y nada menos que a uno de los calendarios Maya... ¡Y dio hasta para una película!

En fin. Queridos lectores, lamento ser yo quien os fastidie el magno espectáculo, pero el 21 de diciembre de 2012 a las 11:12 UTC no va a ser el fin del mundo. Ocurrirá lo que todos los años en torno al mismo momento aproximadamente: el solsticio. El universo no se rige por nuestras formas de contar las cosas. La verdad es que el fin del mundo será un impresionante espectáculo, pero aún nadie sabe cuando sucederá porque, obviamente, no depende de ningún adivinador. No hay problema. La humanidad tiene butacas reservadas para ese espectáculo. Y es seguro que sucederá antes de los próximos 3.000 millones de años... Me apuesto una cena. En todo caso, a los engañabobos les quedará el refugio del próximo año, un 13, que dará para más bobadas que ayuden a sus ingenuos cŕedulos a olvidar sus "predicciones" anteriores.

En medio de esta agitada crisis, la comunidad científica nos regaló este año con el que probablemente será el primer descubrimiento más significativo de este siglo: una nueva partícula que concuerda con el bosón de Higgs. Si se confirma el descubrimiento de la maldita partícula ("The goddamn particle", no the "God Particle", como el editor de Leon Lederman transformó con disparatado desatino), la física podría corroborar el modelo estándar en los próximos años o, en todo caso, permitirá extraordinarios avances en física.

Más prosaico pero no menos importante: Blade Runner cumple su 30 aniversario este año. Ya conocen mis lectores habituales mi devoción por esa película.

Este segundo semestre del año mi actividad en el blog ha sido muy poca por razones diversas que no vienen a cuento ahora, pero soy consciente de ello. Y es que este año está siendo francamente difícil para mi en términos de tiempo libre para el blog (y también en otros que tampoco vienen al caso ahora).

Con suerte, el 21 de Diciembre se podrían acabar las magufadas de una vez por todas, aplastadas por la tozuda y sencilla realidad... pero no se debería a los mayas, sino al uso de nuestro cerebro con la mejor de las herramientas: el pensamiento científico... y a falta de ello, el sentido común.

A por el 13!!

Feliz año nuevo.


Referencias y más información:

miércoles, 17 de octubre de 2012

Comparar y actualizar esquemas de PostgreSQL



"1f y0u c4n r34d 7h15, y0u r34||y n33d 70 637 |41d."

Al pasar a producción nuevas versiones de software empresarial necesitamos automatizar la "actualización" del sistema con el objeto de que sea repetible y pueda realizarse lo más rápidamente posible y sin errores. Uno de los elementos críticos es el esquema de nuestra base de datos sobre el cual, en la mayor parte de los casos, descansa la estructura vertebral de nuestro sistema.

Si la comparación y obtención de diferencias (comparison/diffing) entre el esquema antiguo y el nuevo es una tarea tediosa que está sujeta a numerosos errores, la generación de un script SQL de actualización es aún más compleja, ya que requiere un tratamiento inteligente y ordenado de dichas diferencias.

Para ayudarnos en esta tarea con PostgreSQL, me encontré una excelente herramienta: Another PostgreSQL Diff Tool (apgdiff). Agpdiff es una herramienta gratuita de comparación y obtención de diferencias de esquemas de bases de datos (database schema diff tool) específica para PostgreSQL. La he probado y he de decir que quedé realmente impresionado. Tan sólo tuve que añadir las lógicas modificaciones al script de actualización generado relacionadas con los datos (actualización de filas con valores NULL en campos que pasan a ser NOT NULL, etc...).

En el sitio de la herramienta viene información suficiente sobre su funcionamiento y cómo usarlo. Sólo añadir, como recomendación, la utilización de la opción --add-transaction que nos permitirá probarlo con comodidad y corregir los errores.

Una herramienta imprescindible si usas PostgreSQL.

Referencias y más información:

domingo, 1 de julio de 2012

JBoss Open Forum 2012, 6-06-12, Madrid


El pasado 6 de Junio asistí al JBoss Open Forum 2012 en el que Red Hat presentaba muchos avances en sus soluciones de middleware empresariales (JBoss EAP 6, JBoss EDS, etc) así como casos de éxito en implementaciones de soluciones presentadas por las propias empresas cliente.

La verdad es que, de los últimos eventos de este tipo a los que he asistido, ha sido el que más me ha satisfecho. Tengo que destacar la excelente organización, sesiones con contenidos de enorme interés y ponentes a la altura de dichas ponencias.

JBoss fue durante un tiempo nuestro (me refiero en mi trabajo) Servidor de Aplicaciones "por defecto". Las versiones 3.x de JBoss funcionaban bien. Era rápido y tenía un motor de JMS francamente bueno. Aún a pesar de sus conocidos inconvenientes en cuanto a la gestión de configuración y el complicado ajuste de los class loaders, el servidor era de lo mejorcito no sólo entre los servidores Open Source, sino en general.

Sin embargo, a partir del año 2006, en el que se lanzó la especificación JEE 5, no veíamos avances consistentes en el Servidor de Aplicaciones en cuanto a dicha especificación. La compra ese mismo año, de JBoss por parte de Red Hat tampoco ayudó a agilizar el despegue de versiones y el lanzamiento de una nueva versión certificada JEE 5.... La verdad es que JBoss 4 nos decepcionó y, volvimos a realizar un examen a otros servidores. 2006 fue el año en el que coincidió una especie de pausa en JBoss (supongo que debida a la reestructuración e integración en Red Hat tras su compra), con el lanzamiento de Glassfish, el primer Servidor de Aplicaciones que soportaba JEE 5 y que era, además, la RI (Implementación de Referencia). Con lo que nos "pasamos" a Glassfish.


... Y hasta ahora. Llevamos trabajando con Glassfish como "nuestro" servidor de aplicaciones "por defecto" desde 2006. Pero las cosas pueden cambiar. Glassfish tenía novedades de las que JBoss adolecía: consola web, una configuración única... sin embargo, su motor JMS era menos configurable que el de JBoss, y tampoco tenía (y sigue sin tener) un browser JNDI. Por tanto, que JBoss llegara a tener las cosas que carecía e igualar o superar a Glassfish era una cuestión de tiempo que, al parecer, ha concluido.

En el JBoss Open Forum 2012 comprobé que JBoss había recuperado su ritmo, su innovación y su buen hacer y me enseñaron cosas que, la verdad, me impresionaron mucho y gratamente:
  • El nuevo servidor de aplicaciones se había reescrito por completo, según Pilar Bravo (JBoss Solution Architect, Red Hat). Y nos presentaban un renovado servidor JEE 6 certificado con mejoras aparentes a las que tenemos en Glassfish:
    • Configuración única
    • Varias consolas: además de la consola web, hay otras como REST o consola muy interesantes
    • Nuevo servidor JMS
    • Classloader más sencillo de configurar
    • ... y otras maravillas de clustering que habrá que probar detenidamente.
  • En cuanto a middleware, lo que más me llamó la atención fue:
    • Nuevas versiones
      • de su magnífico JBoss Rules
      • de JBPM
    • Productos (¿nuevos?) que desconocía:
      • JBoss EDS
      • JBoss ON

Imagen (tomada con mi móvil ;-) de una sesión
JBoss ON (Operations Network)  es una aplicación de monitorización de servicios. Una especie de Nagios+Caqti, para entendernos, pero especializado en servicios JBoss. Además, se puede combinar con Nagios para un control mucho más pormenorizado de los aspectos de cada servicio.

JBoss EDS (Enterprise Data Services Platform) es una plataforma de virtualización de datos que permite integrar datos de diversas fuentes y exponerlos en bases de datos virtuales accesibles a través de interfaces estándar como JDBC. 

La presentación de este producto corrió a cargo de Karoly Nagy (Senior Solution Architect, Red Hat). Debo decir que fue una presentación excelente: concisa, al grano y con ejemplo/demo rotundo. Este producto realmente me ha impresionado mucho, mucho. ¡Ya me hubiera gustado tener a mano este producto hace algunos años...! Considero que un caso de uso típico (y a mi profesionalmente se me han dado unos cuantos) es el clásico caso de migración de subsistema (backoffice, frontoffice...) o de tecnología en el que te encuentras con que existen múltiples fuentes de datos cuya migración simultánea se hace compleja de implementar y, sobre todo, de poner en producción. JBoss EDS me parece un fantástico "pegamento" y entre los sistemas nuevos y los antiguos, sirviendo de carretera provisional mientras se realizan migraciones parciales de una gran implantación escalonada que puede durar muchos meses o años.

Las ponencias sobre casos de éxito fueron, la mayoría, muy interesantes. Salvador Santander, del Departamento de Desarrollo de Tecnologías de Información de la Empresa Pública del Suelo de Andalucía (EPSA) puso la nota simpática y desenfadada a una buena exposición, muy cercana y realista, sobre su experiencia con Red Hat. De ésta y otras exposiciones de "Casos de éxito" me quedo con dos conclusiones:
  1. La satisfacción con el nivel de servicio de soporte por parte de Red Hat es buena. Tanto, que continuarán con ellos para proyectos de clustering y misión crítica
  2. Da la sensación de que ya (por fin) hay en España consultores y servicio de soporte suficiente y de calidad.



En resumen, me quedé con una buena impresión en general tanto de los nuevos productos de JBoss en el aspecto técnico, como de la aparente consolidación de Red Hat en España como compañero de viaje a la hora de afrontar nuevos proyectos y retos.

Este es un caso claro de éxito de los nuevos modelos de negocio del siglo XXI, basados en código abierto, apoyados en la comunidad y generando puestos de trabajo de calidad en empresas rentables.

Enhorabunena, Red Hat.

Referencias y más información:

martes, 12 de junio de 2012

Migrando a JEE 6 / EJB 3.1 (I)

“I’ve finally learned what ‘upward compatible’ means. It means we get to keep all our old mistakes.”
Dennie van Tassel

La especificación JEE 6 junto con la enorme lista de nuevas tecnologías que comporta (EJB 3.1, JAX-RS 1.1, JAX-WS 2.2, Java Servlet 3.0, etc...) está disponible desde diciembre de 2009. A pesar de haber pasado 2 años y medio, la verdad es que apenas he podido ponerla en funcionamiento en apenas un par de nuevos proyectos.
De esta nueva especificación destaca especialmente la especificación EJB 3.1 con muchas, potentes y útiles novedades. Sin embargo, en la adopción de esta especificación me he encontrado con algunos aspectos ásperos, incompatibilidades y diversos problemas indocumentados. Este artículo (y alguno que le sucederá) intentará ahorrar al lector interesado, al menos, el tiempo que yo he perdido intentando hacer funcionar cosas que teóricamente (en base a la documentación) deberían funcionar.

1. Incompatibilidad de la notación @Webservice con la vista sin interfaz (no-interface view)

Supongamos que tienes un EJB 3.0 publicado como Webservice, así:

 
/**
 * Stateless Session EJB 3.0
 * @author szarza
 */

@Stateless(name="CacheService")
@TransactionManagement(TransactionManagementType.BEAN)
@WebService(serviceName="CacheService",name="CacheService")
public class CacheServiceBean implements CacheServiceLocal {

 

Si vas a migrar a EJB 3.1, puedes tener la tentación de eliminar la interfaz local y usar la vista sin interfaz para simplificar tu proyecto... pero, lamentablemente, al eliminar la interfaz local, en Glassfish 3.1 me encuentro con un desagradable mensaje en despliegue:

[#|2012-06-11T15:43:38.754+0200|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=108;_ThreadName=Thread-2;|Cannot resolve reference Local ejb-ref name=cestel.services.cache.timer.CacheUpdaterTimedBean/cacheService,Local 3.x interface =cestel.services.cache.facade.CacheServiceLocal,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session
java.lang.RuntimeException: Cannot resolve reference Local ejb-ref name=cestel.services.cache.timer.CacheUpdaterTimedBean/cacheService,Local 3.x interface =cestel.services.cache.facade.CacheServiceLocal,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session...

En definitiva: simplemente no funciona. La notación @Webservice es incompatible con la vista sin interfaz. Puede parecer más o menos lógico... pero no lo he visto en la documentación por ninguna parte.

2. Incompatibilidad de la notación @Path@Produces en un módulo ejb

De la misma forma que se puede "publicar" de manera sencilla un EJB como un SOAP webservice JAX-WS simplemente añadiendo la notación @Webservice, podría ser igualmente sencillo publicarlo como un webservice RESTful (JAX-RS) añadiendo la notación @Path  y @Produces... pero no. Al menos en Glassfish 3.1.2 no es posible publicar un webservice REST en un módulo EJB. Esto me ha parecido un verdadero engorro, ya que nos obliga a realizar un módulo war sólo para esto.

En definitiva, si necesitáis un servicio REST, debes hacer un módulo war.

El próximo capítulo lo dedicaré a la adaptación a la nueva definición de JNDI portable y sus sorpresas inexplicables (por poco documentadas).


Referencias y más información:
Related Posts Plugin for WordPress, Blogger...