YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Ruby en un mundo enterpriseJRuby

Jano GonzálezDesarrolladorhttp://janogonzalez.com

Page 2: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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

Fila 1 Fila 2 Fila 3 Fila 40

2

4

6

8

10

12

Columna 1

Columna 2

Columna 3

Page 3: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

El mundo enterprise

Page 4: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 5: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Java EE

Page 6: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

● 1999: J2EE 1.2● 2001: J2EE 1.3● 2003: J2EE 1.4● 2006: Java EE 5● 2009: Java EE 6 → Un paso en la dirección correcta...

Versiones

Page 7: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

● Spring● Hibernate● iBatis● Guice● Jboss Seam● ...

Frameworks

Page 8: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

● JBoss● Tomcat● Weblogic● Websphere● ...

Servidores de aplicaciones

Page 9: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

El problema

Page 10: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Exceso de complejidad

Page 11: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 12: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Lo bueno

Page 13: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 14: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Portabilidad

Page 15: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Escalabilidad

Page 16: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Multithreading

Page 17: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

JIT

Page 18: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Garbage Collector

Page 19: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

La solución

Page 20: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 21: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

:DcRuby para la JVM

Page 22: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

:DcDinámico

Page 23: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

:DcOrientado a Objetos

Page 24: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Gran soporte para meta-programación

Page 25: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Java

List<String> nombres = Arrays.asList("Jano", "Ian", "Juanelo", "Peyuco");

Collections.sort(nombres, new Comparator<String>() { public int compare(String x, String y) { return x.length() - y.length(); }});

for (String nombre : nombres) { System.out.println(nombre);}

Page 26: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Ruby

nombres = ["Jano","Ian","Juanelo","Peyuco"]

nombres.sort! { |x, y| x.length <=> y.length }

nombres.each { |nombre| puts nombre }

Page 27: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Javapublic interface DuckLike { String cuack();}

.

.

.

public void doSomething(DuckLike duckLike) { . . . duckLike.cuack(); }

Page 28: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Ruby

def do_something(obj) if obj.respond_to? :cuack obj.cuack else … endend

Page 29: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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 30: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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 31: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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 32: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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 33: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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 34: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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 35: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Modificando clases ya existentes

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

(1..100).even

Page 36: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Accediendo a clases Java

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

d = Date.newd.to_gmt_string

Page 37: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Accediendo a clases Java

Date d = new Date(); => d = Date.new

d.toGMTString() => d.to_gmt_string

Arrays.asList() => Arrays::as_list

Page 38: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Comandos

Intérprete$ jruby

REPL$ jirb

Administrador de paquetes$ jgem

Page 39: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Gemas

Precaución: No todas funcionan en Jruby

Page 40: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Encontrando la gema adecuada

Page 41: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Dime que versión de Java usas y te diré quién eres

Page 42: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Java 7

Page 43: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 44: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Java 6

Page 45: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 46: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Java 5

Page 47: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 48: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Java <= 1.4

Page 49: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 50: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Guerra de guerrillas

Page 51: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Fase I

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

Page 52: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Fase II

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

Page 53: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

JRuby on Rails

Page 54: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

JRuby on Rails

$ gem install rails$ rails new startechconf

Page 55: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

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 56: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Usa modo multithread production.rb

# Enable threaded mode config.threadsafe!

Page 57: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

La magia que hay detrás

● jruby-rack● activerecord-jdbc-adapter

Page 58: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Precaución

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

Page 59: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Integración con Spring

Page 60: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Integración con Spring

● Usa un initializer para cargar tu $CLASSPATH● Usa un initializer para cargar el ApplicationContext

Page 61: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Deploy en tu appserver preferido

Page 62: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

$ warble

Page 63: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

warbler

Page 64: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Otras opciones

Page 65: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

trinidad

Page 66: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 67: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

TorqueBox

Page 68: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 69: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

¿y si ya uso Ruby?

Page 70: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

No seas GIL

Page 71: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

No seas GIL

Page 72: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Bibliotecas interesantes

● ROFLScale con Netty o Apache Mina● Actores remotos con Akka

Page 73: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Bibliotecas menos interesantes

● Reportes iPDF● Excel con POI

Page 74: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Políglota extremo

● STM de Clojure

Page 75: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Conclusión

Page 76: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 77: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 78: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Más información

Page 79: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Más información

● http://jruby.org● https://github.com/jruby● https://github.com/nicksieger/refactoring-to-rails

Page 80: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Más información

● @headius● @nicksieger● @janogonzalez O RLY?

Page 81: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

@janogonzalez

Page 82: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Page 83: JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

¡Gracias!


Related Documents