Java EE + JRuby +
Rails
Interfaces rapidas para aplicações Java EE
http://sobrecodigo.com palestras@urubatan.com.br
Por que Java EE?
http://sobrecodigo.com palestras@urubatan.com.br
Meu ambiente na empresa
•  Servidores de aplicação Java EE
o  comprados e com contrato com o fornecedor
•  Muita gente que conhece e gosta de Java
•  Muitos projetos já prontos em Java
o  E eu preciso interagir com estes projetos
•  Dificil justificar fazer um projeto todo em
outra tecnologia
o  Exceto se for uma tecnologia do fornecedor já
contratado que não me agradaria muito :D
http://sobrecodigo.com palestras@urubatan.com.br
Por que Ruby on Rails?
http://sobrecodigo.com palestras@urubatan.com.br
Produtividade!
•  Últimos projetos
o  Velocidade no desenvolvimento
•  Quick Start
o  Fácil de começar e de dar manutenção em qualquer
projeto
•  Feito para web!
o  Forma mais rapida hoje de desenvolver uma
interface web para um banco de dados.
•  Eu gosto
o  Feito para felicidade do programador (sério, esta
escrito no site do framework!)http://sobrecodigo.com palestras@urubatan.com.br
www.rubyonrails.org
Ruby on Rails is an open-source web framework that's
optimized for programmer happiness and sustainable
productivity. It lets you write beautiful code by favoring
convention over configuration.
http://sobrecodigo.com palestras@urubatan.com.br
Contexto!
Banco de dados
Message Driven Beans
Stateless Session Beans/
Web Services
http://sobrecodigo.com palestras@urubatan.com.br
O que foi necessário?
•  Acessar o banco da aplicação Java EE
diretamente do Rails
•  Chamar métodos de EJBs via JRuby
•  Enviar mensagens para MDBs usando
JRuby
http://sobrecodigo.com palestras@urubatan.com.br
•  Usando um banco já modelado em uma
aplicação Rails
o  self.table_name = "..."
o  def self.table_name...end
o  self.primary_key = "..."
o  def self.primary_key...end
o  belongs_to/foreign_key
o  has_many/foreign_key
Acesso a banco
http://sobrecodigo.com palestras@urubatan.com.br
Chamando métodos de
EJBs
require 'java'
include_class 'javax.naming.InitialContext'
ic = InitialContext.new
foo = ic.lookup("...")
result = foo.echo("This is foo!")
http://sobrecodigo.com palestras@urubatan.com.br
Enviando mensagens
@context =
InitialContext.new(Hashtable.new(environment))
@connection_factory =
@context.lookup("ConnectionFactory")
destination = @context.lookup(destination_name)
connection = @connection_factory.create_connection()
session = connection.create_session(false,
Session::AUTO_ACKNOWLEDGE)
producer = session.create_producer(destination)
message = session.create_text_message
message.text = message_text
producer.send(message)
session.close
http://sobrecodigo.com palestras@urubatan.com.br
Hora de acordar!
http://sobrecodigo.com palestras@urubatan.com.br
Exemplo
•  Aplicação Java EE
o  Dados persistidos usando JPA 2
o  Session Beans com regras de negócio
o  MDB para injestão de eventos
•  Criar aplicação Rails
o  Acesso a dados via ActiveRecord
o  Chamar Session Beans para monitorar processo de
negocio
o  Botão para inserção de novos eventos no queue
http://sobrecodigo.com palestras@urubatan.com.br
Deploy da aplicação
•  glassfish_rails
•  warbler
http://sobrecodigo.com palestras@urubatan.com.br
Perguntas?
?
O que mais?
Livro de Rails?
http://www.novatec.com.br/livros/rubyonrails2
Curso online de BDD?
http://sobrecodigo.com
Mais livros sobre Java?
http://www.novatec.com.br
http://sobrecodigo.com palestras@urubatan.com.br
Obrigado!
http://sobrecodigo.com palestras@urubatan.com.br
Rails Script
• jruby -S rails new justjava2013 -d jdbcmysql
• cd justjava2013/
• [config/database.yml, config/initializers/
connection_cleanup.rb]
• jruby -S rake db:create:all
• jruby -S rails g scaffold_controller person
name:string birth:date
• jruby -S rails g scaffold_controller invoice
value:number person:references dueDate:date
• jruby -S warble

