JRuby al Rescate de J2EE

1,708 views

Published on

Motivación: Usar Java como soporte de aplicaciones y JRuby on Rails como plataforma de desarrollo !...

Published in: Technology, Education
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
1,708
On SlideShare
0
From Embeds
0
Number of Embeds
666
Actions
Shares
0
Downloads
23
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide
  • Ok, partamos por el mostro !, preguntar cuantos son desarrolladores J2EE.
  • 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.
  • Ok, partamos por el mostro !, preguntar cuantos son desarrolladores J2EE.
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • En include LOGGING hablar de commons-logging.jar
  • JRuby al Rescate de J2EE

    1. 1. JRuby on Rails al rescate de J2EE jorge.rodriguez@continuum.cl Fundador & CEO de Continuum Jornadas regionales de software libre 2009
    2. 2. Java
    3. 3. (Java)
    4. 4. 18 años de evolución
    5. 5. Soporte de gigantes
    6. 6. Vendida a muchos clientes
    7. 7. plataforma estable y robusta...
    8. 8. performance
    9. 9. Manejo de la memoria
    10. 10. escalable...
    11. 11. comunidad apasionada
    12. 12. Herramientas, librerías, extensiones
    13. 13. J2EE 5
    14. 14. Do more with less work...
    15. 15. 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/
    16. 16. En serio...?
    17. 17. Es un poco más...
    18. 18. J2EE 5, 6,... Es un poco más...
    19. 19. de hecho mucho más...
    20. 20. 2.8 Megas de Especificación
    21. 21. 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
    22. 22. Para construir una aplicación...
    23. 23. ambientes de desarrollo pesados 200 MB
    24. 24. ciclos de desarrollo lentos...
    25. 25. diversos frameworks para resolver los mismos problemas...
    26. 26. Escribiendo código de más...
    27. 27. Clientes: resistencia al cambio...
    28. 28. Podemos hacer algo?
    29. 29. Yes, we can ! but How?
    30. 30. Motivación NO J2EE ! Entonces que ? Capa Estable (servidores de aplicaciones), Alto desempeño (Java) http://olabini.com/blog/2008/01/language-explorations/
    31. 31. los protagonistas...
    32. 32. ¿ Ruby ?
    33. 33. • lenguaje abierto
    34. 34. •lenguaje abierto • dinámico, flexible y muy expresivo
    35. 35. •lenguaje abierto • dinámico, flexible y muy expresivo • enfocado en la simplicidad y productividad
    36. 36. • lenguaje abierto • dinámico, flexible y muy expresivo • enfocado en la simplicidad y productividad • versión 1.9.1
    37. 37. • lenguaje abierto • dinámico, flexible y muy expresivo • enfocado en la simplicidad y productividad • versión 1.9.1 • bla bla bla...
    38. 38. (comparar con Java)
    39. 39. “Necesito copiar el contenido de un archivo hacia otro archivo”
    40. 40. (java)
    41. 41. (después de google)
    42. 42. 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 {
    43. 43. try { if (input != null) { input.close(); } } catch (IOException ignored1) { } try { if (output != null) { output.close(); } } catch (IOException ignored2) { } }
    44. 44. (ruby)
    45. 45. File.open("/tmp/src.txt") do |input| File.open("/tmp/dest.txt", "w") do |output| output << input.read end end
    46. 46. “Quiero buscar todos los usuarios twitters en la oración”
    47. 47. (java)
    48. 48. (después de google)
    49. 49. 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()); }
    50. 50. (ruby)
    51. 51. "@j4rs esta en la @jrsl09 mostrando jruby".scan(/@w+/).each do |t| puts t end
    52. 52. “Quiero repetir ‘Hola jrsl09’ n veces...”
    53. 53. (java)
    54. 54. int n = 5; for (int i = 0; i < n; i++) { System.out.println("Hola"); }
    55. 55. (ruby)
    56. 56. n = 5 n.times {puts "Hola jrsl09"}
    57. 57. “Crear la clase Rectangulo y definir su área”
    58. 58. (java)
    59. 59. 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; }
    60. 60. /** * @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; } }
    61. 61. (ruby)
    62. 62. class Rectangulo attr_accessor :a, :b def initialize(a, b) @a = a; @b = b; end def area() a*b end end
    63. 63. “...ruby focus on humans...” “...we are masters, machines are the slaves...”
    64. 64. ¿ JRuby ?
    65. 65. • Implementación de Ruby 100 % en Java
    66. 66. •Implementación de Ruby 100 % en Java • Ruby <=> Java
    67. 67. •Implementación de Ruby 100 % en Java • Ruby <=> Java • 5 veces más rapida que C-Ruby
    68. 68. •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)
    69. 69. •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)
    70. 70. (demo: jirb : Swing)
    71. 71. (demo: commons-lang)
    72. 72. ¿ Rails ?
    73. 73. • framework web open source
    74. 74. • framework web open source • construido sobre y para Ruby
    75. 75. • framework web open source • construido sobre y para Ruby • orientado al desarrollo ágil
    76. 76. • framework web open source • construido sobre y para Ruby • orientado al desarrollo ágil • una filosofía diferente de crear aplicaciones web
    77. 77. • 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...”
    78. 78. • 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...
    79. 79. cultura alternativa...
    80. 80. Libertad...
    81. 81. Libertad... No precisamente este tipo de libertad...
    82. 82. diversión...
    83. 83. (demo: al final)
    84. 84. protagonista final...
    85. 85. + ¿ JRuby on Rails ?
    86. 86. En la unión está la fuerza...
    87. 87. 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/
    88. 88. (Historia real)
    89. 89. El proyecto...
    90. 90. 1.Parsear XML
    91. 91. 1.Parsear XML 2.Crear prototipo WS-*
    92. 92. 1.Parsear XML 2.Crear prototipo WS-* 3.Invocar WS-*
    93. 93. 1.Parsear XML 2.Crear prototipo WS-* 3.Invocar WS-* 4.Generar PDFs
    94. 94. 1.Parsear XML 2.Crear prototipo WS-* 3.Invocar WS-* 4.Generar PDFs 5.Mensajería asincrona
    95. 95. 1.Parsear XML 2.Crear prototipo WS-* 3.Invocar WS-* 4.Generar PDFs 5.Mensajería asincrona 6.HTML + CSS + JS
    96. 96. tiempo = 3 días
    97. 97. Negociamos con el cliente
    98. 98. Única restricción: Debe correr en nuestra Infraestructura: JAVA
    99. 99. + JRuby on Rails
    100. 100. 24 horas y 150 lineas de código más tarde estaba lista
    101. 101. Un secreto: Necesitamos migramos la aplicación a Java en: Una Noche calurosa de Miami
    102. 102. demo final: (JRuby on Rails)
    103. 103. “Social Todo List”
    104. 104. Aplicación Web J2EE
    105. 105. > rails stdl
    106. 106. > rails stdl > ./script/server
    107. 107. > rails stdl > ./script/server > ./script/generate model...
    108. 108. > rails stdl > ./script/server > ./script/generate model... > ./script/generate controller...
    109. 109. > rails stdl > ./script/server > ./script/generate model... > ./script/generate controller... > jugar un poco con todo_controller e index.html.erb
    110. 110. > rails stdl > ./script/server > ./script/generate model... > ./script/generate controller... > jugar un poco con todo_controller e index.html.erb > rake db:migrate
    111. 111. > 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
    112. 112. > 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
    113. 113. > 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
    114. 114. > 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
    115. 115. Conclusiones
    116. 116. 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/
    117. 117. Poliglotas
    118. 118. ¿ Preguntas ? http://continuum.cl twitter: j4rs

    ×