Usar Gradle Wrapper para evitar instalar Gradle

 

Gradle es una excelente herramienta de construcción. Podría ser en conjunto son SBT las mas avanzadas en Java. Durante los años se ha aprendido mucho de la experiencia de herramientas similares como Ant y Maven. Gradle y SBT han sabido aprovechar muy bien esta experiencia para beneficio de nosotros los desarrolladores.

Gradle es relativamente nuevo, muy poca gente lo conoce y puede ser que en algunas situaciones sea impedimento su uso, por que algo tan simple como tenerlo instalado, no ocurre. La gente que desarrollo Gradle pensó en casos en los cuales puedes compartir tu proyecto, pero sin necesidad de instalarlo cuando compartes tu proyecto (en tu maquina si debes tenerlo instalado primero). Esto es fantástico porque por un lado, evitas que la gente que usa tu proyecto, instale Gradle; también es posible que tu proyecto use o requiera cierta versión especifica de Gradle, usando el fabuloso Gradle Wrapper, no tienes porque preocuparte.

Para que esto funcione solo tienes que crear un archivo de configuración de Gradle, generalmente se llama build.gradle. El contenido de este archivo debe tener solo una tarea, como a continuación se muestra:

 

task createWrapper(type: Wrapper) {
    gradleVersion = '1.0-milestone-4'
}

 

Lo que vemos arriba es la definición de una tarea que se llama createWrapper (se puede llamar como tu quieras), que es de tipo Wrapper. Esta tarea lo único que define es la versión de Gradle, que vas a necesitar en tu proyecto. Aquí puede ser cualquier versión valida de Gradle.

A continuación en una terminal de tu sistema ejecutas a Gradle con el siguiente comando en el directorio donde esta tu archivo build.gradle:

 

gradle createWrapper

 

Este comando invoca a la versión de Gradle que tengas en tu maquina instalado, que bien puede ser diferente de la versión que especificaste en tu proyecto. Ya había mencionado que cuando creas el proyecto es requisito tener instalado Gradle, el Gradle Wrapper evita que al compartir tu proyecto debas previamente instalar Gradle. Al terminar de ejecutarse Gradle te habrá dejado en el directorio donde esta tu proyecto los siguientes archivos y carpetas:

 

  • gradle. Carpeta que contiene un jar con las clases necesarias para ejecutar el Gradle Wrapper
  • gradlew. Shell script para sistemas que usen una variante de UN*X
  • gradlew.bat. Archivo por lotes para Windows

 

Cuando compartas tu proyecto solo sera necesario que en lugar de usar el comando gradle, usen gradlew, si no tienen la versión de Gradle, el Wrapper lo descargara de internet y lo instalara (solo descomprime un ZIP en tu directorio home) para que sea usado en tu proyecto.

Así puedes seguir añadiendo mas tareas o plugins a tu build de Gradle o actualizar la versión de Gradle y no forzar a las demás personas que instalen antes de usar tu proyecto. Gradle Wrapper hara ese trabajo.

 

Respaldos de MySql con Groovy, Amazon S3 y Grape

 

En SynergyJ estamos migrando poco a poco nuestra infraestructura a Amazon EC2 para los servidores, por otro lado ya llevamos casi 3 años usando Amazon S3 y es un servicio que vale mucho la pena. Amazon S3 es un servicio muy simple y barato para almacenar información publica y privada.

La información de nuestras bases de datos es vital y por lo tanto es bien necesario que tengamos que hacer respaldo de nuestras bases de bases para evitar perdida de información. Yo considero que un buen plan de respaldos debe contener lo siguiente

 

  • 100% Automatizado
  • El respaldo debe estar seguro, tanto a nivel privacidad como de disponibilidad

 

Seguramente habrá mas características, pero por el momento es lo que mas me importa y es en lo que me puse a trabajar para solucionar este problema en nuestra infraestructura. Como mencione antes, Amazon S3 es un servicio de almacenaje de archivos que es muy confiable, casi al 100 %, por lo tanto pensé en generar el respaldo y guardarlo en Amazon S3 de tal manera que lo tengamos disponible en cuanto se necesite.

