SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
JRuby
Ruby en un mundo enterprise




Jano González
Desarrollador
http://janogonzalez.com
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/dynla
    ngchile/
●   Publica el blog
    http://gemaroja.com
●   Músico frustrado
Java EE
● 1999: J2EE 1.2
● 2001: J2EE 1.3

● 2003: J2EE 1.4

● 2006: Java EE 5

● 2009: Java EE 6
● Spring
● Hibernate

● iBatis

● Guice

● ...
El problema
Exceso de complejidad
Lo bueno
Portabilidad
Escalabilidad
Multithreading
JIT
Garbage Collector
La solución
Ruby para la JVM
      :Dc
Dinámico
   :Dc
Orientado a Objetos
        :Dc
Gran soporte para meta-
     programación
Todo es un objeto

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

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

# Hasta el nulo es un objeto
nil.nil?
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 }
Con métodos muy cool

# En realidad + es un método, no un operador
1.+(9)

# Con un poco de azucar sintáctico
1 + 9

# En otros objetos
"Hola " + "Mundo"

# Con una gran cantidad de objetos!
[1, 2, 3] + [4, 5]
Bloques


# Un método puede recibir un bloque de código
5.times do
  |n| puts n
end

# Para casos cortos como el anterior...
5.times { |n| puts n }
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(:+)
Creando tus propias clases
# Problem Java?
class Persona
  attr_reader :nombre, :apellido

  def initialize(nombre, apellido)
    @nombre = nombre
    @apellido = apellido
  end
end

jano = Persona.new("Jano", "González")
jano.nombre
Modificando clases ya existentes

# Monkey patching
class Range
  def even
    self.select { |n| n % 2 == 0 }
  end
end

(1..100).even
Accediendo a clases Java


# Importando clases Java
require 'java'
java_import 'java.util.date'

d = Date.new
d.to_gmt_string
Accediendo a clases Java



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

Intérprete
$ jruby

REPL
$ jirb

Administrador de paquetes
$ jgem
Gemas




Precaución: No todas funcionan en Jruby
Encontrando la gema adecuada
Guerra de guerrillas
Fase I


● Usar jirb como REPL Java
● Ant/Maven → Apache Buildr

● Scripts en general

● Junit/Selenium → RSpec, Cucumber
Fase II



● Servicios REST con Sinatra
● DSLs para facilitar uso de bibliotecas Java

● Aplicaciones Web con Ruby on Rails
JRuby on Rails
JRuby on Rails



$ gem install rails
$ rails new startechconf
Configura tu database.yml
development:
  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
Usa modo multithread production.rb



# Enable threaded mode
config.threadsafe!
La magia que hay detrás



● jruby-rack
● activerecord-jdbc-adapter
Precaución



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



●   Usa un initializer para cargar el ApplicationContext
Deploy en tu appserver
      preferido
$ warble
warbler
Conclusión
Más información
Más información


● http://jruby.org
● @headius

● @nicksieger

● @janogonzalez      O RLY?
¡Gracias!

Más contenido relacionado

La actualidad más candente (14)

Serializacion de objetos en java
Serializacion de objetos en javaSerializacion de objetos en java
Serializacion de objetos en java
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Django
DjangoDjango
Django
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Etiquetas en JSP
Etiquetas en JSPEtiquetas en JSP
Etiquetas en JSP
 
Jvmmx docker jvm
Jvmmx docker jvmJvmmx docker jvm
Jvmmx docker jvm
 
Etiquetas jsp
Etiquetas jspEtiquetas jsp
Etiquetas jsp
 
Grails
GrailsGrails
Grails
 
Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScript
 
Introducción a groovy & grails
Introducción a groovy & grailsIntroducción a groovy & grails
Introducción a groovy & grails
 
Java
JavaJava
Java
 
Groovy.v2
Groovy.v2Groovy.v2
Groovy.v2
 
Sinatra
SinatraSinatra
Sinatra
 
Rubyonline
RubyonlineRubyonline
Rubyonline
 

Similar a JRuby: Ruby en un mundo enterprise

Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficacia
Software Guru
 
Java para android developers
Java para android developersJava para android developers
Java para android developers
jose diaz
 

Similar a JRuby: Ruby en un mundo enterprise (20)

JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Java12
Java12Java12
Java12
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficacia
 
HackDay Java 9 Spanish version
HackDay Java 9 Spanish versionHackDay Java 9 Spanish version
HackDay Java 9 Spanish version
 
JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?
 
Ruby i
Ruby iRuby i
Ruby i
 
Javascript
JavascriptJavascript
Javascript
 
Java para android developers
Java para android developersJava para android developers
Java para android developers
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programación
 
sesion_01-JAVA.pdf
sesion_01-JAVA.pdfsesion_01-JAVA.pdf
sesion_01-JAVA.pdf
 
Java world
Java worldJava world
Java world
 
¿Por qué Ruby? Descubre su expresividad (y peculiaridades)
¿Por qué Ruby? Descubre su expresividad (y peculiaridades)¿Por qué Ruby? Descubre su expresividad (y peculiaridades)
¿Por qué Ruby? Descubre su expresividad (y peculiaridades)
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRails
 
Alta disponibilidad con MySQL
Alta disponibilidad con MySQLAlta disponibilidad con MySQL
Alta disponibilidad con MySQL
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
JAVA3.0
JAVA3.0JAVA3.0
JAVA3.0
 

Más de Jano González

Más de Jano González (12)

Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Vim FTW!
Vim FTW!Vim FTW!
Vim FTW!
 
Ruby
RubyRuby
Ruby
 
A Little RSpec
A Little RSpecA Little RSpec
A Little RSpec
 
Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)
 
Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1
 
Curso de Spring: Transacciones
Curso de Spring: TransaccionesCurso de Spring: Transacciones
Curso de Spring: Transacciones
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Curso de Spring: Beans
Curso de Spring: BeansCurso de Spring: Beans
Curso de Spring: Beans
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a Sinatra
 

Último

editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
ssusere34b451
 

Último (20)

editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
avancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudaavancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayuda
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptx
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el tema
 

JRuby: Ruby en un mundo enterprise