Author Archives: Renan Huanca

UnitTests

Published / by Renan Huanca / 2 Comments on UnitTests

Hola Amigos, disculpen el tiempo que no pude postear. Lo que pasa es que en mi trabajo me ten铆an muy ocupado 馃檪

Hoy no puedo escribir, pero por lo menos quiero compartir dos muy buenos podcasts de los amigos de JavaHispano.

Les recomiendo que escuchen ya que hablan de las estrategias que usaron algunas empresas para implementar un proceso de unittest.

JavaHispano Podcast – 064 – Test de aplicaciones (Parte 1)
* Blog de Alfredo Casado
* Blog de Julio C茅sar P茅rez
* Blog de Jose Luis Bugar铆n
* 驴Por qu茅 hacer test?
* Buenas pr谩cticas para programar tests
* Principio FIRST (Ver cap铆tulo 9)
* Dossier sobre el test de software
* Historia de integraci贸n: 1, 2, 3, 4
* Blog de Misko Hevery.
* Crear c贸digo testeable.
* Desarrollo TDD.

JavaHispano Podcast – 065 – Test de aplicaciones (Parte 2)
* Blog de Julio C茅sar Perez
* Blog de Alfredo Casado
* Blog de Jose Luis Bugarin
* Site de Junit: http://www.junit.org/
* Site de DbUnit: http://www.dbunit.org/
* Site de XMLUnit: http://xmlunit.sourceforge.net/
* Site de JMeter: http://jakarta.apache.org/jmeter/
* Site de Selenium: http://seleniumhq.org/
* Site de Watir: http://watir.com/
* Site de EasyMock: http://easymock.org/
* Site de Mockito: http://mockito.org/
* Site de Fitnesse: http://fitnesse.org/
* Site de Concordion:http://www.concordion.org/
* Site de Hudson: https://hudson.dev.java.net/
* Site de WebDriver: http://code.google.com/p/webdriver/
* Site de SoapUi: http://www.soapui.org/
* Plugin de chuck-norris para hudson.

Hello World/Hola Mundo con RESTFul y Spring 3

Published / by Renan Huanca / 2 Comments on Hello World/Hola Mundo con RESTFul y Spring 3

Introducci贸n.

Este es un ejemplo sencillo de RESTFul usando Spring 3 claro usando maven 馃檪
Para este ejemplo estamos usando el Release Candidate 3 de Spring 3

Dependencias Maven

Solo se necesita una para este ejemplo

        
            org.springframework
            spring-webmvc
            3.0.0.RC2
        

Repositorio Maven de Spring 3

        
            SpringSource Maven Milestone Repository
            http://maven.springframework.org/milestone
        

Declarando Spring Servlet

La servlet del spring framework se la declara en el web.xml.
Notemos que en el url-pattern, estamos indicando que vamos a mapear cualquier request a la servlet de spring.

    
    
        mytest
        org.springframework.web.servlet.DispatcherServlet
        1
    
    
        mytest
        *
    

Declarando RESTFul Controller

El secreto esta en la anotaci贸n RequestMapping. En este caso, el nombre de la variable en url y en java son las mismas, pero se puede personalizar.


import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
...

/**
 * @author Renan Huanca
 * @since Nov 22, 2009  10:54:31 AM
 */

@Controller
public class RestController {

