SlideShare una empresa de Scribd logo
1 de 134
JRuby on Rails
al rescate de J2EE
  jorge.rodriguez@continuum.cl
 Fundador & CEO de Continuum
  Jornadas regionales de software libre 2009
Java
(Java)
18 años de evolución
Soporte de gigantes
Vendida a muchos clientes
plataforma estable y robusta...
performance
Manejo de la memoria
escalable...
comunidad apasionada
Herramientas, librerías, extensiones
J2EE 5
Do more with less
    work...
Motivación


           Capa dinámica (código de aplicación)
                   (Java / J2EE)


                       Capa Estable
               (servidores de aplicaciones),
                     Alto desempeño

                         (Java)



http://olabini.com/blog/2008/01/language-explorations/
En serio...?
Es un poco más...
J2EE 5, 6,...




 Es un poco más...
de hecho mucho más...
2.8 Megas de
Especificación
JAX-WS 2.0                  EJB 3.0
JDBC                      JMX
             SAAJ
                                JAF 1.1
JAXB 2.0            JNDI
          JSF 2.1                JAAS
JSP 2.1             JTA
           JMS              JSTL
Para construir una
   aplicación...
ambientes de desarrollo pesados
           200 MB
ciclos de desarrollo lentos...
diversos frameworks para resolver los
         mismos problemas...
Escribiendo código de más...
Clientes: resistencia al cambio...
Podemos hacer algo?
Yes, we can !
 but How?
Motivación


                        NO J2EE !
                 Entonces que ?


                       Capa Estable
               (servidores de aplicaciones),
                     Alto desempeño

                         (Java)



http://olabini.com/blog/2008/01/language-explorations/
los protagonistas...
¿ Ruby ?
•   lenguaje abierto
•lenguaje abierto

• dinámico, flexible y muy expresivo
•lenguaje abierto

• dinámico, flexible y muy expresivo

• enfocado en la simplicidad y
 productividad
•   lenguaje abierto

• dinámico, flexible y muy expresivo

• enfocado en la simplicidad y
    productividad

•   versión 1.9.1
• lenguaje abierto

• dinámico, flexible y muy expresivo

• enfocado en la simplicidad y
  productividad

• versión 1.9.1

• bla bla bla...
(comparar con Java)
“Necesito copiar el
  contenido de un
 archivo hacia otro
      archivo”
(java)
(después de google)
FileInputStream input = null;
FileOutputStream output = null;
try {
	 try {
	 	 input = new FileInputStream("/tmp/src.txt");
	 } catch (IOException io1) {
	 	 throw new RuntimeException("couldn't open input file", io1);
	 }
	 try {
	 	 output = new FileOutputStream("/tmp/dest.txt");
	 } catch (IOException io2) {
	 	 throw new RuntimeException("couldn't open output file", io2);
	 }
	 byte[] buf = new byte[8192];
	 int numBytesRead = 0;
	 while ((numBytesRead = input.read(buf)) != -1) {
	 	 output.write(buf, 0, numBytesRead);
	 }
} catch (IOException io) {
	 throw new RuntimeException("couldn't read/write or something",
io);
} finally {
try {
	   	 if (input != null) {
	   	 	 input.close();
	   	 }
	   } catch (IOException ignored1) { }
	   try {
	   	 if (output != null) {
	   	 	 output.close();
	   	 }
	   } catch (IOException ignored2) { }
}
(ruby)
File.open("/tmp/src.txt") do |input|
  File.open("/tmp/dest.txt", "w") do |output|
    output << input.read
  end
end
“Quiero buscar todos los
 usuarios twitters en la
        oración”
(java)
(después de google)
String x = "@j4rs esta en la @jrsl09 mostrando jruby";

Pattern p = Pattern.compile("@w+");
Matcher m = p.matcher(x);

while (m.find()) {
	 System.out.println(m.group());
}
(ruby)
"@j4rs esta en la @jrsl09 mostrando jruby".scan(/@w+/).each do |t|
  puts t
end
“Quiero repetir ‘Hola
  jrsl09’ n veces...”
