juantomas Hacking the planet

14 marzo, 2015

Scalatra para impacientes: Como montar un proxy de Elastic Search en 3 minutos

Un proxy puede ser un buen ejemplo de microservicio para construir con Scalatra. Un proxy es un servicio que normalmente recoge peticiones y las traslada a otro servicio. Si hay respuesta de este servicio se la devuelve al que empezó la llamada.

Habitualmente además se añaden algunas cosas que el servicio original no implementa como pueden ser: validación de usuarios, estadísticas de uso, agregación de información, simplificación de interfaces, tareas de servicio, capa de administración, etc.

En nuestro caso vamos a implementar un proxy contra Elastic Search con Scalatra en menos de 3 minutos ;-P

Eso si con algunos requisitos:

* Deberías tener instalado Scala. Si no lo tienes aquí tienes un mini tutorial de como instalar scala estilo shotgun.

* Si ya tienes instalado Scalatra todavía lo haremos en menos tiempo. Si no este manual de como instalar Scalatra para impacientes   te ayudará a hacerlo en un par de minutos.

Y ahora llega la mejor parte, tenemos dos opciones:

a) hacerlo de cero. Buscar toda la documentación de Scalatra, Interface REST de Elastic Search, etc, etc.

b) Clonar este proyecto de github, configurarlo y aprender como con unas cuantas lineas de Scalatra montamos un proxy de Elastic Search y los configuramos a nuestra medida y necesidades.

Por supuesto vamos a escoger la opción B que nos mete en el partido en 3 minutos.

1) clonar el proyecto de ejemplo de proxy para Elastic Search usando Scalatra:

git clone https://github.com/nfb-onf/nfbsearch-scalatra.git

2) Configurar el URI de conexión a tu Servidor de elastic Search (linea 35)

$ cd NFBSearch-Scalatra
$ vi src/main/scala/ca/nfb/NFBSearchServlet.scala

3) hacer un build del proyecto y lanzarlo.
$ ./sbt
> container:start
> browse

Lo que más me gusta de usar Scalatra es lo sencillo que es implementar una acción:

  get("/search") {                                                     
    contentType = formats("json")                                      
    val q:String = params("q")                                         
    val httpClient = new HttpClient                                    
    val response: Response = httpClient.get(new URL("http://localhost:9200/nfb_films/films/_search?q=" + q))          
    response.body.asString                                             
  }                     

Incluso alguien con poca experiencia con Scala/Scalatra sería capaz de leer y modificar este código.

Es puro código suscinto sin ningún tipo de ceremonia, lo explica muy bien Javier Lafora, nuestro CTO en ASPGems en su post sobre por que usamos ruby y rails en ASPGems como tecnología web y tiene muchos puntos en común con «Por que usamos Scala para hacer Big Data en ASPGems» (este todavía no está escrito!!! 😉 )

«Scala is Love»

Agradecer a los usuarios de la cuenta de github «nfb-onf» que me ha ahorrado un par de horas del plan A con su maravillosa y gratuita contribución a la comunidad. Muchas Gracias!!! os debo unas cervezas!!

28 febrero, 2015

Scalatra para impacientes: Como instalarlo

Filed under: ASPgems,Hacks,Proyectos,scala — Etiquetas: , , , — juantomas @ 12:08 pm

Hace unos años descubrí  Sinatra. El 95% de los proyectos que hacía era con Ruby on Rails. Había veces que simplemente tenía que implementar un API REST y aunque se podía hacer con Rails, tenía la sensación que estaba matando moscas a cañonazos.

Entonces le eché un vistazo a Sinatra y descubrí que viniendo de Rails y Ruby, era la herramienta perfecta para hacer cosas como un API o un pequeño interface e incluso cosas más complejas pero sin llegar a toda la potencia y complejidad de Rails.

Como sabéis ahora hago muchas más cosas con Scala y con Apache Spark pero sigo teniendo la necesidad de resolver la misma clase de problemas que no necesitan un framework como Play (el Ruby on . La mejor solución desde mi punto de vista es Scalatra.

Scalatra es un clon de sinatra escrito en Scala con todas las ventajas del lenguaje (OO, Funcional, reactivo, actores, etc).

Como instalamos scalatra:

Requisitos: 

* Necesitas tener el JDK 

Si haces esto puedes comprobar si ya lo tienes instalado y que versión tienes.

$ java -version
java version "1.7.0_10"
OpenJDK Runtime Environment (IcedTea6 1.11.1) build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b094, mixed mode)

 

$ javac -version
javac 1.7.0_10

 

Si no lo tienes instalado o es una versión menor que la 1.7, recomiendo que instales el java 7 siguiendo las instrucciones de esta página.
* Instalate giter8 

Giter8 es una utilidad para generar proyectos de scala. Básicamente usa las plantillas para proyectos que ha creado la comunidad. Más adelante lo utilizaremos para generar la estructura de nuestro primer proyecto con Scalatra.

Para instalarlo primero instalamos conscript:

 

curl https://raw.githubusercontent.com/n8han/conscript/master/setup.sh | sh

 

Esto te creará un directorio bin en tu directorio home: ~/bin

En este directorio instalará el programa, para incluirlo en tu PATH de ejecución añade al .bash_profile o .bashrc estas dos lineas:

PATH=$PATH:~/bin
export PATH

y luego ejecuta esto para que te actualice tu entorno.

source ~/.bash_profile # (Mac)
source ~/.bashrc       # (Linux)

Ahora vamos a usar conscript para instalar giter8. Conscript se encargará de bajarse además todas las dependencias que necesita giter8.

 

cs n8han/giter8

Con esto ya tienes lo que necesitas para generar tu primer proyecto con Scalatra.

Vía: página oficial de escalatra. 

 

Powered by WordPress