jump to navigation

Yo no escribo tutoriales September 20, 2006

Posted by Bosco in : blog , 1 comment so far

Alguien me dijo el otro día que mis tutoriales son un mierda. Pues eso no es verdad! Lo que pasa es que yo no publico tutoriales, son largos y costosos, y además abundan en internet. Lo que hago yo en estos post es completar y explicar las dificultades con las que he chocado. En muchos tutoriales me he encontrado que dicen "haz tal, cual y pascual" y listo. Y te quedas igual que al principio, sin saber como configurar el servicio, porque lo que te explican lo has aprendido en 1º de  infromática.
En la serie de posts del proyecto Temporal Alias no he querido hacer un "Construye tu proyecto Paso a Paso", si no que yo he ido haciendo un proyecto opensource, explicando los objetivos del proyecto y con tecnologías que considero interesante, y he escrito artículos acerca de los problemas que he ido encontrando. Si  alguien lee esta serie de post yo presupongo que tienen un nivel de conocimientos suficientemente alto para no tener que explicar las ventajas de Spring frente a Struts, o qué es Hibernate. Pues eso, espero que sean útiles.
De todas formas, si sentís que necesitaís más detalles, que algo no queda claro o que no funciona, que pruebe tal o cual tecnología no hace falta más que lo pidais. En serio.

Yahoo’s sign-in seal (2) September 18, 2006

Posted by Bosco in : Palabra de Honor , 3comments

Ayer, me aceleré un poco y dije una barbaridad de la que me arrepiento al respecto del sign-in seal de yahoo. Dije que utilizaba la MAC address para verificar el ordenador! En fin, metedura de pata terrible. Utiliza cookies! Te pone una cookie y utiliza esto para crearte el sign-in seal.
Pues pienso que la solución de la cookie es bastante peor, ya que aunque el seal esté cifrado (lo está) en poco tiempo algún cracker encontrará el método de desencriptarla y punto (el mismo algoritmo que utilice yahoo)
En fin, mi "Palabra de Honor" es mejor, IMHO.

Yahoo’s sign-in seal September 17, 2006

Posted by Bosco in : Palabra de Honor , add a comment

Acabo de flipar al logarme a mi cuenta de yahoo. Me han pedido que cree un “sign-in seal” o, palabra de honor, para certificar la autenticidad del sitio.
Considero en que se basa en un principio parecido al que expuse en el protocolo “palabra de honor“, pero en este caso, en vez de utilizar un login como referencia, utilizan la MAC address.
Lo demás es exactamente la misma idea.
A mi se me ocurrió hace 1 mes más o menos. Supongo que en tan poco tiempo no haya sido plagiado… En fin, al menos me queda el consuelo que tengo mis neuronas en forma.

Spring, Geronimo y EARs (3): config files September 14, 2006

Posted by Bosco in : TempAlias, programación , add a comment

Qué son cada uno de estos xml files, también conocidos como Deployments plans:

Spring, Geronimo y EARs (2): ear structure September 14, 2006

Posted by Bosco in : TempAlias, programación , add a comment

En este post hablaré de la estructura que debe tener el fichero .ear:
servicio.ear:
-META-INF
—-application.xml
—-geronimo-application.xml
—-MANIFEST.MF
-servicio.jar
-otros_ejb.jar

Dentro de los jars (las implementaciones de los ejbs) encontraremos algo parecido:
-META-INF
—-ejb-jar.xml
—-openajb-jar.xml
—-MANIFEST.MF
-com.comp.service.. (carpetas de las classes java de tu ejb)
-applicationContext.xml (para Spring)
-resources.xml (otras historias que neceistes)

Spring, Geronimo y EARs (1): external libs September 14, 2006

Posted by Bosco in : TempAlias, programación , add a comment

Bueno, voy a escribir una serie de posts acerca de como crear EJBs 3.0 usando Spring y Geronimo como App Server.
Para empezar voy a hacer un comentario sobre librerias (.jar) necesarias para tu aplicación. Es posible que necesites librerías externeas, como mínimo spring.jar. Si la pones en tu ear, parece que Geronimo no la incluye en el classpath ( a no ser que modifiques el MANIFEST.MF)
Para que las coja bien hay que copiarlas en la carpeta geronimo-1.1/var/shared/lib
Reinicia Gerónimo, y ya podrías hacer el deploy de tu ear (en el siguiente post veremos que necesitas para crear el ear)

Geronimo Ant Scripts September 12, 2006

Posted by Bosco in : TempAlias, programación , add a comment

