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

JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

Jun 21, 2015

Download

Technology

Jano González

Slides de mi presentación en RubyConf Uruguay 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 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!