Just java 2013 - Java EE + Jruby on Rails

  • 1.
    Java EE +JRuby + Rails Interfaces rapidas para aplicações Java EE http://sobrecodigo.com palestras@urubatan.com.br
  • 2.
    Por que JavaEE? http://sobrecodigo.com palestras@urubatan.com.br
  • 3.
    Meu ambiente naempresa •  Servidores de aplicação Java EE o  comprados e com contrato com o fornecedor •  Muita gente que conhece e gosta de Java •  Muitos projetos já prontos em Java o  E eu preciso interagir com estes projetos •  Dificil justificar fazer um projeto todo em outra tecnologia o  Exceto se for uma tecnologia do fornecedor já contratado que não me agradaria muito :D http://sobrecodigo.com palestras@urubatan.com.br
  • 4.
    Por que Rubyon Rails? http://sobrecodigo.com palestras@urubatan.com.br
  • 5.
    Produtividade! •  Últimos projetos o Velocidade no desenvolvimento •  Quick Start o  Fácil de começar e de dar manutenção em qualquer projeto •  Feito para web! o  Forma mais rapida hoje de desenvolver uma interface web para um banco de dados. •  Eu gosto o  Feito para felicidade do programador (sério, esta escrito no site do framework!)http://sobrecodigo.com palestras@urubatan.com.br
  • 6.
    www.rubyonrails.org Ruby on Railsis an open-source web framework that's optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration. http://sobrecodigo.com palestras@urubatan.com.br
  • 7.
    Contexto! Banco de dados MessageDriven Beans Stateless Session Beans/ Web Services http://sobrecodigo.com palestras@urubatan.com.br
  • 8.
    O que foinecessário? •  Acessar o banco da aplicação Java EE diretamente do Rails •  Chamar métodos de EJBs via JRuby •  Enviar mensagens para MDBs usando JRuby http://sobrecodigo.com palestras@urubatan.com.br
  • 9.
    •  Usando umbanco já modelado em uma aplicação Rails o  self.table_name = "..." o  def self.table_name...end o  self.primary_key = "..." o  def self.primary_key...end o  belongs_to/foreign_key o  has_many/foreign_key Acesso a banco http://sobrecodigo.com palestras@urubatan.com.br
  • 10.
    Chamando métodos de EJBs require'java' include_class 'javax.naming.InitialContext' ic = InitialContext.new foo = ic.lookup("...") result = foo.echo("This is foo!") http://sobrecodigo.com palestras@urubatan.com.br
  • 11.
    Enviando mensagens @context = InitialContext.new(Hashtable.new(environment)) @connection_factory= @context.lookup("ConnectionFactory") destination = @context.lookup(destination_name) connection = @connection_factory.create_connection() session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE) producer = session.create_producer(destination) message = session.create_text_message message.text = message_text producer.send(message) session.close http://sobrecodigo.com palestras@urubatan.com.br
  • 12.
    Hora de acordar! http://sobrecodigo.compalestras@urubatan.com.br
  • 13.
    Exemplo •  Aplicação JavaEE o  Dados persistidos usando JPA 2 o  Session Beans com regras de negócio o  MDB para injestão de eventos •  Criar aplicação Rails o  Acesso a dados via ActiveRecord o  Chamar Session Beans para monitorar processo de negocio o  Botão para inserção de novos eventos no queue http://sobrecodigo.com palestras@urubatan.com.br
  • 14.
    Deploy da aplicação • glassfish_rails •  warbler http://sobrecodigo.com palestras@urubatan.com.br
  • 15.
  • 16.
    O que mais? Livrode Rails? http://www.novatec.com.br/livros/rubyonrails2 Curso online de BDD? http://sobrecodigo.com Mais livros sobre Java? http://www.novatec.com.br http://sobrecodigo.com palestras@urubatan.com.br
  • 17.
  • 18.
    Rails Script • jruby -Srails new justjava2013 -d jdbcmysql • cd justjava2013/ • [config/database.yml, config/initializers/ connection_cleanup.rb] • jruby -S rake db:create:all • jruby -S rails g scaffold_controller person name:string birth:date • jruby -S rails g scaffold_controller invoice value:number person:references dueDate:date • jruby -S warble