Existen muchas soluciones muy simples que permiten respaldar una base de datos de mySql y guardarlo en Amazon S3, pero quise ponerme a trabajar un poco en hacer una propia herramienta de respaldo, y pues pensé hacerlo en Groovy ya que no encontré algo similar.

Bien, con Groovy fue muy sencillo hacer el dump de mySql, la clase que hace el respaldo en Groovy es la siguiente:

class MySqlBackuper {
	def host = 'localhost'
	def user = 'root'
	def password = ''
	def database = ''

	def doBackup() {
		def filename = "$database-${System.currentTimeMillis()}"
		def sqlfilename = "${filename}.sql"
		def zipfilename = "${filename}.gz"

		println "Trying Backup, database='$database' with '$user' in file $zipfilename"
		//This is the command to perform the dump via mySql tools
		def command = "mysqldump --opt --user=${user} --password=${password} ${database}"

		def dump = command.execute()
		dump.waitFor()

		new File(sqlfilename).write(dump.text)

		//AntBuilder is awesome, cool to have it in runtime, not only in develoment time
		def ant = new AntBuilder()
		//Create the Gzip file
		ant.gzip zipfile:zipfilename, src:sqlfilename
		ant.delete file:sqlfilename
		
		//return the GZip filename
		zipfilename
	}
}

 

Para subir el archivo del dump de mySql a Amazon S3, necesitábamos usar el API de Amazon S3 para realizarlo, en Java existen varias librerías, a mi juicio la mas adecuada es JetS3T, es muy sencilla de usar, solo es necesario ponerla en el classpath y listo. El poner un jar en el classpath puede parecer algo sencillo, pero hay varias cosas a considerar, entre ellas, pues bajarla de algún lugar y dejarla disponible en el classpath.

Los chicos de Groovy pensamos en alguna manera sencilla de que las clases mismas definan que librerías necesiten, ¡en el mismo código!, de tal manera que el código mismo se encargue de obtener (descargar) la librería si es necesario y cargarla en el classpath, sin necesidad de escribir archivos de build o scripts que se encarguen de ello. En Groovy existe algo llamado transformaciones AST, que permiten que en tiempo de compilación el código de byte vaya con algunas modificaciones, solo con usar anotaciones. Revisen este tema de Groovy que esta super interesante.

La anotación que hace la magia en Groovy es @Grab, que hace maravillas, como ir al repositorio de jars de Maven y descargarse la librería que le indiques y ponerla en el classpath sin esfuerzo, es bien importan

te mencionar que no siempre va a descargarla a internet, solo la descarga la primera vez.

La clase que programe en Groovy para guardar archivos en Amazon S3 es la siguiente, chequen el uso de la anotación @Grab

@Grab(group='net.java.dev.jets3t', module='jets3t', version='0.7.2')
class S3Storer {
	def awsAccessKey
	def awsSecretKey
	private def awsCredentials = null
	private def s3Service = null
	
	/**
	 * 
	 */
	def storeFile(file, bucketName) {
		
		def object = new org.jets3t.service.model.S3Object(new File(file))
		def bucket = getS3Service().getBucket(bucketName)
		
		if(bucket) {
			println "Storing $file on $bucketName wait a moment please..."
			def storedFile = s3Service.putObject(bucket, object);
			println "Successfully upload $file"
			storedFile
		} else {
			println "the bucket $bucketName cant be found."
			null
		}
		
	}
	
	private def getCredentials() {
		if(!awsCredentials)  {
			awsCredentials = new org.jets3t.service.security.AWSCredentials(awsAccessKey, awsSecretKey);
		}
		awsCredentials
	}
	
	private def getS3Service() {
		if(!s3Service)  {
			s3Service = new org.jets3t.service.impl.rest.httpclient.RestS3Service(getCredentials())
		}
		s3Service
	}
}

 

El paso final es juntar la clase que hace respaldos de mySql y la clase que sube archivos a Amazon S3 para que unas cuantas lineas podamos programar el respaldo y almacenaje de la base de datos. Todo en unas cuantas lineas¡¡¡¡

