jruby: ruby en un mundo enterprise

52
Ruby en un mundo enterprise JRuby Jano González Desarrollador http://janogonzalez.com

Upload: jano-gonzalez

Post on 21-Jun-2015

1.112 views

Category:

Technology


4 download

DESCRIPTION

Presentación realizada en StarTechConf 2011

TRANSCRIPT

Page 1: JRuby: Ruby en un mundo enterprise

Ruby en un mundo enterpriseJRuby

Jano GonzálezDesarrolladorhttp://janogonzalez.com

Page 2: JRuby: Ruby en un mundo enterprise

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

Page 3: JRuby: Ruby en un mundo enterprise

Java EE

Page 4: JRuby: Ruby en un mundo enterprise

● 1999: J2EE 1.2● 2001: J2EE 1.3● 2003: J2EE 1.4● 2006: Java EE 5● 2009: Java EE 6

Page 5: JRuby: Ruby en un mundo enterprise

● Spring● Hibernate● iBatis● Guice● ...

Page 6: JRuby: Ruby en un mundo enterprise

El problema

Page 7: JRuby: Ruby en un mundo enterprise

Exceso de complejidad

Page 8: JRuby: Ruby en un mundo enterprise
Page 9: JRuby: Ruby en un mundo enterprise
Page 10: JRuby: Ruby en un mundo enterprise

Lo bueno

Page 11: JRuby: Ruby en un mundo enterprise

Portabilidad

Page 12: JRuby: Ruby en un mundo enterprise

Escalabilidad

Page 13: JRuby: Ruby en un mundo enterprise

Multithreading

Page 14: JRuby: Ruby en un mundo enterprise

JIT

Page 15: JRuby: Ruby en un mundo enterprise

Garbage Collector

Page 16: JRuby: Ruby en un mundo enterprise

La solución

Page 17: JRuby: Ruby en un mundo enterprise
Page 18: JRuby: Ruby en un mundo enterprise

:DcRuby para la JVM

Page 19: JRuby: Ruby en un mundo enterprise

:DcDinámico

Page 20: JRuby: Ruby en un mundo enterprise

:DcOrientado a Objetos

Page 21: JRuby: Ruby en un mundo enterprise

Gran soporte para meta-programación

Page 22: JRuby: Ruby en un mundo enterprise

Todo es un objeto

# El clásico string“Hola Mundo”.upcase

# No hay "tipos primitivos"!5.zero?

# Hasta el nulo es un objetonil.nil?

Page 23: JRuby: Ruby en un mundo enterprise

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 }

Page 24: JRuby: Ruby en un mundo enterprise

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]

Page 25: JRuby: Ruby en un mundo enterprise

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 }

Page 26: JRuby: Ruby en un mundo enterprise

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(:+)

Page 27: JRuby: Ruby en un mundo enterprise

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

Page 28: JRuby: Ruby en un mundo enterprise

Modificando clases ya existentes

# Monkey patchingclass Range def even self.select { |n| n % 2 == 0 } endend

(1..100).even

Page 29: JRuby: Ruby en un mundo enterprise

Accediendo a clases Java

# Importando clases Javarequire 'java'java_import 'java.util.date'

d = Date.newd.to_gmt_string

Page 30: JRuby: Ruby en un mundo enterprise

Accediendo a clases Java

Date d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_string

Page 31: JRuby: Ruby en un mundo enterprise

Comandos

Intérprete$ jruby

REPL$ jirb

Administrador de paquetes$ jgem

Page 32: JRuby: Ruby en un mundo enterprise

Gemas

Precaución: No todas funcionan en Jruby

Page 33: JRuby: Ruby en un mundo enterprise

Encontrando la gema adecuada

Page 34: JRuby: Ruby en un mundo enterprise

Guerra de guerrillas

Page 35: JRuby: Ruby en un mundo enterprise

Fase I

● Usar jirb como REPL Java● Ant/Maven → Apache Buildr● Scripts en general● Junit/Selenium → RSpec, Cucumber

Page 36: JRuby: Ruby en un mundo enterprise

Fase II

● Servicios REST con Sinatra● DSLs para facilitar uso de bibliotecas Java● Aplicaciones Web con Ruby on Rails

Page 37: JRuby: Ruby en un mundo enterprise

JRuby on Rails

Page 38: JRuby: Ruby en un mundo enterprise

JRuby on Rails

$ gem install rails$ rails new startechconf

Page 39: JRuby: Ruby en un mundo enterprise

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

Page 40: JRuby: Ruby en un mundo enterprise

Usa modo multithread production.rb

# Enable threaded mode config.threadsafe!

Page 41: JRuby: Ruby en un mundo enterprise

La magia que hay detrás

● jruby-rack● activerecord-jdbc-adapter

Page 42: JRuby: Ruby en un mundo enterprise

Precaución

● Si usas un servidor Java EE 1.4 (Por ej. WAS 6.1) debes usar jruby-rack 1.0.0.1

Page 43: JRuby: Ruby en un mundo enterprise

Integración con Spring

Page 44: JRuby: Ruby en un mundo enterprise

Integración con Spring

● Usa un initializer para cargar el ApplicationContext

Page 45: JRuby: Ruby en un mundo enterprise

Deploy en tu appserver preferido

Page 46: JRuby: Ruby en un mundo enterprise

$ warble

Page 47: JRuby: Ruby en un mundo enterprise

warbler

Page 48: JRuby: Ruby en un mundo enterprise

Conclusión

Page 49: JRuby: Ruby en un mundo enterprise
Page 50: JRuby: Ruby en un mundo enterprise

Más información

Page 51: JRuby: Ruby en un mundo enterprise

Más información

● http://jruby.org● @headius● @nicksieger● @janogonzalez O RLY?

Page 52: JRuby: Ruby en un mundo enterprise

¡Gracias!