(java)
int n = 5;
for (int i = 0; i < n; i++) {
	 System.out.println("Hola");
}
(ruby)
n = 5
n.times {puts "Hola jrsl09"}
“Crear la clase
Rectangulo y definir su
        área”
(java)
public class Rectangulo {

	 private double a;
	 private double b;

	   public Rectangulo(int a, int b) {
	   	 this.a = a;
	   	 this.b = b;
	   }

	   /**
	     * @return the a
	     */
	   public double getA() {
	   	 return a;
	   }
	   /**
	     * @param a the a to set
	     */
	   public void setA(double a) {
	   	 this.a = a;
	   }
/**
	     * @return the b
	     */
	   public double getB() {
	   	 return b;
	   }
	   /**
	     * @param b the b to set
	     */
	   public void setB(double b) {
	   	 this.b = b;
	   }

	   /**
	     * @return
	     */
	   public double area() {
	   	 return a*b;
	   }

}
(ruby)
class Rectangulo
	 attr_accessor :a, :b

  def initialize(a, b)
    @a = a;
    @b = b;
  end

  def area()
    a*b
  end

end
“...ruby focus on humans...”


       “...we are masters,
 machines are the slaves...”
¿ JRuby ?
•   Implementación de Ruby 100 % en Java
•Implementación de Ruby 100 % en Java

• Ruby <=> Java
•Implementación de Ruby 100 % en Java

• Ruby <=> Java

• 5 veces más rapida que C-Ruby
•Implementación de Ruby 100 % en Java

• Ruby <=> Java

• 5 veces más rapida que C-Ruby

• Versión estable 1.3 (Comp. Ruby 1.8.7)
•Implementación de Ruby 100 % en Java

• Ruby <=> Java

• 5 veces más rapida que C-Ruby

• Versión estable 1.3 (Comp. Ruby 1.8.7)

• JRuby 1.4 en Octubre (Comp. Ruby 1.9)
(demo: jirb : Swing)
(demo: commons-lang)
¿ Rails ?
• framework web open source
• framework web open source
• construido sobre y para Ruby
• framework web open source
• construido sobre y para Ruby
• orientado al desarrollo ágil
• framework web open source
• construido sobre y para Ruby
• orientado al desarrollo ágil
• una filosofía diferente de crear
  aplicaciones web
• framework web open source
• construido sobre y para Ruby
• orientado al desarrollo ágil
• una filosofía diferente de crear
  aplicaciones web

• “convención sobre configuración...”
• framework web open source
• construido sobre y para Ruby
• orientado al desarrollo ágil
• una filosofía diferente de crear
  aplicaciones web

• “convención sobre configuración...”
• mucho más...
cultura alternativa...
Libertad...
Libertad...




No precisamente este tipo de libertad...
diversión...
(demo: al final)
protagonista final...
+


¿ JRuby on Rails ?
En la unión está la fuerza...
Motivación


           Capa dinámica (código de aplicación)
                      JRuby (Rails)




                       Capa Estable
               (servidores de aplicaciones),
                     Alto desempeño

                         (Java)



http://olabini.com/blog/2008/01/language-explorations/
(Historia real)
El proyecto...
1.Parsear XML
1.Parsear XML

2.Crear prototipo WS-*
1.Parsear XML

2.Crear prototipo WS-*

3.Invocar WS-*
1.Parsear XML

2.Crear prototipo WS-*

3.Invocar WS-*

4.Generar PDFs
1.Parsear XML

2.Crear prototipo WS-*

3.Invocar WS-*

4.Generar PDFs

5.Mensajería asincrona
1.Parsear XML

2.Crear prototipo WS-*

3.Invocar WS-*

4.Generar PDFs

5.Mensajería asincrona

6.HTML + CSS + JS
tiempo = 3 días
Negociamos con el
     cliente
Única restricción:
Debe correr en nuestra
   Infraestructura:
         JAVA
+


JRuby on Rails
24 horas y 150 lineas de
código más tarde estaba
          lista
Un secreto:
Necesitamos migramos la
  aplicación a Java en:

 Una Noche calurosa de
        Miami