//Here you can provide the database, password, even the username to perform the backup in gzip
def sqlDatabasefile = new MySqlBackuper(database:'databaseName', username:'user', password:'yourPassword').doBackup()

println 'Performing MySql Backup to Amazon S3'

def storer = new S3Storer(awsAccessKey:'', awsSecretKey:'')
// The filename and the bucket name
def f = storer.storeFile(sqlDatabasefile, 'yourBucketName')

 

Espero les haya gustado el código esta disponible en mi cuenta de GitHub por si le voy agregando mejoras, como diversos tipos de respaldos y mas flexibilidad para Amazon S3

 

G2One es comprada por SpringSource

En un movimiento inesperado para muchos, SpringSource ha comprado la empresa detrás del desarrollo de Groovy y Grails, G2One.

En un comunicado oficial SpringSource ha hecho publica la noticia, así mismo, han publicado un FAQ en PDF; por su cuenta Guillaume Laforge y Graeme Rocher han publicado en sus respectivos blogs la noticia.

Sin duda Groovy&Grails, son un par de tecnologías líderes en su nicho y así mismo lo hace notar SpringSource en su comunicado: "el resurgimiento de lenguajes dinámicos, y los innovadores frameworks de web basados en estos lenguajes, han cambiado drásticamente el paisaje, ofreciendo más potentes y más eficientes maneras de desarrollar aplicaciones de negocio. Groovy, Grails, y proyectos de código abierto como Spring, han cambiado el ecosistema de Java por el aumento de la productividad y aceleramiento del desarrollo de aplicaciones de misión crítica"

Hace algunos meses cuando se dio el cambio de política de mantenimiento, Graeme Rocher mencionaba que no había problema con eso con Grails, que tenían buenas relaciones y que el no veía problema alguno con la decisión de SpringSource. Ahora nos queda mas claro el tipo de relación que ya se venia cocinando de meses atrás. Sin duda este movimiento ha sido muy importante para que Groovy&Grails tengan un despunte mayor en el corporativo dado que SpringSource dará soporte a nivel empresarial al parecido como lo hace con sus demás productos del portafolio de Spring y productos asociados.

SpringSource menciona que no cambiara la licencia de Groovy&Grails, y con respecto a la política de mantenimiento menciona que: "SpringSource siempre intenta encontrar un equilibrio entre la mejora de la productividad de mantenimiento de los proyectos a disposición de la comunidad lo más amplia posible y la financiación del desarrollo de nuevas innovaciones para los proyectos. Podemos anticipar que no habrá necesidad de introducir una política de Groovy, pero futuras liberaciones de Grails es probable que se entreguen junto con las liberaciones de Spring, si una política se introduce SpringSource trabajará en estrecha colaboración con la comunidad para hacer que tenga sentido"

Un punto mas a favor de Groovy&Grails y para que sea adoptado por las empresas, sin duda este movimiento denota mucha confianza en ambas tecnologías y de como han cambiado la perspectiva del desarrollador Java.

Para nuestra comunidad SpringHispano.org es un gusto ver como nuestra otra comunidad hermana Grails.org.mx, tienen ahora una relación mucho más estrecha y relacionada todavía. En ambas comunidades seguiremos impulsando la difusión y soporte a estas tecnologías.

Actualización:

Rod Jhonson ha publicado en el Team Blog de SpringSource su perspectiva de la reciente adquisición

Que viene en Spring 3.0

Matt Raibble ha escrito en su blog una entrada en la cual pone a disposición las laminas que utilizara en la charla titulada "What's Coming in Spring 3.0" para el Colorado Software Summit.

Entrevista con Rod Johnson sobre la historia de Spring

 Paso desapercibida esta entrevista despues del rollo del cambio de política de liberaciones.

Creo que vale mucho la pena leer la entrevista y el podcast asociado porque nos cuenta Rod como concebío la idea de Spring, y como se ha ido desarrollando.

Espero les interese.

La entrevista aqui

Spring @ Fonasol

