JRubyRuby en un mundo enterpriseJano GonzálezDesarrolladorhttp://janogonzalez.com
Sobre mi         @janogonzalez                                   12●   Desarrollando en Java desde    2000, enamorado de R...
El mundo enterprise
Java EE
Versiones● 1999: J2EE 1.2● 2001: J2EE 1.3● 2003: J2EE 1.4● 2006: Java EE 5● 2009: Java EE 6 → Un paso en ladirección corre...
Frameworks● Spring● Hibernate● iBatis● Guice● Jboss Seam● ...
Servidores de aplicaciones● JBoss● Tomcat● Weblogic● Websphere● ...
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
JavaList<String> nombres = Arrays.asList("Jano", "Ian","Juanelo", "Peyuco");Collections.sort(nombres, new Comparator<Strin...
Rubynombres = ["Jano","Ian","Juanelo","Peyuco"]nombres.sort! { |x, y| x.length <=> y.length }nombres.each { |nombre| puts ...
Javapublic interface DuckLike {    String cuack();}...    public void doSomething(DuckLike duckLike) {        .        .  ...
Rubydef do_something(obj)  if obj.respond_to? :cuack    obj.cuack  else    …  endend
Todo es un objeto# El clásico string“Hola Mundo”.upcase# No hay "tipos primitivos"!5.zero?# Hasta el nulo es un objetonil....
Hay muchos tipos de objetos# Arreglos[1, 2, 3, 4, 5]# Hashes{:jano => "Alejandro", :cote => "José"}# Rangos(1..10)# Expres...
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 ob...
Bloques# Un método puede recibir un bloque de código5.times do  |n| puts nend# Para casos cortos como el anterior...5.time...
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(...
Creando tus propias clases# Problem Java?class Persona  attr_reader :nombre, :apellido  def initialize(nombre, apellido)  ...
Modificando clases ya existentes# Monkey patchingclass Range  def even    self.select { |n| n % 2 == 0 }  endend(1..100).e...
Accediendo a clases Java# Importando clases Javarequire javajava_import java.util.dated = Date.newd.to_gmt_string
Accediendo a clases JavaDate d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_stringArrays.asList() => Arrays::a...
ComandosIntérprete$ jrubyREPL$ jirbAdministrador de paquetes$ jgem
GemasPrecaución: No todas funcionan en Jruby
Encontrando la gema adecuada
Dime que versión de Java usas y      te diré quién eres
Java 7
Java 6
Java 5
Java <= 1.4
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.ymldevelopment:  adapter: jdbcmysql  database: startechconf_development  username: root  encoding: u...
Usa modo multithread production.rb# Enable threaded modeconfig.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 tu $CLASSPATH● Usa un initializer para cargar el ApplicationContext
Deploy en tu appserver      preferido
$ warble
warbler
Otras opciones
trinidad
TorqueBox
¿y si ya uso Ruby?
No seas GIL
No seas GIL
Bibliotecas interesantes● ROFLScale con Netty o Apache Mina● Actores remotos con Akka
Bibliotecas menos interesantes● Reportes iPDF● Excel con POI
Políglota extremo●   STM de Clojure
Conclusión
Más información
Más información● http://jruby.org● https://github.com/jruby● https://github.com/nicksieger/refactoring-to-rails
Más información● @headius● @nicksieger● @janogonzalez   O RLY?
@janogonzalez
¡Gracias!
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Upcoming SlideShare
Loading in...5
×

JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

965

Published on

Slides de mi presentación en RubyConf Uruguay 2011

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
965
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

  1. 1. JRubyRuby en un mundo enterpriseJano GonzálezDesarrolladorhttp://janogonzalez.com
  2. 2. Sobre mi @janogonzalez 12● Desarrollando en Java desde 2000, enamorado de Ruby en 10 2010 8● Co-organizador del Meetup de 6 Columna 1 Columna 2 Lenguajes Dinámicos: Columna 3 http://www.meetup.com/dynla 4 ngchile/ 2● Publica el blog http://gemaroja.com 0 Fila 1 Fila 2 Fila 3 Fila 4● Músico frustrado
  3. 3. El mundo enterprise
  4. 4. Java EE
  5. 5. Versiones● 1999: J2EE 1.2● 2001: J2EE 1.3● 2003: J2EE 1.4● 2006: Java EE 5● 2009: Java EE 6 → Un paso en ladirección correcta...
  6. 6. Frameworks● Spring● Hibernate● iBatis● Guice● Jboss Seam● ...
  7. 7. Servidores de aplicaciones● JBoss● Tomcat● Weblogic● Websphere● ...
  8. 8. El problema
  9. 9. Exceso de complejidad
  10. 10. Lo bueno
  11. 11. Portabilidad
  12. 12. Escalabilidad
  13. 13. Multithreading
  14. 14. JIT
  15. 15. Garbage Collector
  16. 16. La solución
  17. 17. Ruby para la JVM :Dc
  18. 18. Dinámico :Dc
  19. 19. Orientado a Objetos :Dc
  20. 20. Gran soporte para meta- programación
  21. 21. JavaList<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);}
  22. 22. Rubynombres = ["Jano","Ian","Juanelo","Peyuco"]nombres.sort! { |x, y| x.length <=> y.length }nombres.each { |nombre| puts nombre }
  23. 23. Javapublic interface DuckLike { String cuack();}... public void doSomething(DuckLike duckLike) { . . . duckLike.cuack(); }
  24. 24. Rubydef do_something(obj) if obj.respond_to? :cuack obj.cuack else … endend
  25. 25. Todo es un objeto# El clásico string“Hola Mundo”.upcase# No hay "tipos primitivos"!5.zero?# Hasta el nulo es un objetonil.nil?
  26. 26. Hay muchos tipos de objetos# Arreglos[1, 2, 3, 4, 5]# Hashes{:jano => "Alejandro", :cote => "José"}# Rangos(1..10)# Expresiones regulares/^[a-z]+$/# Lambdaslambda { |n| n * 2 }
  27. 27. 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]
  28. 28. 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 }
  29. 29. 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(:+)
  30. 30. Creando tus propias clases# Problem Java?class Persona attr_reader :nombre, :apellido def initialize(nombre, apellido) @nombre = nombre @apellido = apellido endendjano = Persona.new("Jano", "González")jano.nombre
  31. 31. Modificando clases ya existentes# Monkey patchingclass Range def even self.select { |n| n % 2 == 0 } endend(1..100).even
  32. 32. Accediendo a clases Java# Importando clases Javarequire javajava_import java.util.dated = Date.newd.to_gmt_string
  33. 33. Accediendo a clases JavaDate d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_stringArrays.asList() => Arrays::as_list
  34. 34. ComandosIntérprete$ jrubyREPL$ jirbAdministrador de paquetes$ jgem
  35. 35. GemasPrecaución: No todas funcionan en Jruby
  36. 36. Encontrando la gema adecuada
  37. 37. Dime que versión de Java usas y te diré quién eres
  38. 38. Java 7
  39. 39. Java 6
  40. 40. Java 5
  41. 41. Java <= 1.4
  42. 42. Guerra de guerrillas
  43. 43. Fase I● Usar jirb como REPL Java● Ant/Maven → Apache Buildr● Scripts en general● Junit/Selenium → RSpec, Cucumber
  44. 44. Fase II● Servicios REST con Sinatra● DSLs para facilitar uso de bibliotecas Java● Aplicaciones Web con Ruby on Rails
  45. 45. JRuby on Rails
  46. 46. JRuby on Rails$ gem install rails$ rails new startechconf
  47. 47. Configura tu database.ymldevelopment: adapter: jdbcmysql database: startechconf_development username: root encoding: utf8test: adapter: jdbcmysql database: startechconf_test username: root encoding: utf8production: adapter: jdbc jndi: jdbc/stconrails
  48. 48. Usa modo multithread production.rb# Enable threaded modeconfig.threadsafe!
  49. 49. La magia que hay detrás● jruby-rack● activerecord-jdbc-adapter
  50. 50. Precaución●Si usas un servidor Java EE 1.4 (Por ej. WAS 6.1)debes usar jruby-rack 1.0.0.1
  51. 51. Integración con Spring
  52. 52. Integración con Spring● Usa un initializer para cargar tu $CLASSPATH● Usa un initializer para cargar el ApplicationContext
  53. 53. Deploy en tu appserver preferido
  54. 54. $ warble
  55. 55. warbler
  56. 56. Otras opciones
  57. 57. trinidad
  58. 58. TorqueBox
  59. 59. ¿y si ya uso Ruby?
  60. 60. No seas GIL
  61. 61. No seas GIL
  62. 62. Bibliotecas interesantes● ROFLScale con Netty o Apache Mina● Actores remotos con Akka
  63. 63. Bibliotecas menos interesantes● Reportes iPDF● Excel con POI
  64. 64. Políglota extremo● STM de Clojure
  65. 65. Conclusión
  66. 66. Más información
  67. 67. Más información● http://jruby.org● https://github.com/jruby● https://github.com/nicksieger/refactoring-to-rails
  68. 68. Más información● @headius● @nicksieger● @janogonzalez O RLY?
  69. 69. @janogonzalez
  70. 70. ¡Gracias!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×