    @RequestMapping("/{tunombre}/")
    public void readTable(@PathVariable String tunombre,
                          HttpServletRequest request,
                          HttpServletResponse response){
        PrintWriter writer = response.getWriter();
        writer.print("Hola Mundo
"); writer.print("Como estas "+tunombre); } }

Referencias

REST in Spring 3: @MVC

Aplicaci贸n multi-modulo “Hola Mundo” con Maven

Published / by Renan Huanca / 6 Comments on Aplicaci贸n multi-modulo “Hola Mundo” con Maven

Ac谩 muestro un ejemplo de una aplicaci贸n multi-modulo usando maven.

El ejemplo esta basado en este articulo: Chapter 7. Multi-module Enterprise Project

Descripci贸n

B谩sicamente este ejemplo es solo una aplicaci贸n que muestra un el texto “Hola Mundo”.

Esta aplicaci贸n esta compuesta por dos m贸dulos: ‘my-webapp’, que define una sevlet que imprime un mensaje y ‘my-module’ que contiene un servicio que devuelve el mensaje que imprime la servlet.

Esta es la estructura de directorios y archivos:

multiapp/
娄   pom.xml
+---my-module
娄   娄   pom.xml
娄   +---src
娄       +---main
娄           +---java
娄                   HelloWorldService.java
+---my-webapp
    娄   my-webapp.iml
    娄   pom.xml
    +---src
        +---main
            +---java
            娄       HelloWorldServlet.java
            +---webapp
                娄   index.jsp
                +---WEB-INF
                        web.xml

Archivos pom.xml

pom.xml principal

    4.0.0
    edu.renan
    multiapp
    pom
    1.0
    Test Modules App
    
        my-module
        my-webapp
    
    
        
            net.sourceforge.openutils
            openutils-testing-testng
            2.2.2
        
    
    
        multiapp
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.5
                    1.5
                
            
        
    

La parte importante en el pom.xml principal es que se definen los m贸dulos: my-webapp y my-module dentro de la etiqueta <modules>

Tambi茅n hay que tomar en cuenta que el packaging es definido como ‘pom’

pom.xml – my-module

	4.0.0
	
		edu.renan
		testmodules
		1.0
	
	my-module
	jar
	my-module

Ac谩 estamos definiendo cual sera el modulo padre usando la etiqueta ≷parent> y el packaging como ‘jar’. Utilice jar por que este modulo generara un jar file.

pom.xml – my-webapp

    4.0.0
    
        edu.renan
        testmodules
        1.0
    
    my-webapp
    war
    1.0
    my-webapp
    
        
            servletapi
            servlet-api
            2.4
            provided
        
        
            edu.renan
            my-module
            1.0
        
    
    
        mywebapp
    

Ac谩 definimos un parent lo mismo que el anterior, pero para el packaging usamos ‘war’, por que este modulo generara una aplicaci贸n web.

Classes java y web.xml

HelloWorldService
public class HelloWorldService {
    public String sayHello(){
        return "Hola Mundo";
    }
}

Como ver谩n es solo una clase con un m茅todo con un m茅todo que retorna el mensaje “Hola Mundo”.

HelloWorldServlet
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;

public class HelloWorldServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HelloWorldService helloWorldService = new HelloWorldService();
        response.getWriter().println(helloWorldService.sayHello());
    }
}

Esta servlet solo llama al servicio definido anteriormente.

web.xml


    My Web App
    
        helloWorldServlet
        HelloWorldServlet
    

    
        helloWorldServlet
        /helloWorld
    

    
        index.jsp
    

Espero este ejemplo les sirva mucho, si quieren mas recursos ac谩 tienen algunos que encontr茅:

El c贸digo fuente lo pueden encontrar en https://github.com/rhuanca/examples/tree/master/maven-multimodule.

Ejemplo TestNG

Published / by Renan Huanca / Leave a Comment

Hola amigos,

Ac谩 comparto un ejemplo simple de como usar el TestNG.

El ejemplo se basa en una clases para realizar la operaci贸n suma.

Clase a Testear

public class Calc {
    public int add(int a, int b){
        return a + b;
    }
}

Clase de Testeo

import org.testng.annotations.Test;

@Test
public class CalcTest {
    public void sumarTest(){
        Calc calc = new Calc();
        assert 2 == calc.add(1,1);
    }
}

Archivo pom.xml

    ...
    
        
            net.sourceforge.openutils
            openutils-testing-testng
            2.2.2
        
    
    ...
    
        test
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.5
                    1.5
                
            
        
    

Para usar las anotaciones es necesario utilizar java 1.5+

Autenticaci贸n con OpenSSO y HttpClient

Published / by Renan Huanca / 1 Comment on Autenticaci贸n con OpenSSO y HttpClient

Hola amigos,

Ac谩 comparto una porci贸n de c贸digo que use para poder autenticarme a servidor OpenSSO y obtener un el subjectId del usuario usando HttpClient de Jakarta Commons.

Este ejemplo esta basado en este articulo:

REST based Identity Services in OpenSSO, ac谩 se describen los distintos RestFul services que provee OpenSSO

El ejemplo prove铆do es simplemente un m茅todo que recibe como par谩metros nombre de usuario y password el cual despu茅s usando el PostMethod de HttpClient obtiene el un subjectId.

Aparte tambi茅n pueden ver un m茅todo de utilidad que sirve para leer un InputStream y convertirlo a un String.