Tenia pendiente desde hace mucho tiempo, poner aqui las laminas de la presentación que hice sobre Spring en el Foro Nacional de Software Libre en Coatzacoalcos, Veracruz, México.

Espero a alguien le resulte interesante

 

 

 

Le "inyectan" 15 Millones USD a SpringSource

Apenas me entero que el pasado 26 de Junio le "inyectaron" a SpringSource 15 millones de USD. Esta vez la inversión vino a través de Accel Partners y de Benchmark Capital.

"estamos muy contentos de que Accel Partners se unan a nuestro equipo de inversionistas junto con Benchmark Capital, dos de los inversionistas más respetados en capital de riesgo y ambos con un amplio registro de éxito notable," dijo Rod Johnson

Ahora esto como nos "afecta"? Yo creo que SpringSource va a tratar de adquirir algunas otras empresas de OpenSource, así como abrir nuevas oficinas y contratar gente nueva. Lo que nos traerá posiblemente un fortalecimiento en el  portafolio Spring y sobre todo en Springsource Application Platform.

Creo que este tipo de inversiones muestran como el OpenSource es un modelo de negocio rentable. Algunas de las reacciones pueden ver en:

http://www.springsource.com/node/393

http://bill.burkecentral.com/2008/07/09/springsource-goes-for-15m-more/

http://venturebeat.com/2008/06/25/springsource-raises-15m-for-java-infrastructure/

Bien por SpringSource, el futuro de SpringFramework y su portafolio se ve muy "iluminado" y con enorme potencial tanto económico como técnico.

 

SpringOne 2008

Ya estan disponibles las presentaciones del SpringOne 2008. 

Hay cosas bastante interesantes, espero les sea de utilidad.

http://www.springone.com/pages/viewpageattachments.action?decorator=normal&pageId=1212485

Grails @ SG08

El lunes fue un día algo movido, primero la llegada temprana a la oficina, me desmañane :P

A las 11:00 am me fui a Centro Banamex al Google Developers Days 2008, estuve en tres charlas, de la cual en la primera llegue tarde y estuve poco tiempo. Después de la keynote, estuve vagando buscando a alguien conocido y me encontré con D, fuimos al almuerzo que dio Google y esperamos la siguiente charla que fue sobre AppEngine. No me gusto mucho esa charla, tal pareciera que Amazon comploteo la charla porque ninguna demo salio bien.

Al terminar esa charla continuo una muy interesante dobre GWT, al speaker lo reconoci por su voz, ya que escucho su podcast JavaPosse. Dick Wall nos dio una muy amena charla introductoria a GWT, me gusto mucho, pero tuve que irme porque a las 4 debia estar en el Sheraton del Centro Historico en SG08.

Llegue barriendome al Sheraton, justo llegue, me pusieron el micrófono y me subí a platicar sobre Grails. La charla estuvo muy fluida, trate temas basicos sobre Groovy y Grails y mostre algunos videos.

Si desean pueden ver los slides aqui:

 

Fue un día movido.

SpringSource tambien es ahora un AppServer Vendor

Cuando SpringSource adquirio hace tiempo a Covalent se venia venir que algo mas estaba detrás de ese movimiento. Lo llegue a comentar con JJ, pero ahora es una realidad que podemos empezar a probar.

Se trata de un AppServer basado en Tomcat, con soporte a OSGI para tareas como logging, bootstrapping, classloading, etc. Como nota interesante por el momento solo soporta WAR, ya que es un Servidor de Aplicaciones sin JEE, interesante.

Las reacciones en la industria se pueden ver en sitio como InfoQ, el mismo sitio de SpringSource o algunos bloggers..

Sin duda es otra opción en el mundo Java de la que podemos elegir, hay que ver como la industria reacciona a este movimiento y sobre todo a los desarrolladores y arquitectos si están dispuestos a apostar por este nuevo enfoque. Estamos viendo una nueva etapa en el desarrollo empresarial con Spring.

Por mi parte estaré probando la beta disponible desde el día de hoy y ver que me ofrece de mas. Mis experiencias por aquí las posteare.

Páginas