sábado, 16 de febrero de 2013

Versiones de Java EE

¡Hey! ¡si tengo un blog!

pues voy a aprovechar para enlazar a esta tabla que he hecho con las versiones de los componentes de Java EE desde la versión 1.2 con los datos que he sacado de aquí.

Versiones de Java EE

lunes, 21 de marzo de 2011

Chad Fowler: The Big Rewrite

NaVagando, me he encontrado con una serie de artículos de Chad Fowler de 2006/2007 con un par de artículos mal enlazados,, así que aquí están los links correctos:

miércoles, 24 de noviembre de 2010

Copiar entradas del registro para recuperar la configuración de PuTTY

Acabo de cambiar de disco duro, lo que significa reinstalar tanto el XP, como todas las aplicaciones. Uno de los problemas es el de transferir la configuración de estos programas. Un ejemplo en el que la cosa funciona como la seda es la de copiar el perfil de Firefox (Mozilla Knowledge Base ).

A la hora de copiar la configuración de Putty, la cosa no es tan fácil. En downloadsquad.switched.com se explica como extraer del registro la clave HKEY_CURRENT_USER\Software\SimonTatham con regedit para a continuación importarla en otro ordenador. El problema es que en mi caso no había otro ordenador, sino simplemente el disco antiguo conectado por USB.

En este caso viene el programa freeware RegistryViewer al rescate, ya que permite editar los archivos del registro de Windows directamente. Estos archivos están la mayoría en c:\windows\system32\config\, salvo ntuser.dat que es un fichero oculto que está en el directorio %userprofile%. Este último fichero es el más importante, porque es el que tiene las entradas del registro de HKEY_CURRENT_USER.

 En resumen, los pasos para copiar la configuración de PuTTY desde un disco duro donde estaba instalado son los siguientes:
  1. Localizar el fichero ntuser.dat en %userprofile% y abrirlo con RegistryViewer
  2. Exportar la clave HKEY_CURRENT_USER\Software\SimonTatham a un fichero, por ejemplo SimonTatham.reg.
  3. Instalar las claves en el registro haciendo doble click en el archivo exportado.
