sábado, 5 de septiembre de 2009

Lenguajes Scripts en Spring.

La desventaja de los lenguajes compilados, es que si quisiéramos hacer un cambio, para que se aplique este cambio hay que volver a compilar. No estoy diciendo nada nuevo, en java por ejemplo se usan archivos xml para hacer dinámicamente cambios. Hay situaciones en las cuales necesitamos hacer cambios dinámicos en nuestra aplicación pero no podemos recompilar. La solución es cantada usar algún lenguaje script.

Imaginemos que tengo toda mi arquitectura en java, y se nos presenta el problema anterior. Bueno spring nos permite ejecutar beans escritos en lenguaje script.

Vamos a desarrollar un ejemplo. Vamos a programar el famoso saludador:

package com.emanuel.prueba;

public class Saludador {

public void saludar {

this.saludo.decirHola();

}

private Saludo saludo;

public void setSaludo(Saludo saludo) {

this.saludo = saludo;

}

}

El Saludador tiene un Saludo el cual se inyecta con spring.

package com.emanuel.prueba;

public interfaz Saludo {

void decirHola();

}

Ahora inyectémosle al Saludador el Saludo.

<bean id=”elSaludador” class=”com.emanuel.prueba.Saludador” >

<property name=”saludo” ref=”saludo” />

< /bean>

Hasta ahora no hemos hecho nada nuevo, lo único que nos falta es implementar la interfaz Saludo, y lo vamos a hacer en JRuby.

Para programar beans scripts spring nos permite elegir entra JRuby, Groovy , BenShell y Jython. Para el ejemplo voy a usar JRuby:

class Saludo

def decirHola

puts “Holasssss amigos”

end

end

Saludo.new

Una cosa muy importante es la ultima línea ya que es lo que nos va a dar una instancia de Saludo. Ahora a decirle a spring que tenemos nuestro bean implementado con otro JRuby.

< beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:lang="http://www.springframework.org/schema/lang"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/lang

http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">


< lang:jruby id="saludo"

script-source="classpath:dondeDejeElarchivo/saludo.rb "

script-interfaces=” com.emanuel.prueba.Saludo”

refresh-check-delay=”5000” />


< /beans>


Y listo!!

Existe un tag para cada lenguaje: lang:jruby, lang:groovy, lang:bsh, etc.

El atributo refresh-check-delay indica cada cuantos mili segundos se va a actualizar el codigo, lo que permitira que nuestros cambios se vean reflejados.

Todo esto lo podemos hacer gracias a la magia de spring!!!