He bajado el Geronimo Application Server de Apache, para probar que tal funciona, ya que está an la versión 1.1 y puede ser interesante conocerlo como alternativa a JBoss, que es el típico. Para el proyecto que estamos utilizando no es necesario, ya que con un tomcat es suficiente y menos complejo, sin embargo hay que ir conociéndolo para futuras applicaciones, ya que es probable que termine convirtiendose en un standard

Para empezar voy a mostrar los scripts que he creado para arrancarlo, pararlo, deploys… no son los mejores ni los más bonitos, básicamente utilizan los scripts que vienen con Gerónimo, pero bueno, si vas  justo de tiempo puedes hacer un copy paste de ellos, que seguro que funcionan. Ya saldrá algún friki  que los optimice, de mientras yo uso estos:

    <target name="init">
        <taskdef resource="net/sf/antcontrib/antcontrib.properties">
            <classpath>
                <pathelement path="${ utils.dir}/ant-contrib.jar"/>
            </classpath>
        </taskdef>
    </target>

 

    <target name="geronimo-start" depends="init" description="Starts Geronimo app server">
        <if>
            <http url="${geronimo.url}"/>
        <then>
            <echo level="info">Geronimo is already running</echo>
        </then>
        <else>
            <echo level="info">Starting Geronimo (it can take up to some minutes, it depends on your machine)…</echo>
            <exec spawn="true" dir="${ geronimo.home}" executable="${geronimo.bin}/${geronimo.start}">
            </exec>
         </else>
         </if>  
    </target>  

 

    <target name="geronimo-stop" depends="init" description="Stops Geronimo app server">
        <if>
            <http url="${geronimo.url}"/>
        <then>
            <echo level="info">Stopping Geronimo…</echo>
            <exec dir="${geronimo.home }" executable="${geronimo.bin}/${geronimo.stop}">
                <arg value="–user=${geronimo.user}"/>
                <arg value="–password=${geronimo.pwd}"/>
            </exec>
        </then>
        <else>
            <echo level="info">Geronimo is not running!</echo>
         </else>
         </if>  
    </target>  

 

    <target name="geronimo-restart" depends="geronimo-stop,geronimo-start" description="Restarts the app server"/>

 

    <target name="geronimo-deploy" depends="geronimo-start,prepare_release" description="Deployin webapp in geronimo">
        <echo level="info">Deploying ${basedir}/${ dist.base}/${proj_name}.war</echo>
        <exec dir="${geronimo.home}" executable="${geronimo.bin}/${geronimo.deploy}">
            <arg line="–user ${geronimo.user} –password ${geronimo.pwd} deploy ${basedir}/${dist.base}/${proj_name}.war"/>
        </exec>
    </target>  

 

    <target name="geronimo-undeploy" depends="geronimo-start" description="Deploying webapp in geronimo">
        <echo level="info">Undeploying ${proj_name}</echo>
        <exec dir="${geronimo.home}" executable="${geronimo.bin}/${geronimo.deploy}">
            <arg line="–user ${geronimo.user} –password ${geronimo.pwd} undeploy ${proj_name}"/>
        </exec>
    </target>  

Y sean las properties:

geronimo.home=E:/geronimo-1.1
geronimo.url=http://127.0.0.1:8080/
geronimo.bin=${geronimo.home}/bin
geronimo.lib=${geronimo.home}/lib
geronimo.user=system
geronimo.pwd=manager
geronimo.start=startup.bat
geronimo.stop=shutdown.bat
geronimo.deploy=deploy.bat

 
Por último simplemente recordad que es obligatorio crear un fichero geronimo-web.xml en el dir WEB-INF. Mirad la referencia para más información, o simplemente descargaros el código de mi proyecto Temporal Alias

TempAlias: Estado September 8, 2006

Posted by Bosco in : TempAlias, programación , add a comment

Bueno, vuelvo a hacer un resumen sobre el proyecto, porque ha cambiado bastante desde la última vez.

Para empezar, la localización del proyecto. He movido la última revision de la branch (54) otra vez al trunk, ya que he completado el Milestone 2,y habian ciertos cambios importantes (Hibernate…)  que ya eran interesantes de llevar al trunk.
Para descargarlo, utilizando Eclipse y Subclipse, hay que hacer un checkout del proyecto desde la url:

https://tempmail.googlecode.com/svn/trunk/TempAlias

El proyecto empezó utilizando JDBC, pero lo he migrado  a Hibernate, y he deprecado la implementacion JDBC.