Edit 18/Jul/2011: Y para WinSCP, funciona igual pero con la clave HKEY_CURRENT_USER\Software\Martin Prikryl

    domingo, 24 de octubre de 2010

    Fischerviertel en Ulm

    Junto a la orilla del Danubio en Ulm se encuentra este bonito barrio conocido como Fischerviertel (Barrio de los pescadores). Aquí van un par de fotos del lugar.

    martes, 19 de octubre de 2010

    Una selección de herramientas para crear aplicaciones web en java

    Uno de los temas que más me interesó del simposium de Liferay al que asistí recientemente fue la presentación de Vaadin. Ésto me ha llevado a pensar qué "stack" de herramientas usaría para hacer aplicaciones java.

    Grails es una plataforma con la que crear aplicaciones CRUD en un momentín, y además tiene plugin para Vaadin.


    Buscando sobre este tema, me he encontrado con un blog que habla de la combinación de Google App Engine, Spring, Vaadin y Maven.

    Y al hilo de Maven, quizá sería interesante usar Gradle en su lugar.

    Cualquier día de estos contaré mi experiencia poniendo a prueba estas ideas.

    domingo, 17 de octubre de 2010

    Lanzado Maven 3

    La versión 3 de Maven ya ha salido de la fase beta y fue lanzada el 8 de octubre. Se puede bajar del sitio de Apache http://maven.apache.org/ . Los proyectos para la versión 2 son en general compatibles con esta versión 3, aunque una excepción a eso es la configuración para la generación del site. En la documentación se pueden ver las notas de compatibilidad entre estas dos versiones.

    Llevo varios meses usando esta versión mientras mis compañeros usan Maven 2, sin tener problema. Me gusta que queda más claro qué versión de qué plugin se está ejecutando en cada momento

    jueves, 14 de octubre de 2010

    Liferay Symposium Europe en Offenbach am Main

    Los días 12 y 13 de octubre de 2010 se celebró en Liferay Symposium Europe, donde la gente de Liferay y otros colaboradores mostraron los avances de la nueva versión 6 y usos de este portal Java.

    domingo, 25 de julio de 2010

    Links del día: Mocks, Building tools

    "Untestable" code - JMockit: bastante más fácil que con Surrogate. Hace falta Java 5 porque hace uso de la instrumentalización.

    Gradle: Why? : Parece que Hibernate se pasa a Gradle como herramienta de construcción del proyecto. ¿Hora de cambiar?

    viernes, 9 de julio de 2010

    Sobreescribir métodos estáticos para testeo en Maven 2 usando Surrogate.

    Creo que en inglés me habría quedado un título más correcto. Algo así como: 'Mocking static methods for testing in Maven 2 using Surrogate'.

    El problema
    El caso es que me encuentro con que la clase que quiero testear llama al método estático OpenCms.getRoleManager(). Además, el proyecto se construye con Maven 2 (ó 3), por lo que habrá que modificar el POM consiguientemente.

    Esta es la clase:

    package arm.opencms.accesscontrol;
    import org.opencms.file.CmsObject;
    import org.opencms.main.OpenCms;
    import org.opencms.security.CmsRole; 
    
    public class XmlContentAccessControl {
    
      private CmsRole ACCEPTED_ROLE=CmsRole.VFS_MANAGER;
      public boolean hasPermission(CmsObject cmsObject) {
    
        return OpenCms.getRoleManager.hasRole(cmsObject,ROLE);
    
      }
    }
    

    La solución más cabal: refactorizar

    En lugar de adaptar nuestro código de prueba, podemos adaptar nuestro código principal para que sea más testeable. En este caso podemos declarar un atributo de la clase para almacenar un CmsRoleManager:

    package arm.opencms.accesscontrol;
    import org.opencms.file.CmsObject;
    import org.opencms.security.CmsRoleManager;
    import org.opencms.security.CmsRole; 
    
    public class XmlContentAccessControl2 {
    
      private CmsRoleManager roleManager;   
        
      public XmlContentAccessControl(CmsRoleManager roleManager){
        this.roleManager=roleManager;
      }
    
      private CmsRole ACCEPTED_ROLE=CmsRole.VFS_MANAGER;
      public boolean hasPermission(CmsObject cmsObject) {
    
        return this.roleManager.hasRole(cmsObject,ROLE);
    
      }
    }
    


    Si refactorizar no es posible o deseable, una posible solución: Surrogate

    Si la única salida es llamar al método estático, podemos usar el framework Surrogate, que, apoyándose en AspectJ, permite definir sustituciones de los métodos o de las clases principales en nuestro código de prueba. Una de sus funcionalidades es la de sobreescribir métodos estáticos.

    Para nuestro ejemplo, usaremos el siguiente árbol de directorios con sus correspondientes contenidos:

    /
    |-src
    | |-main
    | | |-java
    | | | |-arm/opencms/accesscontrol
    | | |   |-XmlContentAccessControl.java
    | | |-aspect
    | |   |-OpenCmsStaticCalls.aj
    | |-test
    |   |-java
    |     -arm/opencms/accesscontrol
    |      |-TestAccessControl.java
    |-test
    |  |-lib
    |    |-surrogate-core-1.0rc1.jar
    |-pom.xml
    

    Y el contenido de los ficheros:

    pom.xml
    
    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
    xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelversion>4.0.0</modelversion>
     <groupid>arm.opencms</groupid>
     <artifactid>arm.opencms.accesscontrol</artifactid>
     <name>AccessControl</name>
    
     <dependencies>
      <dependency>
       <groupid>org.opencms</groupid>
       <artifactid>opencms</artifactid>
       <version>7.5.2</version>
      </dependency>
      
      <dependency>
       <groupid>junit</groupid>
       <artifactid>junit</artifactid>
       <version>4.8.1</version>
       <scope>test</scope>
      </dependency>
      <dependency>
       <groupid>org.jmock</groupid>
       <artifactid>jmock-junit4</artifactid>
       <version>2.5.1</version>
       <scope>test</scope>
      </dependency>
      
      <dependency>
       <groupid>net.sourceforge.surrogate</groupid>
       <artifactid>surrogate-core</artifactid>
       <version>1.0rc1</version>
       <scope>test</scope>  
      </dependency>
      <dependency>
         <groupid>org.aspectj</groupid>
         <artifactid>aspectjtools</artifactid>
         <version>1.6.7</version>
         <scope>test</scope>
      </dependency>
      <dependency>
       <groupid>org.aspectj</groupid>
       <artifactid>aspectjrt</artifactid>
       <version>1.6.7</version>
       
      </dependency>  
      <dependency>
       <groupid>mockobjects</groupid>
       <artifactid>mockobjects-core</artifactid>
       <version>0.09</version>
       <scope>test</scope>
      </dependency>  
     </dependencies> 
     <build>
     <plugins>
            <plugin>
                
                <artifactid>maven-install-plugin</artifactid>               
                <executions>
                    <execution>
                        <id>install-javabridge-javabridge</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <configuration>
                            <file>test/lib/surrogate-core-1.0rc1.jar</file>
                            <groupid>net.sourceforge.surrogate</groupid>
                            <artifactid>surrogate-core</artifactid>
                            <packaging>jar</packaging>
                            <version>1.0rc1</version>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
     <plugin>
               <groupid>org.codehaus.mojo</groupid>
               <artifactid>aspectj-maven-plugin</artifactid>
               <version>1.3</version>
               <configuration>
      <compliancelevel>1.5</compliancelevel>
          <aspectdirectory>src/test/aspect</aspectdirectory>
        </configuration>
               <executions>
                  <execution>
                     <goals>
                       <goal>compile</goal>
                     </goals>
                  </execution>
               </executions>
            </plugin>           
        </plugins> 
      </build>
    </project>
    

    La biblioteca Surrogate no está disponible en ningún repositorio público, por lo que la instalamos durante la inicialización como vimos en un post anterior. También se usa el plugin de AspectJ, para compilar el aspecto OpenCmsStaticCalls.aj .


    TestAccessControl.java
    
    @RunWith(JMock.class)
    public class XmlContentAccessControlTest {
            
        private Mockery context = new JUnit4Mockery() {{
     setImposteriser(ClassImposteriser.INSTANCE);
        }};
    
        CmsObject mockCmsObject=context.mock(CmsObject.class);
        CmsRoleManager mockRoleManager=context.mock(CmsRoleManager.class);
        
        @Test
        public void testHasPermissionOnTab()throws NoSuchMethodException, CmsRoleViolationException {
    
     SurrogateManager mm = SurrogateManager.getInstance();
     mm.reset();
     //OpenCms.getRoleManager() -> mockRoleManager
     MockMethod mockGetRoleManager = mm.addMockMethod(new MockMethod(OpenCms.class, "getRoleManager"));
     mockGetRoleManager.addReturnValue(mockRoleManager);
     
     context.checking(new Expectations() {{
    
         allowing(mockRoleManager).hasRole(with(is(mockCmsObject)),
                                    (CmsRole)with(allOf(an(CmsRole.class),hasProperty("roleName", is("VFS_MANAGER")))));
          will(returnValue(true));
     }});
     
     XmlContentAccessControl accessControl=new XmlContentAccessControl();
     
     assertTrue(accessControl.hasPermission(mockCmsObject));
        }
    
    

    OpenCmsStaticCalls.aj
    
    aspect OpenCmsStaticCalls extends net.sf.surrogate.core.SurrogateCalls {
     /**
      * Implementation of the mock pointcut
       */
     protected pointcut mockPointcut() :
     (
      call(* org.opencms.main.OpenCms.*(..))
        );                             
    } 
    
    

    lunes, 5 de julio de 2010

    Torneo de Kayak-Polo Internacional de Horb 2010

    El 3 de julio se celebró el Torneo de Kayak-Polo Internacional de Horb, en la ciudad de Horb am Neckar. Participaron 6 equipos masculinos y una cifra similar de equipos infantiles y cadete. El ganador fue el KSC Mannheim.

    Como se puede observar en la marca de agua, he robado la foto vilmente de www.kanupolo-villingen.de.

    martes, 22 de junio de 2010

    Hoguera


    Tomada junto al lago Edersee

    domingo, 13 de junio de 2010

    Aquí falta algo...

     ... y seguro que soy el único por aquí que se ha dado cuenta del detalle.

    martes, 25 de mayo de 2010

    Un par de funcionalidades de Maven 2

    Utilizar artefactos que no están en ningún repositorio

    Un problema recurrente en Maven 2 es cómo usar y versionar artefactos que no hay en ningún repositorio público. Se pueden instalar en el repositorio local, o en el privado de la empresa, pero si quieres distribuir el código fuente, éste no va a compilar sin hacer ciertos pasos previos. Una forma de solucionar esto es lo que propongo aquí, y es guardar los jars necesarios en el directorio lib del proyecto que los necesita e instalarlos en el repositorio local durante la fase 'initialize' usando el plugin 'maven-install-plugin'. En mi caso me hizo falta para incluir en mi aplicación el puente PHP/Java.

        <plugins>
            <plugin>
                <!-- Install the JavaBridge JARs in the local maven repository : JavaBridge -->
                <artifactId>maven-install-plugin</artifactId>               
               
    <executions>
                    <execution>
                        <id>install-javabridge-javabridge</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <configuration>
                            <file>lib/JavaBridge.jar</file>
                            <groupId>net.sourceforge.phpjavabridge</groupId>
                            <artifactId>JavaBridge</artifactId>
                            <packaging>jar</packaging>
                            <version>${phpjavabridge.version}</version>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <properties>
            <phpjavabridge.version>6.1.2.1</phpjavabridge.version>
        </properties>


    versions:set 

    Existe una plugin en Maven para aumentar la versión en todos los módulos de un proyecto multimódulo. Estas son las llamadas que utilizo:

    mvn versions:set -DnewVersion=1.2
    mvn versions:commit

    domingo, 23 de mayo de 2010

    Una pala Galasport me ha durado menos de 5 meses

    En este blog le quiero hacer un hueco también al Kayak-polo, un deporte de equipo con balón en el que los jugadores van montados en kayak. En esta ocasión inaugural para quejarme de que se me ha roto la pértiga de mi pala Galasport Contact tras usarla desde febrero, y no intensivamente. La rotura se produjo cuando recibí un golpe de balón en el centro de la pértiga. Se me han roto ya muchas palas jugando a esto, pero siempre habían durado más de un año, incluso cuando jugaba con mayor frecuencia. Aquí pongo un par de fotos del resultado:



    Jardín exótico de la Universidad de Hohenheim

    La universidad de Hohenheim, en Stuttgart, tiene un jardín inglés con numerosas plantas exóticas. Este jardín pertenece realmente al palacio de Hohenheim.


    ¡Hay plantas muy raras en este sitio!

    sábado, 22 de mayo de 2010

    Kulinarischer Weinweg en Kernen-Stetten

    Del 22 al 24 de mayo se celebra en Kernen-Stetten el 'Kulinarischer Weinweg' ('Camino culinario del vino', digamos), en el que se mezcla el andar un poquito por los viñedos alrededor del castillo Yburg y el tomarse un vino y alguna cosilla de comer.

    Foto: Los viñedos y una de las zonas de venta de vino y viandas.

    Foto: El castillo Yburg

    En el siguiente link hay más fotos de la edición del 2005, para hacerse una idea de qué va el tema: http://www.weinweg.de/Sites/BilderKW05.htm.

    viernes, 21 de mayo de 2010

    Cómo eliminar los caracteres ^M en vi

    Hoy me ha vuelto a pasar que varios ficheros de configuración de mi aplicación web que acababa de subir al servidor Linux desde Windows tenían todas las líneas acabadas en un carácter representado como ^M. Posiblemente retorno de carro o nueva línea, nunca me acuerdo de cual. Google me ha dirigido rápidamente a tropecientos sitios con la solución que buscaba. Lo que he hecho es escribir el comando ':%s/^M//g' en VI. Con esto desaparecerán. Para escribir la ^M correctamente hay que pulsar primero ctrl+V y luego ctrl+M.


    Via: http://www.tech-recipes.com/rx/150/remove-m-characters-at-end-of-lines-in-vi/ 

    Y aquí hay una serie de posibles soluciones al mismo problema:http://www.computing.net/answers/unix/remove-m-from-file/6031.html

    Stadtmauerrundgang

    Como no tengo nada que contar, aquí dejo una foto hecha hace tiempo en la muralla de Waiblingen

    Primer Post de Potoblof

    Este es el primer, y hasta ahora último post en Potoblof.



    Foto: La Selva No Tan Negra (Y no tan selva)