JRuby
require 'java'
pdf = com.itextpdf.text.Document.new
para = com.itextpdf.text.Paragraph.new 'Brought to you by JRuby'
file = java.io.FileOutputStream.new 'pdf_demo.pdf'
com.itextpdf.text.pdf.PdfWriter.get_instance pdf, file
pdf.open
pdf.add para
pdf.close
Friday, November 4, 2011
“You get true multithreading that
can use all your computer’s cores
from one process, plus a virtual
machine that’s been tuned for a
decade and a half.”
Using JRuby - Bringing Ruby to Java
Friday, November 4, 2011
Tasks
class EmailerTask < TorqueBox::Messaging::Task
def send_welcome(payload)
to = "#{payload[:name]} <#{payload[:address]}>"
# send welcome email to the user
end
end
Friday, November 4, 2011
Tasks
class UserController < ApplicationController
def register
user = User.new(params[:user])
EmailerTask.async(:send_welcome, :address =>
user.email, :name => user.name)
end
end
Friday, November 4, 2011
Processors
include TorqueBox::Messaging
class PrintHandler < MessageProcessor
def on_message(body)
puts "Processing #{body} of #{message}"
end
def configure(opts)
@color = opts['color']
end
end
Friday, November 4, 2011
Queues
include TorqueBox
req = Messaging::Queue.new '/queues/questions'
res = Messaging::Queue.new '/queues/answers'
Thread.new do
req.publish "What time is it?"
puts res.receive( :timeout => 1000 )
end
Friday, November 4, 2011
Future
class EmailerTask
def send_welcome(payload)
to = "#{payload[:name]} <#{payload[:address]}>"
# long running task
end
end
Friday, November 4, 2011
Future
class EmailerTask
include TorqueBox::Messaging::Backgroundable
always_background :send_welcome
def send_welcome(payload)
to = "#{payload[:name]} <#{payload[:address]}>"
# long running task
end
end
Friday, November 4, 2011
Services
class BeerService
def initialize
@queue = Messaging::Queue.new(“beer”)
end
def start
@queue.publish “Testing”
end
def stop
# O que fazer quando o serviço receber um stop
end
end
Friday, November 4, 2011
Java
package br.com.rubyconf;
public class Beer {
//gets e sets
public void say(String message) { // Execução do método }
}
Deploy do jar na aplicação
app/
models/
views/
controllers/
lib/beer.jar
Friday, November 4, 2011
Ruby
class BeerController < ApplicationController
include TorqueBox::Injectors
def create
beer = inject(br.com.rubyconf.Beer )
beer.say “Ruby is for Java”
end
end
Friday, November 4, 2011
JNDI
class MyService
include TorqueBox::Injectors
def initialize opts={}
@factory = inject("java:comp/env/jdbc/myDB")
end
end
Friday, November 4, 2011
Destinations
class MyService
include TorqueBox::Injectors
def initialize opts={}
@inbound = inject("/topic/beerpub")
@outbound = inject("/queue/beer")
end
end
Friday, November 4, 2011
Outras features
Autenticação + Websockets + XA (2PC)
Friday, November 4, 2011