El proyecto trabaja con (entre otros) Spring 2.0, JSP 2.0, Hibernate 3, James Email Server, jCaptcha, XFire y Annotations (JSR 220, 181 y 175)

Para hacerlo funcionar:
0. Baja e instala Java 5 (sin NetBeans, please)
1. Baja e instala James
2. Baja e instala Tomcat 5.5
3. Baja e instala Eclipse (3.x)
4. Baja e instala Subclipse
5. Bajate el código
6. Copy-paste template.properties, renombralo como user.properties y cambia los valores
6. Ejecuta la tarea start-james-db
7. Ejecuta la tarea deploy
8. La aplicación estará en http://127.0.0.1:8080/tempalias/

Login, Acegi y Spring interceptors September 8, 2006

Posted by Bosco in : TempAlias, programación , add a comment

Bueno, pues hoy he alcanzado el milestone 2 del proyecto, al añadir la posiblidad de autogestionarse los alias, e introduciendo un formulario de login. En este post explicaré como gestionar el login de una forma más o menos interesante.

Existen varias formas, la clásica es utilizar el login propietario del application server, como se define en la especificación de las webapps de sun. Sin embargo esta solución no es demasiado práctica, ni portable a diferentes appd servers, ni te permite acceder de manera directa a los objetos desde tu código.

Otra solución, la que está más de moda y se supone que es la más potente, es utilizar Acegi. Acegi es un framework para gestionar todo el mecanismo de login, autentificación y autorización, muy flexible y que se integra facilmente con  Spring. JA! Es un infierno integrar Acegi, no lo entiende ni el tato. Yo lo utilicé en un proyecto (lo integró el arquitecto de entonces) y lo he vuelto a reintentar integrarlo en este y ha sido imposible. Tampoco le dediqué demasiado tiempo, es verdad, pero cuando el tutorial de Acegi te dice que más o menos el proceso de aprendizaje dura una semana, se te quitan todas las ganas de seguir. Eso es sencillo? Además, tampoco veo claras las enormes ventajas de utilizarlo. De todas formas, si alguien sabe manejarlo agradecería que intentara integrarlo en este proyecto, ya que debería ser muy sencillo, y de esta forma aclararnos un poco su uso.

La tercera solución, que es la que he utilizado es una solución AOP, basada en Spring. Se basa en crear un interceptor que se active cuando se trata de entrar en las páginas protegidas. Para ello creamos un nuevo UrlMapping (puede haber más de uno!):

    <bean id="secureUrlMapping" class=" org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    
        <property name="interceptors">
            <list>
                <ref bean="signonInterceptor"/>
            </list>
        </property>
        <property name="mappings">
            <props>               
                <prop key=" /edit.htm">editAccountController</prop>
            </props>
        </property>
    </bean>

    <bean id="signonInterceptor" class=" com.bcurtu.web.SignonInterceptor"/>

¿Qué significa? Pues que cuando queramos acceder a /edit.htm, se ejecutará el código de SigonInterceptor. Esta clase (hereda de org.springframework.web.servlet.handler.HandlerInterceptorAdapter) implementa el método preHandle, que simplemente mira a ver si existe una variable Account en la Session. Si existe, todo sigue su curso y se carga el formulario edit.htm. Si no existiera, cargaría el formulario de login. En ambos casos, el código resultante ya es código normal de la aplicación, por lo que no requiere más explicación.

Comparando esta solución (añadir un bean más a la aplicación y tratar el login programáticamente) con el uso de Acegi, esta solución es infinitamente más sencilla. Pero hay que decirlo todo, el nivel de seguridad de esta aplicación, uso de un único perfil y demás, es muy sencillo. Para problemas más complicados de uso de perfiles, Acegi podría ser interesante. Para aplicaciones sencillas, viva Spring y sus interceptores!

Migrando a Spring 2.0 Paso a Paso September 7, 2006

Posted by Bosco in : TempAlias, programación , 1 comment so far

1.- Bájate la distribución de spring 2.0 (actualmente RC3)
2.- Lo descomprimes
3.- Reemplaza tu spring.jar de la version 1.2.x con el nuevo spring.jar de la version 2.0
4.- Reinicia tu aplicación

Y ya esta! Es evidente que este post es bastante irónico, pero bueno, simplemente es para certificar que Spring 2.0 es completamente compatible hacia atrás. Y también para comentar, que en el proyecto del TempAlias lo he cambiado y a partir de ahora voy a utilizar las nuevas funcionalidades del 2.0, a ver que tal.