0

Portlet Development Best Practices (3/12) - Paquetes y Utilitarios

Posted by Jose Luis Manrique on 15:56 in , , ,
En la segunda parte de las buenas practicas para el desarrollo de portlets hablamos sobre las consideraciones a tener en cuenta sobre los jsps en esta entrega trataremos el tema de los paquetes y utilitarios como poder distribuirlos y algunas sugerencias al respecto. Debido a que el articulo solo toca dos puntos no usaré los marcadores.

Empaquetar las funcionalidades comunes a los Portlets. Suena un poco raro al momento de leerlo en ingles pero quizá esta sea una traducción adecuada ya que el objetivo del mismo el de separar las funcionalidades comunes en un jar de tal manera que pueda ser reutilizable. Ahora supongamos que tenemos dos casos (los cuales detallaré) en los que nos podemos encontrar:
  1. Se tiene una aplicación en portal y se tienen componentes de la capa de acceso a datos (en adelante DAO), estos componentes son compartidos por varios portlets dentro de la misma aplicación, la pregunta es ¿Será necesario separar el DAO en un jar aparte? La respuesta es NO, si ten encuentras en esta situación deberías de pensar en el patrón KISS (y no es el grupo) ya que la casuística no posee mucha complejidad y no requiere una separación.
  2. Supongamos que tienes un caso un tanto similar al anterior solo que ese componente es usado por varios Portlets de muchas otras aplicaciones, pues el escenario cambia y en este caso para tener componentes reutilizables se debería crear un jar que posea este bloque de funcionalidades y simplemente durante el desplegado solo se haga referencia al mismo. Pero repetir el jar en todas nuestras aplicaciones con toda la funcionalidad incluida no seria muy útil por que nunca falta alguien que muy hábilmente modifique el jar y lo use inadecuadamente, para este caso el portal como framework nos ofrece la facilidad de exponer servicios propios. En el contenedor de WebSphere se utiliza la interfaz PortletService la cual indica que esa implementación forma parte de un servicio del portal.
La ultima consideración es sobre la reutilización del portlet, la idea gira alrededor de combinar múltiples funcionalidades dentro de un portlet único pero usando diferente configuración. Para comprender mejor la recomendación veamos algunos casos:
  1. Tenemos un portlet que debe realizar una tarea administrativa sobre alguna tabla/archivo maestro esta labor incluye la búsqueda, creación, edición y eliminación de registros. Una solución propuesta para este caso es la de tener un portlet que solo muestre el listado, otro que se encargue de la modificación y creación de los registros, y finalmente un portlet que sirva para eliminar registros; esta solución propuesta se baso en que los permisos para cada una de las acciones van a depender del perfil que posea el usuario. Es muy probable que desarrollando esto aprendamos mucho sobre el manejo de wiring, la paginación de los listados, el ciclo de vida de los portlets, etc pero esta solución no es la mas adecuada ya que se están creando tres Portlets para una funcionalidad que puede ser hecha por uno solo. Ahora como se podría desarrollar, muy simple ya que las funcionalidades se deben mostrar o no dependiendo del perfil por medio del servicio de manejo de usuarios del portal obtenemos el perfil y validamos si es que se le debe o no de mostrar la funcionalidad, en caso se muestre como parte de la navegación del portal mostramos otra página y listo no tuvimos que crear mas Portlets sino que diseñamos bien uno solo que tiene todas las funcionalidades que necesitamos.
  2. Nuestro segundo caso podría ser una aplicación portlet que dependiendo de la página en la que se encuentre muestre información de una fuente de datos determinada y si esta en alguna otra página se vaya a la fuente por defecto. Para este caso podríamos crear un portlet (dentro de la misma aplicación) por cada una de las fuentes de datos , si bien la solución es muy práctica no es la mas adecuada debido a que si aumentan las fuentes de datos tendríamos que crear mas Portlets lo cual nos causaría un mayor costo en cuanto a tiempo y obviamente en dinero. Una posible solución que podríamos ofrecer es la de tener un portlet que implemente el modo config y dentro de este haya un parámetro que indique la fuente de datos de origen con la cual se quiera configurar (por defecto mostrará un valor); este parámetro se va a encontrar como parte de los parámetros del contexto del portal por lo cual cada instancia del portlet puede ser configurada al antojo del administrador del portal.
  3. Otro caso que podríamos encontrar es la de tener una aplicación que se encargue de buscar a los clientes de una empresa y también que muestre la información del mismo, la particularidad de este desarrollo es que la búsqueda sera usada por otras aplicaciones las cuales no necesariamente requieran el mostrar la información del cliente. Para este caso un tanto especial si se podría separar la funcionalidad puesto que la búsqueda debe mantenerse agnóstica de quien la llamo. Otro punto por el cual estas funcionalidades no deben de formar parte del mismo portlet es por que el buscador será utilizado en otro contexto en el cual no necesariamente se requiera mostrar la información del cliente.
