Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Minas on Rails 2007 - JRuby

Minas on Rails 2007 - JRuby

diogenes

March 30, 2012
Tweet

More Decks by diogenes

Other Decks in Programming

Transcript

  1. •Implementação do Ruby, escrita 100% em Java(Sim, claro, você já

    sabe disso!) O que é JRuby? •Open-Source(CPL, GPL, LGPL) •Uma alternativa à versão oficial •Instalação tipo “Vaso Sanitário” (Baixa/Descompacta/Usa)
  2. O que é JRuby? •Compatível com Ruby 1.8.5 •Uma “simples

    biblioteca Java” •Feita para rodar em “qualquer” Java Virtual Machine(JVM) •Portável(Ah! Teu celular tbém tem JVM?)
  3. Mas, como você pode chamar isso de Ruby se Ruby

    nunca teve uma especificação?!
  4. •Testado com várias suites de teste (+95% em todas as

    suítes): Deve ser Ruby!  ruby_test  Rubicon, BFTS, Rubinius test suite •JRuby tem MRI como referência  A própria suite de testes do JRuby  Outras suites de test(Rails, RSpec…)
  5. •Time atual de desenvolvedores: JRuby: O Projeto  Charles Nutter(Sun

    Microsystems)  Thomas Enebo(Sun Microsystems)  Ola Bini(ThoughtWorks)  Nick Sieger(Sun Microsystems) •Projeto iniciado em 2001 •2 desenvolvedores em Full-Time
  6. Pontos fortes do JRuby •Compilador de código Ruby  Maior

    Performance por ser compilado •Threading(Native/Kernel Threads) •Suporte nativo a Unicode(Java)  Compilação em modos JIT e AOT
  7. Pontos fortes do JRuby  JRuby-Extras: Conjunto de projetos paralelos

    de integração, portando alguns Gems para Java(Active-Record-JDBC, Mongrel-JRuby, Goldspike, etc…)  Gems escritos em Ruby  Frameworks/Bibliotecas escritas em Java •Amplo Tool-set:
  8. Pontos fortes do JRuby •Menor resistência política no uso corporativo:

    •Bom gerenciamento de memória do Java(Garbage Collector)  Investimentos já existentes em infra, ferramentas, e treinamento  “É só mais uma biblioteca Java!”
  9. Pontos fortes do JRuby •Extensões podem ser escritas em Java

    •Maturidade da plataforma •Fácil deployment de aplicações Rails •Simplifica o acesso à classes Java por meio de código Ruby(Vice-versa)
  10. •E depois… Usando classes Java f = javax.swing.JFrame.new(“Minas on Rails

    ‘07”) Ou… include_class “javax.swing.JFrame” f = JFrame.new(“Minas on Rails ’07”) Ou… include_class(“java.lang.String”){ |pkg, clazz| “J#{class}”} #O mesmo que‘JString = java.lang.String’
  11. •Classes Java “Rubificadas” Usando classes Java f = javax.swing.JFrame.new(“Minas on

    Rails ‘07”) f.set_size(200, 200) # Chama método JFrame#setSize()
  12. •Suporta apenas “Green” Threads Ruby 1.8.x Threading  A nível

    de SO, todas as threads estão em um único processo  Não escalam com múltiplos processadores •Thread Scheduler é um simples “divisor de tempo”(Cooperative Threading)
  13. Ruby 1.9 Threading •Suporte a Kernel Threads •Muitas melhorias e

    revisões(Salve Koichi!) •Global Locking(???) •Threads não blocantes(Salve TaQ!)
  14. •Suporte a Native Threads e “Green” Threads(Java) JRuby Threading •Processos

    paralelos em múltiplos cores/processadores •Mapeia cada processo Ruby para um processo nativo
  15. •Utiliza Thread Scheduler do SO JRuby Threading •Efeito não garantido

    para operações de Thread Killing, e Critical Sections
  16. •Suporte parcial na MRI 1.8.x Unicode na MRI  Charset

    limitado(UTF-8 like)  Strings baseadas em byte[ ]  Comportamentos inesperados ao manipular Strings com caracteres multibyte(representação > 8 bits)
  17. •Unicode aprimorado na MRI 1.9 Unicode na MRI  Suporte

    completo •Rails ActiveSupport::MultiByte  Cada string pode ter seu encoding  Strings baseadas em char[ ]  Possível quebra de compatibilidade(???)
  18. Performance JRuby •Similar a MRI 1.8 no modo interpretado •Ganho

    muito grande no modo compilado(bytecode Java) •Inferior em alguns benchmarks •Bate MRI em alguns benchmarks
  19. JRuby Compiler •Compilação para Java Bytecode •Se beneficia das otimizações

    de bytecode feitas pela JVM (Ex. HotSpot JVM Bytecode Optimization)
  20. •Ahead-of-Time(“Antes do tempo”) JRuby Compiler  Compila .rb para .class

    •Just-in-Time(Modo padrão)  Compila sob demanda(Em Runtime)  Executa diretamente aplicações anteriormente compiladas  Código executado imediatamente
  21. •Goldspike(Antigo “Rails Integration”) JRuby on Rails  Empacota aplicações Rails

    em .war  Servlet redireciona requisições Rails •ActiveRecord-JDBC  Acesso à Pools de conexões via JNDI  Melhor desempenho  Warbler
  22. JRuby on Rails •ActiveRecord-JDBC 0.6 + Rails 2.0  Configuração

    normal no database.yml: development: adapter: jdbcmysql # activerecord-jdbcmysql-adapter database: db/development
  23. •Cases JRuby on Rails  Mingle Project - ThoughtWorks 

    Oracle Mix Portal - Oracle •Suporte Webrick, Mongrel (Mongrel-JRuby)
  24. •JRuby é uma boa alternativa á MRI (Boa para alguns

    casos!) Conclusões •Ideal p/ integração com legado Java •A comunidade só tem a ganhar!
  25. Por fim…Referências  JRuby: www.jruby.org  Charles Nutter: headius.blogspot.com 

    Thomas Enebo: bloglines.com/blog/ThomasEEnebo  Google it!