martes, 22 de marzo de 2011

Speed dial

Creo que ya he comentado alguna vez que una de las aportaciones que más me gustó de Chrome fue su página inicial en la que se muestran una serie de accesos directos a las páginas que visitas con más frecuencia.

Sin embargo, también me ha parecido siempre que esta funcionalidad tenía muchas posibilidades de mejora. De hecho hace poco tiempo estuve probando durante un tiempo la alternativa de Opera, siendo su página de inicio similar a la de Chrome, pero mejorada, una de las cosas que más me atrajo.

Lo que presento hoy es un plugin para el navegador de Google que ofrece una nueva página de inicio con el mismo estilo, pero configurable: Speed Dial 2. Existe también un plugin Speed Dial (que en principio no tiene relación, porque parece que tienen desarrolladores distintos), con una funcionalidad similar, e incluso más atractivo estéticamente, pero que, por lo que he podido probar, no funciona bien del todo.

Con Speed Dial 2 podremos decidir cuáles son las páginas que queremos tener indexadas, y definir qué imagen queremos que se muestre para cada una de ellas. Además, tiene una gran variedad de opciones de configuración, incluyendo un analizador de nuestros hábitos de navegación que destaca las páginas que sueles visitar en el momento del día en que estés. Todavía no lo he probado, ya que tampoco lo veo muy práctico, aunque sí experimentalmente interesante.

En cuanto a la apariencia, se pueden configurar la imagen de fondo, el tamaño de las letras y sus colores, pudiendo así tener una página adecuada a las preferencias de cada uno.

Si usáis Chrome, os animo a probarlo.

¿Cómo obtener el valor de una campo de una secuencia Oracle trabajando con ADF BC?

Un título largo y descriptivo que plantea perfectamente el problema a tratar. Resulta que cuando queremos que el valor de una campo se obtenga directamente de una secuencia Oracle y estamos utilizando ADF Business Components, es fácil que cometamos un error.

Cuando configuramos los atributos de un Entity Object, podemos seleccionar varios tipos de dato, entre los que se encuentra DBSequence. Cuando elegimos esta opción, el diálogo de jDeveloper muestra un par de campos nuevos en los que nos pide que indiquemos un nombre de secuencia, y un valor de comienzo. Es lógico pensar que si ponemos en ese campo, por ejemplo, SEQ_PERSONA, el framework se encargará de coger el valor correspondiente de la secuencia, e inyectarlo en el campo que estamos editando. Nada más lejos de la realidad...

El utilizar el tipo DBSequence para un campo indica a ADF que el valor para el mismo va a ser proporcionado por la base de datos, pero ADF no se va a encargar de obtenerlo. Lo que va a hacer es asignar un valor temporal al campo, y esperar a que la base de datos le proporcione el real a la hora de persistir la información. El valor temporal será un número negativo.

Esto implica que nos toca a nosotros obtener el valor de la secuencia y utilizarlo para informar el campo. Una forma sencilla de hacerlo es crear un trigger en la base de datos que se ejecute antes de cada inserción en la tabla correspondiente. De forma general el código tendría el siguiente aspecto.

CREATE OR REPLACE TRIGGER %NOMBRE_TRIGGER%
BEFORE INSERT ON %TABLA% FOR EACH ROW
BEGIN
IF :NEW.%CAMPO% IS NULL OR :NEW.%CAMPO% < 0 THEN
SELECT %NOMBRE_SECUENCIA%.NEXTVAL
INTO :NEW.%CAMPO%
FROM DUAL;
END IF;
END;

Y, entonces, ¿para qué nos pide el IDE el nombre de la secuencia? Pues este dato sólo tendrá utilidad si estamos utilizando un enfoque en el que creemos en primer lugar nuestros objetos de negocio, y a partir de ellos queramos generar el esquema de datos. En este caso, jDeveloper creará, además de la tabla, la secuencia indicada en la base de datos.

jueves, 10 de marzo de 2011

Tutorial de Oracle ADF

Hoy me han publicado un nuevo tutorial en Javahispano. En este caso sobre el desarrollo de una aplicación Web con Oracle ADF, utilizando jDeveloper 11.

En el documento se hace una breve introducción teórica al framework de Oracle, comentando su arquitectura y, posteriormente, se detallan los pasos a seguir para crear una aplicación Web simple basada en ADF utilizando el entorno de desarrollo jDeveloper, en su versión 11. En el proceso se cubre desde la definición de la base de datos hasta el despliegue en el servidor WebLogic integrado en el IDE.

ADF es un framework basado en la arquitectura MVC, y ofrece un solución para cada una de las capas, aunque permite igualmente el uso de casi cualquier combinación de las tecnologías J2EE más extendidas. En el ejemplo del tutorial se ha optado por trabajar con JSF para la vista y el controlador (con la implementación ADFFaces, concretamente), y con EJB para la capa de servicios de negocio.

El tutorial se puede descargar en esta dirección.

Muchas gracias de nuevo a todo el equipo de Javahispano.

martes, 8 de marzo de 2011

Android - Gestión de aplicaciones

Después de un tiempo bicheando con Android, desarrollando y probando aplicaciones, te puedes encontrar que el emulador esté hasta arriba de iconos, y quieras eliminar algunos. Si no estás familiarizado con el funcionamiento de estos móviles, como me pasa a mí, puede que no atines a encontrar la forma de hacerlo, aunque es bastante simple.

Lo primero es pulsar el botón Menú, con lo que aparecerán una serie de opciones. Seleccionamos Manage Apps. Esto nos lleva a una pantalla en la que se muestran todas las aplicaciones del emulador (con los iconos de la sección superior se puede restringir la vista para mostrar las que se encuentran en la tarjeta SD, por ejemplo). Si buscamos en esa lista (ordenada alfabéticamente) la aplicación que queremos eliminar, y la seleccionamos, accederemos a una pantalla donde se mostrará información sobre ella, y en la que podemos ver un botón Uninstall.


Si pulsamos este botón y confirmamos, la aplicación desaparecerá de nuestro emulador.

Sin llegar al extremo de eliminarla, nos puede pasar que ejecutemos una aplicación y al salir de ella se quede ejecutándose. Me ha pasado, por ejemplo, con algunos juegos con sonidos; si sales con el botón de vuelta atrás, el juego sigue ejecutándose, y por tanto sonando.

Para parar la aplicación podemos volver a la pantalla de gestión de aplicaciones, y encontramos una opción en la botonera superior para mostrar las aplicaciones que se están ejecutando. Sin embargo, es muy posible que no encontremos la aplicación que queremos parar. Para verla tendremos que volver a pulsar el botón Menú desde esa pantalla, y seleccionar la opción Show Cached Processes. En la nueva lista sí que podremos ver todas las aplicaciones que se están ejecutando y, al seleccionarlas, tendremos un botón Stop, que detendrá su ejecución.