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

JRuby: Ruby en un mundo enterprise

Jun 21, 2015

Download

Technology

Jano González

Presentación realizada en StarTechConf 2011
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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!