Si bien este post contiene pocas buenas prácticas posee varios ejemplos en los cuales se puede aplicar o no la recomendación. El siguiente post tocará el tema del manejo de la configuración en el portal, punto al que hicimos referencia en el tercer ejemplo de la segunda recomendación.

0

Portlet Development Best Practices (2/12) - Los JSPs

Posted by Jose Luis Manrique on 11:02 in , , ,
En el post anterior se toco el tema de manejo del código al momento de desarrollar aplicaciones para portal usando el contenedor de WebSphere.

En esta oportunidad tocará hablar acerca de las recomendaciones sobre la creación, diseño y documentación de nuestros jsps. De igual forma que el post anterior listaré cada una de las buenas prácticas y también algunos comentarios sobre mi experiencia con los mismos.
  • Los jsp solo deben de contener fragmentos de código html. Si no las mas importante es una de ellas y debemos de tener muy en cuenta que la vista de los Portlets son fragmentos de código html por lo tanto agregar etiquetas como html, head o body pueden causarnos problemas puesto que estas son usadas para determinar documentos completos. En un proyecto que revisé hace un tiempo el desarrollador (que era de otra empresa) había agregado las etiquetas que menciono antes y si bien mostraba algo en el IE6 en Firefox no tenia el mismo éxito lo cual nos hace pensar cual de los dos navegadores sigue las convenciones.
  • Diseñar las vistas para que puedan trabajar con otros Portlets. Esta sugerencia aplica para el caso de Portlets que van a interactuar en distintas formas de diseño en una pagina de portal (una columna, dos columnas, etc) y lo que se quiere es mantener la presentación del mismo. Ahora también se debe considerar la resolución de la maquina donde se visualiza el Portlet puesto que el cliente puede pedir que la aplicación se muestre en todo el largo de la pantalla o solo en un fragmento de ella. Todo esto nos lleva a la conclusión de que el aplicar o no esta recomendación depende del requerimiento que se nos entregue y así no gastar tiempo en características que no son necesarias.
  • Usar los comentarios al estilo java en vez de los html. La idea entorno a esto es que si se va a realizar algún comentario sobre alguna etiqueta o comportamiento (condicional bucle) del jsp este se haga usando la convención de comentarios para java (<% // Este es un comentario %>) y no los comentarios de html/xml (< !-- -- >). Ahora por que debemos de seguir la sugerencia es por qué el comentario estilo java no se muestra dentro del html resultado y por qué no deberíamos mostrarlo quizá por que ahí tengamos algún mensaje que solo debe ir orientado para el desarrollador y no para aquel usuario curioso que revise el código html generado.
  • Usar las hoja de estilos del portal en vez de una especifica. La recomendación es muy clara en este caso, uno debe de utilizar el tema por defecto del portal en conjunto con su hoja de estilos y no repetir el estilo cada vez que tenga que crear un Portlet. Para utilizar esta recomendación debemos utilizar las clases css del portal por ejemplo si tenemos que poner el estilo a una etiqueta del tipo input deberíamos usar la clase wpsButtonText asi nos aseguramos que nuestros Portlets cambiaran de apariencia cuando modifiquemos el tema del portal.
  • Las urls y formularios deben ser codificados con el espacio de nombres. El uso es muy practico todas las direcciones y formularios deben der ser codificadas utilizando el tag <> esta etiqueta nos brinda la funcionalidad de codificar nuestra url de tal forma que el contenedor pueda entenderla. En el caso de los formularios se debe usar el espacio de nombres (name space) del portlet para que no sea confundido con algún otro formulario.
  • Procurar no usar pop-ups (aunque el texto decia no usarlos). El objetivo de esta recomendación es mas que todo tener cuidado con el uso de pop-ups ya que estas llamadas salen fuera del contexto del Portlet. Ahora si nuestro enlace es para una nueva ventana tener en cuenta que el atributo target debe hacer referencia a una nueva ventana.
  • Utilizar los taglibs. Considero que la mayor parte de las acciones en un jsp se pueden hacer con los taglibs quizá en un caso extremo se podría usar un scriptlet, eso dependería del requerimiento.
  • Tener cuidado con el uso de IFRAMEs. Ya que esta es una forma simple de agregar contenido externo al portal debemos tener en cuenta que no todos los navegadores tienen un buen manejo de los IFRAME y si el contenido es mas grande que la sección asignada este va a mostrar un scroll vertical y/u horizontal lo cual podria generar problemas con la navegación. Hazta el momento no he tenido la necesidad de mostrar IFRAMEs pero el mismo portal tiene una opción de mostrar paginas que contienen marcos ahora no se si lo que se muestra es un IFRAME o un simple FRAME.
Como se puede apreciar varias de las recomendaciones son propias de la programación en web y otras son especiales por el simple hecho de trabajar con un portal.

En el siguiente post estaré comentando acerca de dos buenas practicas sobre el empaquetado de nuestra solución.

0

Portlet Development Best Practices (1/12) - El código

Posted by Jose Luis Manrique on 9:49 in , , ,
Parte del material de lectura que me va a servir como preparación para el examen de certificación del post anterior se encuentra disponible un articulo llamado "Portlet Development Best Practices". En este escrito se podrán ver algunas buenas prácticas al momento de desarrollar con Portlets dentro del contenedor de WebSphere.

El autor resalta doce categorías en las cuales debemos mantener buenas prácticas al momento de desarrollar Portlets, a modo de revisar estos puntos haré un resumen de cada uno de ellos indicando algunas prácticas y comentarios sobre mi experiencia con estos. Con el objetivo de mostrar el mejor detalle posible haré un articulo por cada categoría de recomendaciones.

La primera categoría es sobre algunas guías al momento de codificar usando Portlets, cosas que debemos evitar y algunas en las que debemos de poner énfasis al momento del desarrollo. En esta sección podemos encontrar las siguientes consideraciones:
  • Para pasar datos al jsp se debe usar un bean que este contenido en el objeto del request. Es muy importante tener en cuenta esta recomendación puesto que de esa forma estructuramos los campos que vamos a pintar dentro de nuestro jsp. Actualmente las librerías como jstl y frameworks como jsf, spring MVC, struts proveen formas de acceso a estos campos que forman parte del objeto usando declaraciones como ${formulario.descripcion} con las cuales nuestra codificación es más comprensible y elegante.
  • Usar las facilidades de logging del portal. Si pensaban que el portal es solamente un contenedor de aplicaciones pues se equivocan también es un framework y como tal ofrece ciertas facilidades para realizar actividades muy comunes que en este caso es el logging. Particularmente prefiero usar un framework como Log4j, al final se llega al mismo objetivo: Documentar la actividad de la aplicación dentro de una bitácora.
  • Adoptar buenos hábitos de documentación. Esto no solo es para aplicaciones en portal sino para cualquier tipo de aplicación y para cualquier lenguaje. Tengo que aceptarlo que por desarrollar rápido se me olvida de la documentación y siempre hago mención que el nombre método explica su funcionalidad pero por mas que parezca redundante se debe de documentar, en el caso de java usando el javadoc, ya que no todos los integrantes del proyecto pueden tener claro el objetivo de esa función, clase o interfaz.
  • Usar la caché del portal. Esta recomendación busca que se aproveche el servicio de caché ofrecido por el portal en el caso de datos que sean muy complejos de obtener o de procesar. Se recomienda el no uso de la sesión pero este punto puede ser discutible pues hay datos a los cuales es mas práctico ubicarlos en la sesión, el uso o no de la misma va a depender de la situación en la que nos encontremos.
  • De trabajar con struts seguir las buenas practicas del framework y aplicarlas en el desarrollo de portlets. Nunca he trabajado con Struts y creo que por el momento no lo haré. Esta sugerencia apunta a que las mismas buenas practicas usadas en la programación web con struts deben ser usadas en el desarrollo de portlets.
Como se puede apreciar en esta sección varias de las buenas prácticas para el desarrollo de aplicaciones web con java son tomadas en para el desarrollo de portlets además de agregar algunas propias del uso de un contenedor que en este caso es WebSphere Portal.

El siguiente post tendrá como objetivo mostrar algunas recomendaciones al momento de crear nuestras presentaciones (jsp), el manejo de comentarios dentro de las mismas, entre otros.

0

IBM WebSphere Portal 6 Application Development

Posted by Jose Luis Manrique on 8:32 in , , ,
Hoy inicio la preparación para mi primer examen de certificación el cual es el "IBM WebSphere Portal 6 Application Development", si bien ya llevo trabajando con WebSphere Portal 6/6.1 desde hace dos años siempre hay cosas que aprendo en el día a día en el trabajo. En lo posible publicaré algún concepto nuevo que voy aprendiendo en estos días de preparación.

0

DreamWeaver en Linux

Posted by Jose Luis Manrique on 14:38 in , ,
Hace poco instale a mi PC un software llamado Wine, el objetivo del mismo era de poder instalar algunas aplicaciones que le servirían a mis hermanas para realizar sus tareas escolares. Quizá me digan ¿Por qué no buscaste una alternativa libre? y la verdad es que me hubiera gustado proponerla pero el colegio exigía el uso de esas herramientas y es mas el curso de computación estaba orientado a ellas.

Como no tuve opción pues instalé el software en este caso el Macromedia DreamWeaver y el FireWorks. Para eso le pedí a mi hermana que se consiga los instaladores y procedi a utilizar la linea de comandos de la siguiente forma:
$ cd /media/cdrom/Macromedia\ 8/ # Ubicación de los instaladores 


Seleccione uno a uno los instaladores utilizando el siguiente comando:
$wine Dreamweaver \8.exe


Y luego de unas cuantas pantallas de instalación ya tenia en mi pc todo el software necesario.

1

Escogiendo un manejador de versiones

Posted by Jose Luis Manrique on 15:43 in , ,
En la empresa en la que trabajo manejamos muchos proyectos y cada proyecto con diversas personas las cuales agregan funcionalidades al sistema o reparan errores del mismo.
Desde ese punto de vista el control del código fuente debe ser manejado por algún sistema el cual sea capaz de administrarlo y ayudarnos a controlar el cambio de nuestro producto. Es ahí donde entran los sistemas de control de versiones. Es por medio de estos que podemos tener un mayor control de nuestro código, saber cual es la ultima versión en desarrollo, quien fue el que hizo los cambios, ver las diferencias entre versiones, etc.
Si buscamos en la web podemos encontrar mucho software para el manejo de código solo por resaltar algunos tenemos:
Para no entrar a mucho detalle que puede ser innecesario voy a comentar un poco sobre cada uno de los sistemas.

La primera vez que use uno de estos sistemas fue cuando aun era practicante y no tenia ni la mas mínima idea de como programar en J2EE(si aun se usaba eso) a pesar de todo eso usé el Clear Case es mas aun recuerdo cuando hice mi primer check out del repositorio, lo que recuerdo es que tenia una muy buena integración con la suite office puesto que uno podia ver las diferencias de los documentos de word o excel a nivel de edición. Ahora si quisera usar este software tendría que irme por dos caminos el comprar la versión para linux o buscar en rapidshare a ver si alguien dejo el instalador. Un punto menos para esta herramienta puesto que actualmente no puedo costearme dicho software.

Viendo las otras opciones tenemos al CVS que también nos ayuda a manejar nuestro código, dentro de sus principales ventajas es que posee una implementación de codigo abierto y gratuito lo cual busco. Ahora ya que cumple uno de mis principales requisitos vemos otras de sus características, entre una de ellas tenemos el manejo de versiones de archivos de texto, uso de ramas, agregar comentarios, etc pero también tenemos sus desventajas entre ellas tenemos que es lento para realizar commits, no trabaja de muy buena forma los archivos binarios y no posee un muy buen manejo de las ramas lo cual puede ser critico en el caso de que hayan varias versiones en paralelo. Si bien se acerco mucho a lo que requiero no llena por completo mis necesidades.

Continuando con la revisión tenemos al SVN o Subversión el cual vendría a ser una versión mejorada del CVS (aunque prefiero decir una evolución natural) este usa como motor de almacenamiento una base de datos Berkeley este puede guardar historia no solo de los archivos sino también de las carpetas cosa que no posee el CVS, además posee un buen manejo de las ramificaciones y en cuanto a la velocidad del commit es mucho mas rápido. Aparentemente este puede ser el candidato adecuado.
Ya para cerrar esta discusión hablaré un poco sobre GIT, una de sus mejores características es que esta mejorado para el desarrollo de aplicaciones donde los programadores se encuentran en diferentes ubicaciones geográficas. Este sistema es usado para el manejo del código del Kernel de Linux entre otros. Tiene un manejo del código y binarios mejor desarrollado que el SVN y las ramificaciones son mejor trabajadas. Este sistema puede tener todo lo que necesito pero hay un factor muy importante a tomar en cuenta al momento de escoger un sistema es que este se acomode a tus necesidades y por el momento no tengo los suficientes argumentos para usar GIT y si lo llegara a usar no aprovecharía al máximo sus características.

Ya habiendo analizado las posibilidades y de acuerdo a mis necesidades voy a usar SVN pues combina el manejo de ramificaciones (branchs), el versionamiento de carpetas y un manejo adecuado las versiones de los binarios.

En la siguiente entrega mostraré como instalar y configurar el SVN, hacer unos commits y check outs usando Eclipse.

0

Primeros pasos con Wine

Posted by Jose Luis Manrique on 10:41 in ,
Hace algún tiempo cambié de sistema operativo de Windows XP SP2 a Ubuntu GNU/Linux, en cuanto al uso de sistemas unix no soy nuevo ya venia conociéndolos desde hace mucho tiempo (apartir del 2006) asi que la instalación y configuración del mismo no me fue muy complicado. En este entrono tengo casi de todo para realizar mis trabajos los cuales vengo realizando sin ningún problema.
El inconveniente viene cuando mis hermanas quieren realizar sus trabajos escolares el colegio les pide utilizar software privativo solo por hacer referencia a algunos: Corel Draw, Adobe Photoshop, Adobe Flash, etc. Pues ahi tenemos un problema un tanto grande y salieron tres soluciones:
  1. Instalar Windows en una partición y de ahí las demás herramientas.
  2. Dejar que mis hermanas vayan al colegio para hacer sus trabajos (mi opción preferida).
  3. Installar sobre Linux el software requerido.
De estas posibilidades la segunda era mi mejor opción pero no les gusto mucho la idea a las pequeñas asi que me quedaba instalar Windows o sobre Linux ejecutar dichas aplicaciones. Como ya no quiero volver a usar Windows lo que hize fue buscar una forma de instalar las aplicaciones en el Ubuntu.
Luego de recordar un poco algunas conversaciones con algunos amigos me vino a la mente usar Wine. Este proyecto tiene como objetivo el uso de aplicaciones para M$Windows desde un entorno GNU/Linux, debido a que esa era mi necesidad procedí a instalarlo usando el famoso apt-get:

sudo apt-get install wine


Una vez instalado procedi a hacer algunas pequeñas configuraciones y listo ahora empezaré a instalar el Corel y el Photoshop.

PD. Se que usar aplicaciones privativas en un ambiente libre no es la mejor solución de eso no tengo dudas, el uso de una u otra alternativa esta limitado a la necesidad que tengo hasta el momento.

Copyright © 2009 Autumn All rights reserved. Theme by Laptop Geek. | Bloggerized by FalconHive.