viernes, noviembre 23, 2012

Stubbing void methods con mockito

Usando este interesante framework para crear mocks the objetos en Java (muy util si usas TDD) me di cuenta que los metodos para hacer mock de metodos no funcionan con los metodos void. He aqui la forma de hacerlo:

doNothing().when(<objeto>).<metodo>(<argumentos>);

Asi por ejemplo si tenemos un objecto llamado usuario1 y queremos hacer mock de la siguiente llamada al metodo void cambiaPassword(String password):

usuario1.cambiaPassword(nuevoPassword);

Lo hariamos de la siguiente manera:

doNothing().when(usuario1).cambiaPassword(nuevoPassword);

viernes, octubre 26, 2012

Generar hash encriptados en Mac OS X y otros UNIX

Tan solo hay que usar el siguiente comando:
echo -n <palabra> | openssl dgst -<algoritmo>

Algunos algoritmos soportados son los siguientes:

-md5            
-md4         
-md2          
-sha1          
-sha          
-sha224       
-sha256       
-sha384     
-sha512         

Por ejemplo:

$ echo -n pollo | openssl dgst -sha256
359ee8d482d3cac0fdffb2b83df30b9aabb2f265896ec61f93bbc94d77115a67

lunes, junio 18, 2012

Diagrama del SimpleFormController de Spring MVC

Como sabemos el Framework Spring es un tanto complejo, mas aun el modulo MVC. Aqui les comparto la liga a un blog donde su autor ha realizado un Flowchart del ciclo de vida del SimpleFormController, es bastante util para saber como funciona MVC.



domingo, marzo 04, 2012

Como editar Groovy Server Pages (GSP) con Dreamweaver CS5

Actualmente Dreamweaver CS5 no reconoce los archivos con extensión GSP (Groovy Server Pages) los cuales se utilizan mucho cuando desarrollas aplicaciones con Grails (son los equivalentes a los JSP de las aplicaciones Java tradicionales), esto provoca que no se reconozcan los tags GSP y pues el diseño en algunas ocasiones se vuelve imposible.

Estuve leyendo 2 artículos en los que resuelven esto, dichos artículos están en inglés así que se me ocurrió realizar una traducción aunque con algunas modificaciones basadas en lo que a mi me funcionó.

Los links a los artículos: article1, article2.

Aquí lo que hice:

1. Agregar la extensión .gsp para que sea reconocida por el editor del Dreamweaver, para ello hay que editar los siguientes archivos:

<Directorio de Instalacion de Dreamweaver>\configuration\Extensions.txt
<Directorio de Datos de la aplicación>\en_US\configuration\Extensions.txt

En mi caso:
C:\Archivos de programa\Adobe\Adobe Dreamweaver CS5\configuration\Extensions.txt
C:\Documents and Settings\Ramiro\Datos de programa\Adobe\Dreamweaver CS5\en_US\Configuration\Extensions.txt

a) Agregar en la primera línea justo antes del texto :All Documents el texto GSP, es decir la primera linea debe de quedar de la siguiente manera:

...,GSP:All Documents

Donde obviamente los puntos suspensivos ... indican que simplemente agregué la palabra ,GSP a lo que ya había en la línea antes de la palabra :All Documents

b) Agregar al final de ese mismo archivo la linea:
GSP:Groovy Server Pages

Al guardar este archivo ya quedó configurado el Dreamweaver para reconocer la extensión como un documento de formato válido para editar, sin embargo todavía no reconocerá los tags GSP que es el objectivo principal.

2. Ahora hay que configurar el Dreamweaver para que le de significado a los GSP

Hay que editar un archivo xml que se encuentran en la siguiente ruta:

<Directorio de Instalacion de Dreamweaver>\configuration\DocumentTypes\MMDocumentTypes.xml

En mi caso:
C:\Archivos de programa\Adobe\Adobe Dreamweaver CS5\configuration\DocumentTypes\MMDocumentTypes.xml

Agregamos el siguiente nodo xml al final dentro del contenido del nodo <documenttypes>

    <documenttype id="GSP" servermodel="JSP" internaltype="Dynamic" winfileextension="gsp" macfileextension="gsp" file="Default.gsp" writebyteordermark="false" mimetype="text/html">
        <TITLE>GSP</TITLE>
        <description>Groovy Server Pages (GSP) document</description>
        <dtdcontext>html</dtdcontext>
    </documenttype>

 Con esto Dreamweaver entenderá de que se tratan estos archivos.

3. Crear un template para nuevos archivos GSP

Para que al crear un nuevo archivo aparezca un template por defecto, simplemente hay que crear un archivo llamado en la siguiente ruta:

<Directorio de Instalacion de Dreamweaver>\configuration\DocumentTypes\NewDocuments\Default.gsp

En mi caso:
C:\Archivos de programa\Adobe\Adobe Dreamweaver CS5\configuration\DocumentTypes\NewDocuments\Default.gsp

Como un gsp es en si un html dinámico podemos usar el mismo template que tienen los archivo html (o puedes crearlo a tu gusto), entonces puedes simplemente copiar el archivo Default.html que está en el mismo directorio poniéndole el nombre Default.gsp.

4. Importar el tag library de GSP

Este es el punto más importante, pues es el que hace que el Dreamweaver no tome erroneamente los tags GSP, para esto hay que descargar el tag library para Dreamweaver desde el siguiente link: GSPTagLibrary el cual es un zip.

a) Dentro del zip hay una carpeta llamada gsp, hay que copiarla al directorio:

<Directorio de Instalacion de Dreamweaver>\configuration\TagLibraries


En mi caso:

C:\Archivos de programa\Adobe\Adobe Dreamweaver CS5\configuration\TagLibraries


b) Editar el archivo xml <Directorio de Instalacion de Dreamweaver>\configuration\TagLibraries\TagLibraries.vtm

Hay que agregar el contenido del archivo gspTagLibrary.vtm que se encuentra dentro del zip, este archivo contiene un nodo xml llamado taglibrary el cual pondremos como último nodo dentro del tag <taglibraries> del archivo TagLibraries.vtm que estamos editando.

Una vez agregado hay que sustituir la siguiente línea:

 <taglibrary name="GSP" doctypes="HTML,JSP,GSP" id="DWTagLibrary_GSP" prefix="&lt;g:">

por la línea:

 <taglibrary name="GSP tags" doctypes="GSP" id="DWTagLibrary_GSP" prefix="&lt;g:">

Después localiza en el mismo archivo TagLibraries.vtm que estás editando un nodo <taglibrary> que tenga el siguiente atributo: id="DWTagLibrary_html", en este nodo hay que agregar el texto GSP en el atributo doctypes

5. Habilitar la función de colorear sintaxis para los tags GSP

En los archivos

<Directorio de Instalacion de Dreamweaver>\configuration\CodeColoring\CodeColoring.xml
<Directorio de Datos de la aplicación>\en_US\configuration\CodeColoring\CodeColoring.xml

 En mi caso son:

C:\Archivos de programa\Adobe\Adobe Dreamweaver CS5\configuration\CodeColoring\CodeColoring.xml
C:\Documents and Settings\Ramiro\Datos de programa\Adobe\Dreamweaver CS5\en_US\Configuration\CodeColoring\CodeColoring.xml

a) Hay que reemplazar el texto ,JSP, por ,JSP,GSP, incluyendo las comas
b) Reemplazar la línea: 
<sampleText doctypes="JSP,GSP">
por la línea:
<sampleText doctypes="JSP,GSP">

Y listo, ya puedes trabajar con tus GSP normalmente en Dreamweaver

miércoles, enero 11, 2012

Forzar el stop de un servicio en Windows XP

El día de hoy se me presentó el problema de que un servicio (Telephony) por alguna razón no podía ser detenido en mi sistema usando la opción stop en el administrador de servicios (services.msc) de Win XP, simplemente se queda la barra de avance indicando que está esperando a que termine, pero después de un tiempo me mandaba el mensaje con un error 1053 de que el servicio no estaba respondiendo por lo cual no se pudo detener.

Me puse a investigar como poder hacerlo de manera forzada y esto es lo que encontré en dos sencillos pasos:

1. Obtener el identificador del proceso PID asignado al servicio que se quiere detener, usando el siguiente comando:

sc queryex <servicename>

Donde <servicename> es el nombre del servicio, OJO no es el display name que se ve en services.msc. Para obtenerlo en services.msc da clic derecho sobre el servicio y propiedades verás el verdadero nombre del servicio.

Por ejemplo en mi caso el display name del servicio que quiero detener es Telephony (ese es el nombre a desplegar para que sea amigable para el usuario no el nombre real del servicio), pero si me voy a botón derecho y propiedades veo que el verdadero nombre del servicio para el sistema es: TapiSrv

Entonces ejecuté:

sc queryex TapiSrv

Lo cual me regresó:

SERVICE_NAME: TapiSrv
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 7  PAUSED
                                (STOPPABLE,PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 1272
        FLAGS              :

Aquí el dato importante es el PID : 1272

2. Ya con el PID usamos el siguiente comando para detenerlo de manera forzada:

taskkill /F /PID <PID>

-Donde <PID> es el que obtuvimos en el paso anterior, por lo cual ejecuté lo siguiente:

taskkill /F /PID 1272

-El comando regresó lo siguiente:

SUCCESS: The process with PID 1272 has been terminated.

Misión cumplida


miércoles, enero 04, 2012

Instalando Aventail VPN client

En mi actual proyecto en el trabajo estoy usando Aventail VPN Connection para conectarme a la VPN del cliente, sin embargo a la hora de querer instalarlo en Windows XP tuvimos muchos problemas (prefiero el cliente VPN de CISCO ese nunca nos dio lata), por si a alguien le sirve les platico mi experiencia y como se resolvió.
Una de las cosas que dificultó encontrar el problema es que el instalador de Aventail VPN Connection es un instalador silencioso, es decir, no te muestra ninguna barra de progreso ni señal alguna de lo que está haciendo. Se supone que al correr el instalador el hace su trabajo y al final te deja un ícono en tu escritorio, lo cual no ocurría en mi máquina osea nunca aparecía el ícono y no mandaba ningún mensaje de error.
Lo bueno es que unos compañeros en Querétaro habían tenido un problema similar y me pasaron el tip sobre como resolverlo, resulta que este software utiliza dos servicios de Windows que normalmente están apagados o deshabilitados, aquí los pasos a seguir:
1. En el menú Start o Inicio, seleccionar run o ejecturar y escribir "services.msc" al dar enter se abrírá el administrador de servicios de windows.
2. Localizar un servicio llamado "Telephony", hay que habilitarlo dando clic derecho --> propiedades y en la opción Startup type poner la opción Manual o Automatic , luego hay que correr el servicio presionando start o iniciar.
3. Localizar un servicio llamado "Remote Access Connection Manager", al igual que el anterior hay que asegurarse de que esté habilitado e iniciarlo.
Una vez teniendo corriendo esos servicios el instalador debe de trabajar correctamente, con lo cual aparecerá el ícono azul de Aventail VPN Connection en el escritorio de Windows.