RSS

Archivos Mensuales: febrero 2011

Spring Android : Primeros pasos.


Como hemos visto en la anterior entrada, para instalar Spring Android necesitamos gestionar una serie de dependencias externas. Desgraciadamente Android no tiene ningún mecanismo para compilar dependencias externas dentro de un proyecto.

Podríamos añadir las dependencias externas manualmente como ficheros jar e incluirlos en el classpath en Eclipse. Pero manejar dependencias manualmente, como ya sabemos, no es una buena idea (una discusión al respecto). Por lo tanto vamos a desarrollar nuestros proyectos Spring Android incluyendo Maven Android Plugin. Para ello incluiremos un fichero pom.xml que se encargue de gestionar estas dependencias externas. Así vamos a poder arrancar nuestras aplicaciones Android desde línea de comando con Maven ó si lo preferimos tenemos un plugin para Eclipse, STS u otro IDE que nos permite trabajar con Maven en nuestros proyectos Spring Android desde nuestro IDE favorito.

El fichero pom.xml que vamos a incluir en nuestros proyectos tiene un par de cosas que merecen ser explicadas para configurar el Maven Android Plugin.

  • Los proyectos Android son desplegados en el dispositivo como ficheros apk en lugar de jar. Esto se hace indicando apk como packaging en el pom.xml.
apk
  • Además para incluir el plugin Maven Android a nuestros proyecto tendremos que incluir en el elemento build de nuestro pom.xml la siguiente entrada. Podemos ver que añadimos los plugin para Maven Android y Maven Compiler. El SDK de mi proyecto como podemos ver corresponde a la versión 2.1.
<build>

<finalName>${project.artifactId}</finalName>

 <sourceDirectory>src</sourceDirectory>
 <plugins>
 <plugin>
 <groupId>com.jayway.maven.plugins.android.generation2</groupId>
 <artifactId>maven-android-plugin</artifactId>
 <version>2.8.4</version>
 <configuration>
 <sdk>
 <platform>7</platform>
 </sdk>
 <emulator>
<avd>avd_2.1</avd>
</emulator>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>

Una vez añadidos los plugins, necesitamos incluir las dependencias externas que añaden la funcionalidad a nuestro RestTemplate para hacer JSON marshalling, XML marshalling ó RSS y Atom feed.

<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>2.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-rest-template</artifactId>
<version>1.0.0.BUILD-SNAPSHOT</version>
</dependency>
<dependency>
<!-- Using Jackson for JSON marshaling -->
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>

<!-- Using Simple for XML marshaling -->
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>2.4.1</version>
<exclusions>
<exclusion>
<artifactId>stax</artifactId>
<groupId>stax</groupId>
</exclusion>
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>stax</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>

<!-- Using Android ROME for RSS and ATOM feeds -->

<groupId>com.google.code.android-rome-feed-reader</groupId>
<artifactId>android-rome-feed-reader</artifactId>
<version>1.0.0-r2</version>
</dependency>
</dependencies>

<repositories>

<!-- For developing with Android ROME Feed Reader -->

<repository>
<id>android-rome-feed-reader-repository</id>
<name>Android ROME Feed Reader Repository</name>
<url>https://android-rome-feed-reader.googlecode.com/svn/maven2/releases</url>
</repository>

<!-- For testing against latest Spring snapshots -->

<repository>
<id>org.springframework.maven.snapshot</id>
<name>Spring Maven Snapshot Repository</name>
<url>http://maven.springframework.org/snapshot</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>

<!-- For developing against latest Spring milestones -->

<repository>
<id>org.springframework.maven.milestone</id>
<name>Spring Maven Milestone Repository</name>
<url>http://maven.springframework.org/milestone</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>

</repositories>

Finalmente para desplegar aplicaciones con el plugin de Maven Android necesitamos añadir a nuestro PATH la ruta a nuestra carpeta tools y platform-tools que tengamos en nuestra versión del SDK. Hecho esto tenemos todo listo para ejecutar por primera vez nuestra aplicación de Android desde Maven.  Hay varios ejemplos colgados del repositorio de Spring Source para Spring Android. En mi caso he utilizado un pequeño trozo de código que viene como ejemplo básico y que permite buscar un término en Google. Como no me quería complicar mucho la vida de momento he mandado al log el resultado de la búsqueda.

RestTemplate restTemplate = new RestTemplate();
String url = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q={query}";
String result = restTemplate.getForObject(url, String.class, "hop2croft");
Log.d(TAG,result);

