• Evitar iniciar varias veces la máquina virtual Java para procesos cortos

    java planeta-codigo programacion

    Java

    Si en una aplicación o proyecto tenemos necesidad de ejecutar uno o varios procesos múltiples veces donde únicamente cambian los parámetros, de forma seguida y el tiempo de ejecución de esos procesos es corto probablemente quizá veamos que la mayor parte del tiempo empleado de los procesos sea empleado en iniciar la máquina virtual Java (JVM). Digo quizá porque usando Ubuntu en la nube de Amazon EC2 el tiempo de inicio era de varios segundos, sin embargo, en mi ordenador personal usando Arch Linux y con un disco SSD de Samsung los tiempos que obtengo son de unos pocos milisegundos, quizá la larga lista de dependencias del paquete de Java 7 en Ubuntu (probablemente del paquete openjdk-7-jre) y ocupando considerablemente más megas en disco tenga algo que ver:


    Continuar leyendo...

  • Productividad y errores de compilación con Apache Tapestry

    java planeta-codigo programacion tapestry

    Apache Tapestry

    Java

    Hace ya unos años comentaba varios motivos para elegir Apache Tapestry como framework para desarrollar una aplicación o página web. Entre las varias razones comentaba la productividad como característica destacada. Uno de los motivos de esta productividad era por la alta reutilización de código que se puede conseguir al usar los componentes múltiples veces en un mismo proyecto o en diferentes proyectos creando una librería de componentes como comento más detalladamente en el libro PugIn Tapestry. Otra parte de la productividad que comentaba más ligeramente era poder detectar de forma rápida errores de compilación no solo en el código Java a través del IDE sino porque con Tapestry es posible detectar errores de compilación en todas las plantillas tml que generan el html fácil y rápidamente con un botón sin tener que probar manualmente toda la funcionalidad. El tema de este artículo es mostrar más en detalle como detectar los errores de compilación en las vistas con este framework.


    Continuar leyendo...

  • Introducción y ejemplo de API RPC con Apache Thrift

    java planeta-codigo programacion

    Java

    Las aplicaciones están pasando de ser elementos aislados, grandes y monolíticos a ser desarrolladas como varios microservicios que colaboran entre si para en conjunto ofrecer la funcionalidad deseada. Aunque los microservicios presentan sus propias problemáticas resuelven algunas que poseen los sistemas monolíticos, entre algunas de sus características deseables están: mayor cohesión, menor acoplamiento, menor tamaño, mayor independencia de la tecnología usando la más adecuada en cada situación, más fácilmente reemplazables y despliegues más sencillos. También, la funcionalidad ofrecida por una aplicación puede quererse consumirse desde otra aplicación surgiendo de esta forma una API. Para ofrecer una API de una aplicación que pueda consumirse internamente, desde diferentes dispositivos o por terceras partes podemos usar SOAP o REST pero también han surgido algunas alternativas como Apache Thrift supliendo algunas carencias de las anteriores aún basándose en el mismo concepto de llamada a código en una máquina remota (Remote Procedure Call, RPC) ya visto en algunas opciones más antiguas como la misma SOAP, RMI o CORBA. En este artículo explicaré algunas diferencias entre SOAP, REST y Apache Thrift y mostraré un ejemplo sencillo con código de cómo empezar a usar Apache Thrift.


    Continuar leyendo...

  • Aplicación web Java autocontenida con Tomcat Embedded

    java planeta-codigo programacion

    Java

    La tendencia de las aplicaciones es que sean construidas como múltiples servicios pequeños que colaboran entre si en vez de consistir en una aplicación grande desplegada en un servidor de aplicaciones. La aparición de nuevas tecnologías como Docker facilitan la construcción y despliegue de los microservicios. Los microservicios con su máxima de bajo acoplamiento y alta cohesión tratan de incluir todo lo necesario para funcionar evitando las dependencias de cualquier tipo de elemento fuera de su ámbito no incluyendo el uso de otros servicios. Con Docker es posible desplegarlos en cualquier máquina que disponga del servicio, esto evita problemas de configuración al pasar la aplicación de un entorno de desarrollo a uno de producción ya que las características del entorno de desarrollo y el de producción pueden ser idénticos.


    Continuar leyendo...

  • Datos de sesión externalizados con Spring Session

    java planeta-codigo programacion spring

    Java

    Por defecto los datos de la sesión de una aplicación web Java se guardan en el servidor de aplicaciones y en memoria, esto produce que al reiniciar el servidor por un despliegue los datos de la sesión se pierdan y provoque en los usuarios alguna molestia como tener que volver a iniciar sesión. En Tomcat existe la posibilidad de que los datos de las sesiones sean persistidas en disco con la opción saveOnRestart del elemento de configuración Manager que evita que los datos de las sesiones se pierdan en los reinicios, al menos para los servicios formados por una única instancia. Para evitar que los usuarios perciban los reinicios o caídas del servidor hay varias soluciones algunas tratando de diferentes formas externalizar las sesiones del servidor de aplicaciones. Con estas soluciones se pueden hacer despliegues sin caídas, sin que las perciban los usuarios, siendo útil para hacer actualizaciones frecuentemente, continuos, y en cualquier momento cuando tengamos una nueva versión de la aplicación.


    Continuar leyendo...

  • Listener de eventos de Hibernate con servicios de Spring

    java planeta-codigo programacion

    Java

    En el anterior artículo explicaba como crear un listener que reciba eventos de Hibernate pero quizá necesitemos en el listener hacer uso de un servicio de Spring si el proceso de la acción necesita aprovecharse de la funcionalidad proporcionada en los servicios. En este artículo mostraré como crear un listener de Hibernate que use un servicio de Spring, es decir, un listener de Hibernate con la posibilidad de inyectar servicios de Spring.


    Continuar leyendo...

  • Ejemplo de listener de eventos de Hibernate

    java planeta-codigo programacion

    Java

    En alguna ocasión puede que tengamos la necesidad de realizar alguna acción cuando una entidad es guardada en base de datos, actualizada, eliminada, cargada, … . Algunos casos de uso pueden ser:

    • Establecer la fecha de creación o de actualización del objeto cuando es persistido en base de datos.
    • Cifrar un dato del objeto al ser persistido en base de datos.
    • Proporcionar seguridad de modo que un usuario solo pueda modificar o acceder a los objetos a los que tenga acceso.
    • Al persistir el objeto guardar en un campo el valor calculado resultado de una función.
    • Cualquier otra restricción, cálculos o acciones.

    Para realizar estas operaciones podemos hacerlas de varias formas, una puede ser usando triggers de la base de datos disponibles en Oracle y PostgreSQL. Si usamos Hibernate como librería ORM de persistencia en una aplicación el equivalente a los triggers de BBDD es mediante un listener que sea llamado al ocurrir ciertos eventos. En la clase EventType está la lista completa de los eventos que podemos recibir y la clase listener que debemos implementar para recibir cada uno de los eventos. Esta es la lista de los eventos disponibles según los conceptos que usa Hibernate:


    Continuar leyendo...

  • La palabra clave assert de Java y un ejemplo

    java planeta-codigo programacion

    Aunque no es muy utilizada, para tareas de depuración es una ayuda que bien empleada permite descubrir el origen de algún bug en un programa. Los asserts en Java son ignorados, por tanto no suponen ninguna penalización en tiempo de ejecucción, salvo que se indique de forma explicita en la ejecución del programa, esto permite añadirlos al código fuente y activarlos en el momento que se desee realizar una depuración para encontrar errores.
    Continuar leyendo...

  • Cómo hacer un «downgrade» de un paquete en Arch Linux

    gnu-linux

    Arch Linux

    Arch Linux es un distribución rolling release en la que los paquetes son actualizados constantemente en cuanto sale una nueva versión. Esto tiene la ventaja de que siempre se tiene el sistema actualizado con las versiones más recientes de los programas, en los que se van añadiendo nuevas características y corrigiendo errores de seguridad y funcionales. Sin embargo, en algún momento puede ocurrir que una actualización de algún paquete nos introduzca algún error, en este caso podemos hacer una desactualización o downgrade de paquete y volver a la última versión estable.


    Continuar leyendo...

  • 5º aniversario del blog

    blog planeta-codigo

    Octopress

    Este día 6 cumplo un lustro con las bitácoras El blog de pico.dev y desde hace un año con Blog Bitix. 5 años como blogger en los que normalmente he escrito un artículo cada semana y he publicado los viernes o sábados. 5 años escribiendo artículos en los que comparto el conocimiento que tengo y voy aprendiendo tratando de que sirvan de alguna forma a alguien que los lea.

    Después de pasado todos estos años los motivos por los que lo empecé los sigo manteniendo y quizá aún con más ganas de seguir escribiendo para compartir el bueno o malo mucho o poco (trato de que sea bueno) pero tal como es el conocimiento que poseo. En mi caso tener un blog es una de las buenas cosas que me alegro de haber empezado, por el momento no me canso de seguir escribiendo y me permite aprender sobre cualquier cosa que me interese en cada momento. Los artículos que escribo no suelen tratar temas de actualidad salvo algunas ocasiones relevantes como con la nueva versión de Java 8, de vez en cuando hago algún análisis de los productos tecnológicos que pasan por mis manos como un lector de libros electrónicos, el portátil que compré hace unos años o un disco SSD. Últimamente publico pocos artículos sobre linux o el software libre como De Windows a Arch Linux, más tarde De Arch Linux a Arch Linux o instalando linux a un portátil viejo y últimamente más artículos sobre programación con java, desarrollo web, html y javscript. Una amplia colección de artículos que he publicado me han dado incluso para reunirlos y, completándolos con un poco más de contenido, hacer con ellos un libro sobre Apache Tapestry publicado de forma totalmente gratis en varios formatos incluidos de libro electrónico.


    Continuar leyendo...

  • Convertir fechas y husos horarios en Java

    java planeta-codigo programacion

    Java

    Aunque en muchas aplicaciones no será necesario si desarrollamos una aplicación que trabaje con diferentes países y fechas probablemente deberemos tener en cuenta múltiples husos horarios o zonas horarias. Según estos husos horarios, por ejemplo, en el momento que son las 12:00 en Madrid hora local no son las 12:00 en Buenos Aires, si dos ciudades emplean diferente huso horario hay que tenerlo en cuenta para obtener la hora local en cada ciudad.


    Continuar leyendo...

  • Internacionalización (i18n) en JavaScript

    javascript planeta-codigo programacion

    JavaScript

    Si desarrollamos una aplicación web, que es usada en múltiples idiomas y el lado del cliente tiene cierta complejidad quizá nos encontremos con la necesidad de proporcionar internacionalización (i18n) para los textos o mensajes mediante una librería javascript. Una de la que más me ha gustado de las que he encontrado ha sido i18next pero hay varias opciones más, incluidas dos que merecen ser nombradas que son polyglot y messageformat, estas tres opciones son parecidas pero no tienen exactamente las mismas funcionalidades, deberemos evaluarlas para elegir una según lo que necesitemos.


    Continuar leyendo...

  • Conferencia BilboStack 2015

    planeta-codigo

    BilboStack

    Un año más una de las primeras conferencias del año se ha celebrado en Bilbao, la BilboStack 2015. Esta edición del 2015 ha sido la cuarta entrega donde varios profesionales del sector de las tecnologías han hablado de diversos temas, desde programación hasta metodologías de desarrollo y algunas otras cosas relacionadas con la tecnología y el desarrollo. Cada año la BilboStack acoge a más asistentes en la Universidad de Deusto dando lugar este año a un cambio de ubicación dentro de la propia universidad para poder dar cabida a todos de forma más cómoda. Como en ediciones anteriores este año ha seguido manteniéndose gratuita, lo único necesario ha sido el registro para adquirir la entrada.


    Continuar leyendo...

  • Cómo hacer un substring de una cadena HTML

    java planeta-codigo programacion

    Java

    Una de las cosas que he tenido que resolver en Blog Stack es como conseguir un extracto del contenido completo de una cadena que es HTML. Esto lo he usado en los diferentes feeds de Blog Stack donde solo se muestra el extracto de cada artículo y no el texto completo. A primera vista puede parecer fácil pero no lo es tanto, cortar una cadena que es html haciendo un substring puede ocasionar problemas si se hace en un mal punto de la cadena y luego esa cadena cortada se inserta como contenido de nuevo el una página web. Lo más probable que ocurra es una desmaquetación de la página o que los estilos aparezcan mal pero puede dejar estropeada la página completa.


    Continuar leyendo...

  • Introducción e inicio a Drupal

    gnu-linux planeta-codigo software software-libre

    Drupal

    Para los proyectos web cuyo punto central es el contenido disponemos de algunas opciones que prácticamente nos dan la solución hecha o facilitan enormemente la tarea como desarrolladores y posteriormente a los administradores que no necesitarán un gran conocimiento para administrar la web. Estas aplicaciones se les suele conocer como Sistemas de gestión de contenidos (Content Management System, CMS) y como siempre disponemos de varias opciones, algunas similares.

    No soy un experto en CMS ni he usado uno en un proyecto real pero trataré en este artículo hacer una introducción a Drupal. Hay otras opciones como Wordpress o Joomla también desarrolladas en PHP y en el ámbito Java otras como Alfresco, Nuxeo, dotCMS y Liferay aunque estas en algunos puntos son diferentes ofreciendo gestión documental o portales de internet. Wordpress es más simple que Drupal pero si tenemos conocimientos de desarrollo Drupal posiblemente se adapte más a nuestras preferencias. Alfresco y Nuxeo son más bien gestores de contenido y de documentos pero no permiten gestionar como se visualiza el contenido en la web final, Liferay es algo más parecido a lo que ofrece Drupal pero tengo la sensación que es algo más compleja o no exactamente con las mismas opciones y está más destinado a la creación de portales web.


    Continuar leyendo...