    public String authenticate(String username, String password) {
        Configuration configuration = Configuration.getIntance();
        PostMethod postMethod = new PostMethod("http://localhost:8080/opensso/identity/authenticate");
       
        HttpClient httpClient = new HttpClient();
        postMethod.addParameter("username",username);
        postMethod.addParameter("password",password);
        postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        try {
            httpClient.executeMethod(postMethod);
        } catch (IOException e) {
            throw new RuntimeException("No se puede llamar a servicio de autenticaci贸n de OpenSSO");
        }

        String response = null;
        try {
            response = readInputStreamAsString(postMethod.getResponseBodyAsStream());
        } catch (IOException e) {
            throw new RuntimeException("No se puede leer respuesta.",e);
        }
        postMethod.releaseConnection();
        return response.substring("token.id=".length()).trim();
    }

    private String readInputStreamAsString(InputStream inputStream)
            throws java.io.IOException {
        StringBuffer fileData = new StringBuffer(1000);
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        char[] buf = new char[1024];
        int numRead = 0;
        while ((numRead = reader.read(buf)) != -1) {
            String readData = String.valueOf(buf, 0, numRead);
            fileData.append(readData);
            buf = new char[1024];
        }
        reader.close();
        return fileData.toString();
    }

B谩sicamente al llamar al servicio de autenticaci贸n, este te retorna un String parecido al siguiente:

token.id=123445656qwerreqerqwerqwre345

Donde “123445656qwerreqerqwerqwre345”, es el identificador del usuario para poder ser usado en una sesi贸n de OpenSSO, es por eso que despu茅s hacemos un substring para separar el separarlo.

Esto seria por hoy 馃檪 hasta la pr贸xima.

Usar un proxy con HttpClient

Published / by Renan Huanca / 5 Comments on Usar un proxy con HttpClient

Hola amigos,

Ac谩 una peque帽a sugerencia de uso de la clase HttpClient (Jakarta Commons HttpClient) con un proxy server.

HttpClient client = new HttpClient();
client.getHostConfiguration().setProxy("192.168.1.55",80);
GetMethod get = new GetMethod("http://www.someserver.net/somecustomerservice/someaction.do");
client.executeMethod(get);
InputStream inputStream = get.getResponseBodyAsStream();
get.releaseConnection();

HttpClient, se encarga de realizar o ejecutar la llamada http. Esta puede ser GET (GetMethod), POST(PostMethod), etc. La ejecuci贸n de la llamada ser la realiza mediante el m茅todo executeMethod(). Es aconsejable no olvidar llamar al m茅todo releaseConnection() una vez ejecutada la llamada.

HostConfiguration, maneja informaci贸n respectiva para una conexi贸n http, tal como: host remoto, protocolo, puerto, proxy, etc. Como ver谩n en el en este caso estoy asignado el IP del servidor proxy y puerto.

GetMethod, representa una llamada HTTP GET. Tambi茅n esta clase te permite obtener el resultado de llamada http.

Anotaciones en Java

Published / by Renan Huanca / 1 Comment on Anotaciones en Java

Hola Amigos, esta semana estoy viendo un poco de anotaciones y vi dos buenos tutoriales que recomiendo vean para entender como se usan estas.

1. Ejemplo sencillo Anotaci贸n aplicada a una clase.
Escribir nuestras propias Anotaciones en Java

2. Ejemplo sencillo Anotaci贸n aplicada a una atributos de una clase. (vean el pdf referenciado en el blog)
Experimentando con Java Annotations

Hola Mundo con Google App Engine y Maven

Published / by Renan Huanca / 11 Comments on Hola Mundo con Google App Engine y Maven

Introducci贸n

Mostrare como crear una aplicaci贸n web con maven y luego subirlo al App Engine de Google 馃檪

Esta es una instalaci贸n muy b谩sica al final del articulo listare unos recursos mas avanzados.

Para esta ejemplo, tienes que tener previamente instalado maven.

Obtener c贸digo de aplicaci贸n de Google App Engine

Si no tienes cuenta en Google App Engine, puedes crearlo de http://appengine.google.com/.

Una vez creada tu cuenta, crea tu primera aplicaci贸n y anota su c贸digo identificador.

Bajar e instalar Google App Engine

Bajar Google App Engine de http://code.google.com/appengine/downloads.html.

Descomprimirlo en la carpeta de tu preferencia.

