14. 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
Thursday, December 8, 11
15. “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
Thursday, December 8, 11
63. Tasks
class EmailerTask < TorqueBox::Messaging::Task
def send_welcome(payload)
to = "#{payload[:name]} <#{payload[:address]}>"
# send welcome email to the user
end
end
Thursday, December 8, 11
64. Tasks
class UserController < ApplicationController
def register
user = User.new(params[:user])
EmailerTask.async(:send_welcome, :address =>
user.email, :name => user.name)
end
end
Thursday, December 8, 11
65. 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
Thursday, December 8, 11
66. 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
Thursday, December 8, 11
68. Future
class EmailerTask
def send_welcome(payload)
to = "#{payload[:name]} <#{payload[:address]}>"
# long running task
end
end
Thursday, December 8, 11
69. 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
Thursday, December 8, 11
72. 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
Thursday, December 8, 11
78. Java
package br.com.javaonebrasil;
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
Thursday, December 8, 11
79. Ruby
class BeerController < ApplicationController
include TorqueBox::Injectors
def create
beer = inject(br.com.javaonebrasil.Beer )
beer.say “Ruby is for Java”
end
end
Thursday, December 8, 11
80. JNDI
class MyService
include TorqueBox::Injectors
def initialize opts={}
@factory = inject("java:comp/env/jdbc/myDB")
end
end
Thursday, December 8, 11
81. Destinations
class MyService
include TorqueBox::Injectors
def initialize opts={}
@inbound = inject("/topic/beerpub")
@outbound = inject("/queue/beer")
end
end
Thursday, December 8, 11
82. Transactions
Queue Database Infinispan
Rails Application Topic
XA Distributed, multi resource transaction
Thursday, December 8, 11
83. XA (2PC)
HornetQ ✔
Infinispan ✔
TorqueBox + ActiveRecord ✔
Thursday, December 8, 11
84. Outras features
Autenticação + Websockets
Thursday, December 8, 11