demo final:
(JRuby on Rails)
“Social Todo List”
Aplicación Web J2EE
> rails stdl
> rails stdl

> ./script/server
> rails stdl

> ./script/server

> ./script/generate model...
> rails stdl

> ./script/server

> ./script/generate model...

> ./script/generate controller...
> rails stdl

> ./script/server

> ./script/generate model...

> ./script/generate controller...

> jugar un poco con todo_controller e index.html.erb
> rails stdl

> ./script/server

> ./script/generate model...

> ./script/generate controller...

> jugar un poco con todo_controller e index.html.erb

> rake db:migrate
> rails stdl

> ./script/server

> ./script/generate model...

> ./script/generate controller...

> jugar un poco con todo_controller e index.html.erb

> rake db:migrate

> ./script/server
> rails stdl

> ./script/server

> ./script/generate model...

> ./script/generate controller...

> jugar un poco con todo_controller e index.html.erb

> rake db:migrate

> ./script/server

> include LOGGING
> rails stdl

> ./script/server

> ./script/generate model...

> ./script/generate controller...

> jugar un poco con todo_controller e index.html.erb

> rake db:migrate

> ./script/server

> include LOGGING

> jruby -S warble
> rails stdl

> ./script/server

> ./script/generate model...

> ./script/generate controller...

> jugar un poco con todo_controller e index.html.erb

> rake db:migrate

> ./script/server

> include LOGGING

> jruby -S warble

> cp stdl.war $TOMCAT/webapps
Conclusiones
Motivación


           Capa dinámica (código de aplicación)
                   JRuby, Jython, otro...




                       Capa Estable
               (servidores de aplicaciones),
                     Alto desempeño

                         (Java)



http://olabini.com/blog/2008/01/language-explorations/
Poliglotas
¿ Preguntas ?
http://continuum.cl

   twitter: j4rs

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Seminario de DSLs con Groovy
Seminario de DSLs con GroovySeminario de DSLs con Groovy
Seminario de DSLs con Groovy
 
Joinea - mongoDB en php y Symfony2
Joinea - mongoDB en php y Symfony2Joinea - mongoDB en php y Symfony2
Joinea - mongoDB en php y Symfony2
 
Presentacion remobjects
Presentacion remobjectsPresentacion remobjects
Presentacion remobjects
 
Introducción a Node.js
Introducción a Node.jsIntroducción a Node.js
Introducción a Node.js
 
Curso node.js
Curso node.js Curso node.js
Curso node.js
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Ruby en linux
Ruby en linuxRuby en linux
Ruby en linux
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
Introduccion a Nodejs
Introduccion a NodejsIntroduccion a Nodejs
Introduccion a Nodejs
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
Eleva tu capacidad con Groovy
Eleva tu capacidad con GroovyEleva tu capacidad con Groovy
Eleva tu capacidad con Groovy
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
Web services-con-php
Web services-con-phpWeb services-con-php
Web services-con-php
 
Tutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAPTutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAP
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 
9.laravel
9.laravel9.laravel
9.laravel
 
Migración de datos en drupal 8
Migración de datos en drupal 8Migración de datos en drupal 8
Migración de datos en drupal 8
 
Introduccion A Groovy
Introduccion A GroovyIntroduccion A Groovy
Introduccion A Groovy
 
Introducción a Node.js
Introducción a Node.jsIntroducción a Node.js
Introducción a Node.js
 

Destacado

Steves Photos
Steves PhotosSteves Photos
Steves Photos
tacvsp
 
Szkoła podstawowa nr 25 im 2013
Szkoła podstawowa nr 25 im 2013Szkoła podstawowa nr 25 im 2013
Szkoła podstawowa nr 25 im 2013
Marta
 
Presentation3 091014170042 Phpapp01
Presentation3 091014170042 Phpapp01Presentation3 091014170042 Phpapp01
Presentation3 091014170042 Phpapp01
tacvsp
 
Symmetry
SymmetrySymmetry
Symmetry
Marta
 
A new adventure together[1]
A new adventure together[1]A new adventure together[1]
A new adventure together[1]
Marta
 