Y ahora sólo queda:
1. construir la aplicación:

$ mvn clean install

2. arrancar el emulador con el dispositivo AVD que hayamos incluido en nuestro pom.xml:

$ mvn android:emulator-start

3. desplegar la aplicación en el emulador:

$ mvn android:deploy

4. como en nuestro caso queremos ver el log, lo vamos a arrancar:

$ adb logcat

La salida que produce nuestra aplicación es la siguiente.

02-27 11:14:43.084: DEBUG/MyActivity(215): {"responseData": {"results":[{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://lanyrd.com/2011/spring-io/writeups/","url":"http://lanyrd.com/2011/spring-io/writeups/","visibleUrl":"lanyrd.com","cacheUrl":"http://www.google.com/search?q\u003dcache:1xfPou-ZIakJ:lanyrd.com","title":"Write-ups from Spring I/O 2011, 17th-18th February 2011 | Lanyrd","titleNoFormatting":"Write-ups from Spring I/O 2011, 17th-18th February 2011 | Lanyrd","content":"18 Feb 2011 \u003cb\u003e...\u003c/b\u003e Write-up Spring IO 2011 día 2 « hop2croft\u0026#39;s Blog (\u003cb\u003ehop2croft\u003c/b\u003e.wordpress.com). from   Spring I/O 2011, 17th-18th February 2011. Added 3 days ago \u003cb\u003e...\u003c/b\u003e"},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://lanyrd.com/2011/spring-io/coverage/","url":"http://lanyrd.com/2011/spring-io/coverage/","visibleUrl":"lanyrd.com","cacheUrl":"http://www.google.com/search?q\u003dcache:Fg3pLG-Gc-YJ:lanyrd.com","title":"Coverage of Spring I/O 2011, 17th-18th February 2011 | Lanyrd","titleNoFormatting":"Coverage of Spring I/O 2011, 17th-18th February 2011 | Lanyrd","content":"18 Feb 2011 \u003cb\u003e...\u003c/b\u003e Write-up Spring IO 2011 día 2 « hop2croft\u0026#39;s Blog (\u003cb\u003ehop2croft\u003c/b\u003e \u003cb\u003e...\u003c/b\u003e"},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://sourceforge.net/projects/eclipse-ccase/forums/forum/167189","url":"http://sourceforge.net/projects/eclipse-ccase/forums/forum/167189","visibleUrl":"sourceforge.net","cacheUrl":"http://www.google.com/search?q\u003dcache:yYWKrfxd5LAJ:sourceforge.net","title":"SourceForge.net: Clearcase plugin for Eclipse: Topics for Help","titleNoFormatting":"SourceForge.net: Clearcase plugin for Eclipse: Topics for Help","content":"where\u0026#39;s the cc api??? 2, \u003cb\u003ehop2croft\u003c/b\u003e, 2010-10-15 06:33:43 UTC. Monitor Subscribe \u0026middot;   Need a way to create and associate activity \u003cb\u003e...\u003c/b\u003e"},{"GsearchResultClass":"GwebSearch","unescapedUrl":"https://hop2croft.wordpress.com/2011/02/21/spring-io-2011-dia-2/","url":"https://hop2croft.wordpress.com/2011/02/21/spring-io-2011-dia-2/","visibleUrl":"hop2croft.wordpress.com","cacheUrl":"http://www.google.com/search?q\u003dcache:gNiClj8frpsJ:hop2croft.wordpress.com","title":"Spring IO 2011 día 2 « hop2croft\u0026#39;s Blog","titleNoFormatting":"Spring IO 2011 día 2 « hop2croft\u0026#39;s Blog","content":"febrero 21, 2011 por \u003cb\u003ehop2croft\u003c/b\u003e … y ahora seguimos con el segundo día … que   empezo con la keynote In search of the grail of developer productivity – A   Grails \u003cb\u003e...\u003c/b\u003e"}],"cursor":{"pages":[{"start":"0","label":1},{"start":"4","label":2},{"start":"8","label":3},{"start":"12","label":4}],"estimatedResultCount":"16","currentPageIndex":0,"moreResultsUrl":"http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf8\u0026source\u003duds\u0026start\u003d0\u0026hl\u003den\u0026q\u003dhop2croft"}}, "responseDetails": null, "responseStatus": 200}

Si lo que queremos es lanzar nuestra app Android desde un IDE tipo Eclipse necesitamos instalar el Maven Integration for Android Development Tools que integra Maven Android Plugin, ADT y m2eclipse. Para su instalación recomiendo echarle un ojo a la siguiente dirección. Sólo tienes que instalar los plugins como te dice la guía, activar las dependencias de nuestro proyecto para Maven y lanzar nuestra aplicación.
Si hace tiempo que te has perdido o quieres ver de forma más precisa todo el proceso para añadir Maven a Spring Android te recomiento que leas esta entrada. En ella me he basado para escribir este post.

Espero que os haya servido para acercaros a Spring Android.

NOTAS:

– De momento estoy editando con el editor Web de WordPress. La verdad es que es un poco engorroso y hay cosas que me gustaría corregir, como por ejemplo la identación en los trozos de código que se pegan. Buscaré algún editor que haga todo más fácil pero si hay alguien que me recomiende alguno soy todo oídos.

– Antes de instalar el plugin de Maven Android en un IDE estuve dándole vueltas a cual elegir. Normalmente desarrollo en Android con Eclipse 3.6, pero últimamente he estado haciendo otras cosas con STS. Sin embargo en la página de Eclipse observé que había un IDE especial para desarrollo móvil llamado Eclipse Pulsar. Me decidí a instalarlo y cual fue mi sorpresa al ver qué sólo viene por defecto los frameworks para Blackberry, Motorola y Nokia. ¿Cuál es el sentido de tener un IDE específico para desarrollo móvil si el OS más utilizado actualmente, iOS aparte, no está presente?. Finalmente lo instalé en Eclipse 3.6.

 
4 comentarios

Publicado por en 27 febrero, 2011 en Android

 

Etiquetas: , , , ,

Spring Android: Breve Introducción.


En este post voy a hablar sobre Spring Android ya que fue la opción más votada de la anterior entrada, gracias a la única persona que votó :).
Dentro del grupo de proyectos en los que está involucrado Spring podemos ver que hay dos que están enfocados al desarrollo de aplicaciones sobre dispositivos móviles, Spring Mobile y Spring Android. Mientras que Spring Mobile extiende Spring MVC para desarrollar aplicaciones web en dispositivos móbiles, Spring Android se centra en el desarrollo de aplicaciones Android nativas.
Por el momento vamos a explicar un poco como funciona Spring Android y dar algunos ejemplos, Spring Mobile quedará para otro post. Para las pruebas voy a utilizar la versión Spring Android 1.0.0.M2. El componente principal de Spring Android es el cliente REST llamado RestTemplate. Al crear una nueva instancia de RestTemplate el constructor establece una serie de objetos que hacen posible la funcionalidad para dicho cliente REST. Los objetos son los siguientes:

  • HttpComponents HttpClient 4.x.  Es el cliente http nativo para Android.  El cliente está disponible a partir de la factoria establecida por defecto HttpComponentsClientHttpRequestFactory.
  • JSON Marshalling.  La funcionalidad requerida para realizar JSON marshalling viene dada por la clase MappingJacksonHttpMessageConverter de la librería externa Jackson JSON Proccesor. Hay que tener en cuenta que sólo tendremos acceso a la clase MappingJacksonHttpMessageConverter si previamente hemos añadido las dependencias a Jackson JSON Proccesor en nuestro classpath.
  • XML Marshalling. La funcionalidad de XML marshalling viene dada por otra librería externa que hay que añadir como dependencia en nuestro classpath. Utilizamos la librería Simple XML Serializer y la clase SimpleXmlHttpMessageConverter para ello.
  • RSS and Atom feed support. Al igual que los dos anteriores, necesitamos una librería externa. En este caso Android RomE Feed Reader junto a las clases SyndFeedHttpMessageConverter, RssChannelHttpMessageConverter y AtomFeedHttpMessageConverter.

Tras esta breve introducción tenemos que preparar nuestro entorno para desarrollar con Spring Android. Lo veremos en la siguiente entrada.

     
    5 comentarios

    Publicado por en 27 febrero, 2011 en Android

     

    Etiquetas: , , , , , , , ,

    ¿De qué prefereis que escriba?


    Buenas,

    tengo un par de ideas para los siguientes posts. Me gustaría que votaráis y eligieraís entre las opciones que más o menos barajo. Si hay algún otra cosa, por favor, comentarlo y trataré de hablar de ello también.

    Un saludo.

     
    Deja un comentario

    Publicado por en 23 febrero, 2011 en Encuestas

     

    Etiquetas: , ,

    Spring IO 2011 día 2


    … y ahora seguimos con el segundo día …

    que empezo con la keynote In search of the grail of developer productivity – A Grails roadmap update por Graeme Roche. En ella nos hablo (mitad español / mitad inglés) de las nuevas funcionalidades de Grails 1.3.7 , disponible desde hace unos pocos días. Puso especialmente enfasis en como se ha integrado Grails 1.3.7 con las nuevas BBDD noSQL. Lamentablemente no pudimos ver los ejemplos por problemas en la red al bajar las dependencias de los proyectos que traía. Aún así fue una charla bastante amena.

    En la siguiente charla, Aplicaciones web ultraescalables con Redis por Alberto Gimeno, tuvimos que cambiar de sala. Un apunte de ello, no sé cuanta gente iba a las charlas de Groovy/Grails pero tengo la sensación de que no tantas como a las de Spring. Por lo que me hubiera parecido más lógico que las charlas de Spring se hubieran seguido llevado a cabo en el salón de actos. Dicho esto, la charla fue de las más divertidas de Spring IO. No sólo eso, sino que sirvió para entrar más en harina de una base de datos noSQL.

    Spring Mobile y Spring Android: Spring y el desarrollo para móviles por
    Daniel Jiménez Pérez de idealista.com fue el siguiente paso. En esta charla más que con lo que se dijo de Spring Mobile ó Spring Android en sí, me quedo con lo que nos contó acerca de como idealista.com está enfocando los nuevos desarrollos en Android, iPhone ó iPad. A veces cuando hay nuevas tecnologías es díficil saber hacia donde va ir algo y hacer una elección adecuada a ello.

    Seguimos, vaya tostón me está quedando … . Lo siguiente fue Spring Web Services: REST vs. SOAP de Sam Brannen. Me gustó menos está exposición que la del día anterior. Quizá no fui capaz de ver la idea general de la charla pero me parecía menos clara que la que hizó el día anterior. De todas formas Spring Web Services me parece uno de los proyectos más interesantes de Spring. Lo seguiré atentamente.

    Las dos siguientes charlas fueron Hadoop por Miguel Ángel Pastor Olivar y Introducing Summer – The HTML5 Library for Java and Scala por Rostislav Hristov. De la segunda poco que decir la verdad. Fue bastante soporifera.
    Sin embargo, la de Spring Hadoop estuvo bastante bien. Hubo una introducción sobre Hadoop,(aviso) no es una bbdd noSQL sino una herramienta para tratar información con procesos batch. Se nos mostró un ejemplo sobre como arrancar Hadoop desde cero, bastante sencillo por cierto. Y finalmente, tras la charla, quien quiso pudo acercarse a ver el funcionamiento en real de Hadoop. Me gustó bastante, quizá porque he trabajado con procesamiento en paralelo. Por cierto, ya lo tengo instalado en mi equipo, pero eso será ya otro post ;).

    No fui a ninguna de la última ronda de charlas. Tenía pensado ir a la de Grails Sans SQL por Graeme Rocher pero alteraron el orden de las charlas. Pusieron Tuning your Grails applications por Peter Ledbrook. La verdad que tenía también buena pinta pero entre que me había concienziado para ir a la otra, que era Viernes por la tarde y que había quedado para más tarde preferí plegar velas y volver a casa.

    Como resumen, muy buen evento. Mejor que el año pasado, pero espero que peor que el del año que viene :).

     
    Deja un comentario

    Publicado por en 21 febrero, 2011 en Charlas

     

    Etiquetas: , , , , , , , , , , , , ,

    Spring IO 2011 día 1


    Un año después vuelvo a escribir sobre el evento de Spring anual organizado por la gente de JavaHispano. Este año a diferencia del año pasado el evento duró un par de días, lo cual se agradece porque hay un montón de temas interesantes y es díficil cubrirlos en un solo día.

    Había dos tipos de itinerarios, por así decirlo, el primero centrado en el mundo Spring y el segundo en Groovy/Grails. Además había una tercera opción, talleres. Mi principal interés eran las charlas de Spring (fui a todas menos una), aunque también tengo que decir que me hubiera gustado ir a alguna de Grails o asistir a alguno de los talleres.

    Así pues comenzamos …

    La primera charla, Spring in 2011 and Beyond: From Java EE 6 to Cloud Computing, corrió a cargo de Jurgen Hoeller. En ella nos explicó las nuevas características dadas por Spring 3.1 y introdujo lo que está por llegar. La charla empezó con algunas referencias a la situación actual en el desarrollo software como la importancia que están cobrando las bases de datos noSQL o como aprovechar realmente una programación concurrente.
    Tras ello se centro en las nuevas características de Spring 3.1. Me llamó la atención la posibilidad de configurar los beans de distinta forma en función del entorno de trabajo en el que nos encontremos, muy útil. Desde una propiedad externa a nuestro fichero de despliegue podremos definir en que entorno estamos y decidir la configuración en cada caso. Otras nuevas características son como configurar tu aplicación mediante anotaciones, facilitar la creación mediante constructores desde un nuevo namespace o el hecho de poder insertar cache declarativamente mediante inyección y anotaciones. De lo que está por llegar me gusto la idea de mejorar la gestión del ciclo de vida de una aplicación.

    La siguiente charla fue llevada a cabo por la gente de escuela de Groovy. Sinceramente creo que había stands fuera de la sala de conferencias para los partners, y si tenías interés en la empresa en cuestión podías acercarte y preguntar. No creo que este tipo de eventos estén enfocados a estas presentaciones, que según la persona que subió a la tarima “no había preparado demasiado” sic.

    Tras la primera pausa vino la exposición sobre Spring Data dada por Costin Leau. Diré que en términos generales fue la exposición que más me gustó del todo evento. Habló principalmente de noSQL y de los distintos tipos de nuevas bases de datos que están surgiendo para cumplir las expectativas que no puede cubrir las bases de datos relacionales. Bases de datos como Redis, MongoDB, neo4j, … solucionan  y dan solución a distintos tipos de problemas donde no llega el SQL. Tengo que decir que no sólo estuvo bien la presentación sino que también fue un acierto por parte de la organización ponerla de las primeras. Ya que nos sirvió como introducción de otras charlas que hablaban estos temas.

    Sergi Almar fue el siguiente ponente. Nos habló de Spring AMQP, y se centró especialmente de la implementación RabbitMQ.  La necesidad de sistemas de integración como Spring AMQP se basa en que necesitamos conectar diferentes sistemas con formatos heterogéneos, y como son las distintas formas de desacoplar dichos sistemas. También habló de otros aspectos como balanceo de carga, escalabilidad, problemas de latencia, … . Tras ello se centró en ciertas características propias de RabbitMQ. La charla fue muy instructiva y fue una de las mejores de las hechas en español.

    Sam Brannen dió Effective out-of-container Integration Testing. Como el nombre de la charla indica se centró en como podemos probar nuestras aplicaciones dejando a un lado los recursos externos a nuestra aplicación. Se nos presentró los distintos tipos de test a realizar y nos comentó distintos tipos de mocks que podemos usar para simular nuestras aplicaciones sin necesidad de los verdaderos recursos.

    David Gómez, de extrema-sistemas, fue el encargado de la siguiente charla “Pruebas de aplicaciones web con Selenium 2 y Webdriver“. Creo que junto a la charla de Spring Data fue la mejor de todo el evento. Se centró en que facilidades nos da Selenium y Webdriver para depurar nuestra aplicación web, a nivel de la vista de usuario. No conocía ninguno de las dos herramientas y la verdad es que fue una exposición muy interesante y entretenida. Se ve que se la había currado y todos los ejemplos fueron muy útiles.

    Las dos últimas charlas del día fueron Spring Social por Federico Caro de Paradigma Tecnológico y Spring Puzzlers por Erick Camacho y de nuevo Sergi Almar.
    De la primera comentar que es agradable saber que Spring tiene un proyecto en el que se pretende hacer más fácil la integración de las distintas redes sociales que tanta importancia tienen actualmente. Al igual que con la de David Gómez, esta charla fue muy amena y pudimos ver con ejemplos muy sencillos como crear algo desde cero basandonos en lo que nos da Spring Social.
    Spring Puzzlers fue la única charla realmente interactiva de todo el evento (no estuve en la mesa redonda del segundo día, sorry). En ella se iban proponiendo preguntas al público y éste tenía que contestar. Tras ello se resolvía la pregunta y se explicaba el porqué. Bastante entretenido, aunque también es verdad que ser la última charla del día no ayudó demasiado.

     
    Deja un comentario

    Publicado por en 20 febrero, 2011 en Charlas

     

    Etiquetas: , , , , ,

     
    A %d blogueros les gusta esto: