TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams)...

90
TorqueBox Moc Javy – piękno Rubiego

Transcript of TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams)...

Page 1: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

TorqueBoxMoc Javy – piękno Rubiego

Page 2: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Marek.

Page 3: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 4: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 5: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

JBoss AS 7+

=

Page 6: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 7: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 8: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

No, do rzeczy panie!

Page 9: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Dziś w menu:

Page 10: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

50 / 40 / 10

Page 11: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Czym jest TorqueBox?

Page 12: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Ruby i Java? Huh?

Page 13: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

DO RZECZY!

Page 14: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 15: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Cel.

Page 16: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Web: Rails, Sinatra, Rack.

Page 17: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Ponadto: wiadomości,

zadania, usługi, [...].

Page 18: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Brzmi znajomo?

Page 19: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Java już to ma, wykorzystajmy to!

Page 20: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Randkowanie JBoss AS oraz

Ruby.

Page 21: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 22: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Ale dlaczego Ruby?

Page 23: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Bob lubi Rubiego.

Page 24: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Dynamiczny.

Page 25: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Brak kompilacji.

Page 26: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Liberalny.

Page 27: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Zwięzły.

Page 28: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Set<Person> people = new HashSet<Person>();

for (Team each : teams) { people.addAll(each.getMembers());}

for (Person each : people) { each.promote();}

com/foo/Anything.java

Page 29: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

teams. collect(&:members). flatten.uniq.each &:promote!

anything.rb

Page 30: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Wporzo, ale co z wydajnością?

Page 31: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

JRuby FTW!

Page 32: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Bardzo szybkie środowisko.

Page 33: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Prawdziwe wątki.

Page 34: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Biblioteki Javy, za free.

Page 35: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 36: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

TB 1.x – JBoss AS 6TB 2.x – JBoss AS 7

Page 37: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Instalacja.

Page 38: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

$ wget http://torquebox.org/builds/LATEST/torquebox-dist-bin.zip$ unzip -q torquebox-dist-bin.zip

$ export TORQUEBOX_HOME=$PWD/torquebox-1*$ export JBOSS_HOME=$TORQUEBOX_HOME/jboss$ export JRUBY_HOME=$TORQUEBOX_HOME/jruby$ export PATH=$JRUBY_HOME/bin:$PATH

Page 39: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Zbyt skomplikowane?

Page 41: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Tak, na Windowsie również.

Page 42: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Zainstalowane, co dalej?

Page 43: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Aplikacja webowa, powiedzmy Rails.

Page 44: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

$ rails new app -m \ $TORQUEBOX_HOME/share/rails/template.rb$ cd app$ rake torquebox:deploy[‘/app’]

http://localhost:8080/app/

Page 45: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

To może jakiś kod co działa?

Page 46: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

$ rails g scaffold Coffee \ name:string description:text$ rake db:migrate

http://localhost:8080/app/coffees/

Page 47: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Demo!

Page 48: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Nie takie rzeczy widziałem!

Page 49: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Integracja z Javą.

Page 50: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

class SomeController

def index session[:password] = 'sw0rdfish' end

end

Ruby

Page 51: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

public class SomeServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) { request.getSession().getValue("password"); }}

Java

Page 52: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Klastrowanie?

Page 53: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Sklastruj JBoss’a!

Page 54: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

mod_cluster

Page 55: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 56: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Dynamiczna konfiguracja!

Page 57: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Koniec o aplikacjach webowych.

Page 58: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Zaplanowane zadania.

Page 59: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

class NewsletterSender def run subscriptions = Subscription.find(:all) subscriptions.each do |e| send_newsletter(e) end endend

app/jobs/newsletter_sender.rb

Page 60: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

jobs: monthly_newsletter: description: first of month job: NewsletterSender cron: ‘0 0 0 1 * ?’

config/torquebox.yml

Page 61: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Messaging.

Page 62: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Zadania w tle.

Page 63: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

class Something def foo end

def bar endend

Page 64: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

something = Something.newsomething.foosomething.bar

Page 65: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

class Something include TorqueBox::Messaging::Backgroundable

def foo end

def bar endend

Page 66: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

something = Something.newsomething.background.foosomething.bar

Page 67: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

class Something include TorqueBox::Messaging::Backgroundable always_background :foo

def foo end

def bar endend

Page 68: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

something = Something.newsomething.foosomething.bar

Page 69: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Kolejki.

Page 70: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

queues: /queues/questions /queues/answerstopics: /topics/new_accounts /topics/notifications

config/torquebox.yml

Page 71: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

messaging: /topics/print: PrintHandler: color: ‘red’ /queues/popular: AdultObserver: filter: "age >= 18" concurrency: 5

config/torquebox.yml

Page 72: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

include TorqueBox

queue = Messaging::Queue.new '/queues/foo'queue.create

...

queue.destroy

Page 73: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

include TorqueBox::Messaging

class PrintHandler < MessageProcessor def initialize(opts) @color = opts['color'] end def on_message(body) puts “#{body} in #{@color}” endend

config/torquebox.yml

Page 74: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Usługi.

Page 75: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Nie-webowe, długie demony.

Page 76: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

class MyService def initialize(opts={}) @queue = Messaging::Queue.new(opts[:queue]) end def start Thread.new { run } end def stop @done = true end def run until @done @queue.publish(Time.now) sleep(1) end end end app/processors/my_service.rb

Page 77: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Cacheowanie.

Page 78: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Wstrzykiwanie.

Page 79: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

package com.mycorp;

@ApplicationScopedclass Something { @Inject private Else else;

public void print(String what) { # blah }}

@ApplicationScopedclass Else {

}

Page 80: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

class MyService include TorqueBox::Injectors

def initialize(opts={}) @thing = inject(Java::com.mycorp.Something) @thing.print(‘Marek’) endend

Page 81: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

CDI to tylko przykład: kolejki, tematy, heroina,

inne rzeczy.

Page 82: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Drugs are bad, m’kay?

Page 83: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

inject_topic( "/topics/questions" )inject_queue( "/queues/answers" )inject_namig( "java:comp/env/jdbc/myDS )

Page 84: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Demo!

Page 85: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

JBoss AS 7

TorqueBox

Baza danych

Firefox

Kolejka JMS

Twitter Service

Twitter

JBoss AS 7

TorqueBox

RailsZadaniaKonsument kolejki

CDI

JPA 2.0

Page 86: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

OK, fajnie, ale jak to jest wydajne?

Page 87: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 88: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();
Page 90: TorqueBox - Marek Goldmann · Set people = new HashSet(); for (Team each : teams) {people.addAll(each.getMembers());} for (Person each : people) {each.promote();

Dzięki.

Nie zapomnij o naklejkach!