Hdi R & R External 1
Hdi R & R External 1Hdi R & R External 1
Hdi R & R External 1
tacvsp
 
Patxi errementaria
Patxi errementariaPatxi errementaria
Patxi errementaria
Garazi
 

Destacado (8)

Steves Photos
Steves PhotosSteves Photos
Steves Photos
 
Szkoła podstawowa nr 25 im 2013
Szkoła podstawowa nr 25 im 2013Szkoła podstawowa nr 25 im 2013
Szkoła podstawowa nr 25 im 2013
 
HTML5 - Introducción - Maximiliano Firtman
HTML5 - Introducción - Maximiliano FirtmanHTML5 - Introducción - Maximiliano Firtman
HTML5 - Introducción - Maximiliano Firtman
 
Presentation3 091014170042 Phpapp01
Presentation3 091014170042 Phpapp01Presentation3 091014170042 Phpapp01
Presentation3 091014170042 Phpapp01
 
Symmetry
SymmetrySymmetry
Symmetry
 
A new adventure together[1]
A new adventure together[1]A new adventure together[1]
A new adventure together[1]
 
Hdi R & R External 1
Hdi R & R External 1Hdi R & R External 1
Hdi R & R External 1
 
Patxi errementaria
Patxi errementariaPatxi errementaria
Patxi errementaria
 

Similar a JRuby al Rescate de J2EE

SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
Alvaro Tejada
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
Dani Latorre
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
Manuel Carrasco Moñino
 

Similar a JRuby al Rescate de J2EE (20)

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
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
 
Sesión 03: Ruby y SAP
Sesión 03: Ruby y SAPSesión 03: Ruby y SAP
Sesión 03: Ruby y SAP
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
 
sesion_01-JAVA.pdf
sesion_01-JAVA.pdfsesion_01-JAVA.pdf
sesion_01-JAVA.pdf
 
Jano Gonzalez - jruby
Jano Gonzalez - jrubyJano Gonzalez - jruby
Jano Gonzalez - jruby
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterprise
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
1.introduccion java
1.introduccion java1.introduccion java
1.introduccion java
 
Ruby on the Rails
Ruby on the RailsRuby on the Rails
Ruby on the Rails
 
Java poliglota
Java poliglotaJava poliglota
Java poliglota
 
Webminar: Java como una plataforma Poliglota
Webminar: Java como una plataforma PoliglotaWebminar: Java como una plataforma Poliglota
Webminar: Java como una plataforma Poliglota
 
Lenguajes Dinámicos en la Java Virtual Machine
Lenguajes Dinámicos en la Java Virtual MachineLenguajes Dinámicos en la Java Virtual Machine
Lenguajes Dinámicos en la Java Virtual Machine
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
CommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfectaCommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
 
Dynamic jvm
Dynamic jvmDynamic jvm
Dynamic jvm
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Tendencias en programación con Ruby on Rails
Tendencias en programación con Ruby on RailsTendencias en programación con Ruby on Rails
Tendencias en programación con Ruby on Rails
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (10)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

JRuby al Rescate de J2EE

Notas del editor

  1. Ok, partamos por el mostro !, preguntar cuantos son desarrolladores J2EE.
  2. Esto es lo que tenemos con J2EE, una plataforma muy estable, muy escalable encima de la cual construimos aplicaciones usando tambien una plataforma muy estable y muy escalable.
  3. Ok, partamos por el mostro !, preguntar cuantos son desarrolladores J2EE.
  4. En include LOGGING hablar de commons-logging.jar
  5. En include LOGGING hablar de commons-logging.jar
  6. En include LOGGING hablar de commons-logging.jar
  7. En include LOGGING hablar de commons-logging.jar
  8. En include LOGGING hablar de commons-logging.jar
  9. En include LOGGING hablar de commons-logging.jar
  10. En include LOGGING hablar de commons-logging.jar
  11. En include LOGGING hablar de commons-logging.jar
  12. En include LOGGING hablar de commons-logging.jar
  13. En include LOGGING hablar de commons-logging.jar