  • En linux es generalmente “/usr/local”
  • En windows “c:\Program Files”

Adicionamos al PATH de sistema, la carpeta donde se encuentra el Google App Engine

  • En linux export PATH=/usr/local/appengine-java-sdk-1.2.0/bin:$PATH
  • En windows set PATH=”c:\Program Files\appengine-java-sdk-1.2.0\bin;%PATH%”

Para comprobar que esta instalado ejecutamos el siguiente comando:

  • En linux appcfg.sh version
  • En windows appcfg version

Y obtendremos el siguiente resultado parecido al siguiente:

Release: 1.2.0
Timestamp: Fri Apr 03 17:53:20 BOT 2009
API versions: [1.0]

java.vm.vendor: Sun Microsystems Inc.
java.vm.version: 11.2-b01
java.version: 1.6.0_12
os.name: Linux
os.version: 2.6.27-11-generic

Instalar los jars de Google App Engine en el repositorio de Maven

Una vez comprobado que el Google App Engine esta instalado, es necesario instalar alguna librer铆as de esta en maven.

Vamos a la carpeta donde esta instalado el Google App Engine y ejecutamos las siguientes instrucciones:

mvn install:install-file -Dfile=lib/appengine-tools-api.jar -DgroupId=com.google -DartifactId=appengine-tools -Dversion=1.2.0 -DgeneratePom=true -Dpackaging=jar

mvn install:install-file -Dfile=lib/user/appengine-api-1.0-sdk-1.2.0.jar -DgroupId=com.google -DartifactId=appengine-sdk-1.2.0-api -Dversion=1.2.0 -DgeneratePom=true -Dpackaging=jar

mvn install:install-file -Dfile=lib/shared/appengine-local-runtime-shared.jar -DgroupId=com.google -DartifactId=appengine-local-runtime-shared -Dversion=1.2.0 -DgeneratePom=true -Dpackaging=jar

mvn install:install-file -Dfile=lib/user/orm/datanucleus-appengine-1.0.0.final.jar -DgroupId=org.datanucleus -DartifactId=datanucleus-appengine -Dversion=1.0.0.final -DgeneratePom=true -Dpackaging=jar

Creamos Aplicaci贸n Web con Maven y Modificamos el pom.xml

Ve al directorio donde manejar tus pruebas y ejecuta el siguiente comando:

mvn archetype:create -DgroupId=appengine -DartifactId=holamundo -DarchetypeArtifactId=maven-archetype-webapp

Esto creara una carpeta holamundo y dentro de esta el archivo pom.xml.

Adicionamos las siguientes dependencias al pom.xml

	
	    com.google
	    appengine-tools
	    1.2.0
	    provided
	
	
	    com.google
	    appengine-local-runtime-shared
	    1.2.0
	    provided
	
	
	    com.google
	    appengine-sdk-1.2.0-api
	    1.2.0
	    compile
	

Creamos el archivo appengine-web.xml

Crea el archivo appengine-web.xml y lo colocamos en la carpeta WEB-INF, la misma carpeta donde se encuentra el web.xml.



	id_de_tu_aplicacion
	1
	
	
	 
	
		
	
	

Reemplaza “id_de_tu_aplicacion” por el c贸digo identificador que obtuviste al crear la aplicacion en Google App Engine.

Deploy de la aplicacion en Google App Engine

Ahora construimos la aplicaci贸n con maven.

mvn package

Luego hacemos deploy de la aplicacion a Google App engine.

  • En Linux appcfg.sh update target/holamundo
  • En Windows appcfg update target/holamundo

En el proceso te pedir谩 el password de tu cuenta google y Listo!!! 馃檪

Solo ingresa a tu cuenta Google App Engine y abre la aplicaci贸n. 馃檪

Si tienes comentarios y correcciones no duden a hac茅rmelo saber.

Referencias