JRuby: Ruby en un mundo enterprise
Post on 21-Jun-2015
1109 Views
Preview:
DESCRIPTION
Transcript
Ruby en un mundo enterpriseJRuby
Jano GonzálezDesarrolladorhttp://janogonzalez.com
Sobre mi
@janogonzalez
● Desarrollando en Java desde 2000, enamorado de Ruby en 2010
● Co-organizador del Meetup de Lenguajes Dinámicos: http://www.meetup.com/dynlangchile/
● Publica el blog http://gemaroja.com
● Músico frustrado
Java EE
● 1999: J2EE 1.2● 2001: J2EE 1.3● 2003: J2EE 1.4● 2006: Java EE 5● 2009: Java EE 6
● Spring● Hibernate● iBatis● Guice● ...
El problema
Exceso de complejidad
Lo bueno
Portabilidad
Escalabilidad
Multithreading
JIT
Garbage Collector
La solución
:DcRuby para la JVM
:DcDinámico
:DcOrientado a Objetos
Gran soporte para meta-programación
Todo es un objeto
# El clásico string“Hola Mundo”.upcase
# No hay "tipos primitivos"!5.zero?
# Hasta el nulo es un objetonil.nil?
Hay muchos tipos de objetos# Arreglos
[1, 2, 3, 4, 5]
# Hashes
{:jano => "Alejandro", :cote => "José"}
# Rangos(1..10)
# Expresiones regulares/^[a-z]+$/
# Lambdas
lambda { |n| n * 2 }
Con métodos muy cool
# En realidad + es un método, no un operador1.+(9)
# Con un poco de azucar sintáctico1 + 9
# En otros objetos"Hola " + "Mundo"
# Con una gran cantidad de objetos![1, 2, 3] + [4, 5]
Bloques
# Un método puede recibir un bloque de código5.times do |n| puts nend
# Para casos cortos como el anterior...5.times { |n| puts n }
Bloques
# El clásico map(1..100).map { |n| n * 2 }
# El clásico select(1..100).select { |n| n % 3 == 0 }
# El clásico reduce(1..100).reduce { |sum, n| sum + n }
# Incluso más corto(1..100).reduce(:+)
Creando tus propias clases
# Problem Java?class Persona attr_reader :nombre, :apellido def initialize(nombre, apellido) @nombre = nombre @apellido = apellido endend
jano = Persona.new("Jano", "González")jano.nombre
Modificando clases ya existentes
# Monkey patchingclass Range def even self.select { |n| n % 2 == 0 } endend
(1..100).even
Accediendo a clases Java
# Importando clases Javarequire 'java'java_import 'java.util.date'
d = Date.newd.to_gmt_string
Accediendo a clases Java
Date d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_string
Comandos
Intérprete$ jruby
REPL$ jirb
Administrador de paquetes$ jgem
Gemas
Precaución: No todas funcionan en Jruby
Encontrando la gema adecuada
Guerra de guerrillas
Fase I
● Usar jirb como REPL Java● Ant/Maven → Apache Buildr● Scripts en general● Junit/Selenium → RSpec, Cucumber
Fase II
● Servicios REST con Sinatra● DSLs para facilitar uso de bibliotecas Java● Aplicaciones Web con Ruby on Rails
JRuby on Rails
JRuby on Rails
$ gem install rails$ rails new startechconf
Configura tu database.ymldevelopment: adapter: jdbcmysql database: startechconf_development username: root encoding: utf8
test: adapter: jdbcmysql database: startechconf_test username: root encoding: utf8
production: adapter: jdbc jndi: jdbc/stconrails
Usa modo multithread production.rb
# Enable threaded mode config.threadsafe!
La magia que hay detrás
● jruby-rack● activerecord-jdbc-adapter
Precaución
● Si usas un servidor Java EE 1.4 (Por ej. WAS 6.1) debes usar jruby-rack 1.0.0.1
Integración con Spring
Integración con Spring
● Usa un initializer para cargar el ApplicationContext
Deploy en tu appserver preferido
$ warble
warbler
Conclusión
Más información
Más información
● http://jruby.org● @headius● @nicksieger● @janogonzalez O RLY?
¡Gracias!
top related