jano gonzalez - jruby

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

Upload: startech-conference

Post on 22-Nov-2014

1.188 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Jano Gonzalez - jruby

Ruby en un mundo enterpriseJRuby

Jano GonzálezDesarrolladorhttp://janogonzalez.com

Page 2: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

Java EE

Page 4: Jano Gonzalez - jruby

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

Page 5: Jano Gonzalez - jruby

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

Page 6: Jano Gonzalez - jruby

El problema

Page 7: Jano Gonzalez - jruby

Exceso de complejidad

Page 8: Jano Gonzalez - jruby
Page 9: Jano Gonzalez - jruby
Page 10: Jano Gonzalez - jruby

Lo bueno

Page 11: Jano Gonzalez - jruby

Portabilidad

Page 12: Jano Gonzalez - jruby

Escalabilidad

Page 13: Jano Gonzalez - jruby

Multithreading

Page 14: Jano Gonzalez - jruby

JIT

Page 15: Jano Gonzalez - jruby

Garbage Collector

Page 16: Jano Gonzalez - jruby

La solución

Page 17: Jano Gonzalez - jruby
Page 18: Jano Gonzalez - jruby

:DcRuby para la JVM

Page 19: Jano Gonzalez - jruby

:DcDinámico

Page 20: Jano Gonzalez - jruby

:DcOrientado a Objetos

Page 21: Jano Gonzalez - jruby

Gran soporte para meta-programación

Page 22: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

Modificando clases ya existentes

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

(1..100).even

Page 29: Jano Gonzalez - jruby

Accediendo a clases Java

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

d = Date.newd.to_gmt_string

Page 30: Jano Gonzalez - jruby

Accediendo a clases Java

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

Page 31: Jano Gonzalez - jruby

Comandos

Intérprete$ jruby

REPL$ jirb

Administrador de paquetes$ jgem

Page 32: Jano Gonzalez - jruby

Gemas

Precaución: No todas funcionan en Jruby

Page 33: Jano Gonzalez - jruby

Encontrando la gema adecuada

Page 34: Jano Gonzalez - jruby

Guerra de guerrillas

Page 35: Jano Gonzalez - jruby

Fase I

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

Page 36: Jano Gonzalez - jruby

Fase II

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

Page 37: Jano Gonzalez - jruby

JRuby on Rails

Page 38: Jano Gonzalez - jruby

JRuby on Rails

$ gem install rails$ rails new startechconf

Page 39: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

Usa modo multithread production.rb

# Enable threaded mode config.threadsafe!

Page 41: Jano Gonzalez - jruby

La magia que hay detrás

● jruby-rack● activerecord-jdbc-adapter

Page 42: Jano Gonzalez - jruby

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: Jano Gonzalez - jruby

Integración con Spring

Page 44: Jano Gonzalez - jruby

Integración con Spring

● Usa un initializer para cargar el ApplicationContext

Page 45: Jano Gonzalez - jruby

Deploy en tu appserver preferido

Page 46: Jano Gonzalez - jruby

$ warble

Page 47: Jano Gonzalez - jruby

warbler

Page 48: Jano Gonzalez - jruby

Conclusión

Page 49: Jano Gonzalez - jruby
Page 50: Jano Gonzalez - jruby

Más información

Page 51: Jano Gonzalez - jruby

Más información

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

Page 52: Jano Gonzalez - jruby

¡Gracias!