SlideShare una empresa de Scribd logo
1 de 90
Descargar para leer sin conexión
TorqueBox
 Moc Javy – piękno Rubiego
Marek.
JBoss AS 7
    +

    =
No, do rzeczy panie!
Dziś w menu:
50 / 40 / 10
Czym jest
TorqueBox?
Ruby i Java? Huh?
DO RZECZY!
Cel.
Web: Rails, Sinatra,
      Rack.
Ponadto:
   wiadomości,
zadania, usługi, [...].
Brzmi
znajomo?
Java już to ma,
wykorzystajmy to!
Randkowanie
JBoss AS oraz
    Ruby.
Ale dlaczego Ruby?
Bob lubi Rubiego.
Dynamiczny.
Brak kompilacji.
Liberalny.
Zwięzły.
Set<Person> people = new HashSet<Person>();

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

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



                               com/foo/Anything.java
teams.
   collect(&:members).
      flatten.uniq.each &:promote!




                                     anything.rb
Wporzo, ale co z
 wydajnością?
JRuby FTW!
Bardzo szybkie
 środowisko.
Prawdziwe wątki.
Biblioteki Javy, za
       free.
TB 1.x – JBoss AS 6
TB 2.x – JBoss AS 7
Instalacja.
$ 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
Zbyt
skomplikowane?
$ gem install torquebox-server --pre 
  --source http://torquebox.org/2x/builds/
LATEST/gem-repo/

$ torquebox run
Tak, na Windowsie
     również.
Zainstalowane, co
      dalej?
Aplikacja webowa,
powiedzmy Rails.
$ rails new app -m 
  $TORQUEBOX_HOME/share/rails/template.rb
$ cd app
$ rake torquebox:deploy[‘/app’]



http://localhost:8080/app/
To może jakiś kod
   co działa?
$ rails g scaffold Coffee 
  name:string description:text
$ rake db:migrate




http://localhost:8080/app/coffees/
Demo!
Nie takie rzeczy
  widziałem!
Integracja z Javą.
Ruby
class SomeController

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

end
Java
public class SomeServlet {
  public void doGet(HttpServletRequest req,
                    HttpServletResponse resp) {
    request.getSession().getValue("password");
  }
}
Klastrowanie?
Sklastruj JBoss’a!
mod_cluster
Dynamiczna
konfiguracja!
Koniec o
aplikacjach
webowych.
Zaplanowane
  zadania.
class NewsletterSender
    def run
     subscriptions = Subscription.find(:all)
     subscriptions.each do |e|
       send_newsletter(e)
     end
  end
end




                       app/jobs/newsletter_sender.rb
jobs:
  monthly_newsletter:
    description: first of month
    job: NewsletterSender
    cron: ‘0 0 0 1 * ?’




                              config/torquebox.yml
Messaging.
Zadania w tle.
class Something
  def foo
  end

  def bar
  end
end
something = Something.new
something.foo
something.bar
class Something
  include TorqueBox::Messaging::Backgroundable

  def foo
  end

  def bar
  end
end
something = Something.new
something.background.foo
something.bar
class Something
  include TorqueBox::Messaging::Backgroundable
  always_background :foo

  def foo
  end

  def bar
  end
end
something = Something.new
something.foo
something.bar
Kolejki.
queues:
  /queues/questions
  /queues/answers
topics:
  /topics/new_accounts
  /topics/notifications




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




                            config/torquebox.yml
include TorqueBox

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

...

queue.destroy
include TorqueBox::Messaging

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


                               config/torquebox.yml
Usługi.
Nie-webowe, długie
     demony.
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
Cacheowanie.
Wstrzykiwanie.
package com.mycorp;

@ApplicationScoped
class Something {
  @Inject
  private Else else;

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

@ApplicationScoped
class Else {

}
class MyService
  include TorqueBox::Injectors

  def initialize(opts={})
    @thing = inject(Java::com.mycorp.Something)
    @thing.print(‘Marek’)
  end
end
CDI to tylko
przykład: kolejki,
tematy, heroina,
  inne rzeczy.
Drugs are bad,
   m’kay?
inject_topic( "/topics/questions" )
inject_queue( "/queues/answers" )
inject_namig( "java:comp/env/jdbc/myDS )
Demo!
Firefox


Twitter




          Twitter Service

                     TorqueBox
                                  Konsument
                     JBoss AS 7                         Zadania                 Rails
                                    kolejki

                                                                                        TorqueBox



           Kolejka JMS
                                               CDI

                                              JPA 2.0


                                                                                         JBoss AS 7



                                                                        Baza
                                                                       danych
OK, fajnie, ale jak to
  jest wydajne?
http://torquebox.org/
http://github.com/torquebox

http://github.com/goldmann/
confitura-2011-torquebox-demo

IRC: #torquebox on FreeNode

@torquebox
Dzięki.

Nie zapomnij o
 naklejkach!

Más contenido relacionado

Destacado

Java Night 2010 SteamCannon
Java Night 2010 SteamCannonJava Night 2010 SteamCannon
Java Night 2010 SteamCannonmarekgoldmann
 
BoxGrinder – FOSDEM 2012
BoxGrinder – FOSDEM 2012BoxGrinder – FOSDEM 2012
BoxGrinder – FOSDEM 2012marekgoldmann
 
Silesia JUG : Java Message Service
Silesia JUG : Java Message ServiceSilesia JUG : Java Message Service
Silesia JUG : Java Message Servicemarekgoldmann
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrindermarekgoldmann
 
BoxGrinder – FUDCon 2011 Tempe
BoxGrinder – FUDCon 2011 TempeBoxGrinder – FUDCon 2011 Tempe
BoxGrinder – FUDCon 2011 Tempemarekgoldmann
 
JUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBoxJUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBoxmarekgoldmann
 
13 14 SAP policy - revised for spring 2014 - final - 111413
13 14 SAP policy - revised for spring 2014 - final  - 11141313 14 SAP policy - revised for spring 2014 - final  - 111413
13 14 SAP policy - revised for spring 2014 - final - 111413Houston Community College
 
Tutorial caesars II
Tutorial caesars IITutorial caesars II
Tutorial caesars IImanuedlf
 

Destacado (8)

Java Night 2010 SteamCannon
Java Night 2010 SteamCannonJava Night 2010 SteamCannon
Java Night 2010 SteamCannon
 
BoxGrinder – FOSDEM 2012
BoxGrinder – FOSDEM 2012BoxGrinder – FOSDEM 2012
BoxGrinder – FOSDEM 2012
 
Silesia JUG : Java Message Service
Silesia JUG : Java Message ServiceSilesia JUG : Java Message Service
Silesia JUG : Java Message Service
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinder
 
BoxGrinder – FUDCon 2011 Tempe
BoxGrinder – FUDCon 2011 TempeBoxGrinder – FUDCon 2011 Tempe
BoxGrinder – FUDCon 2011 Tempe
 
JUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBoxJUDCon 2010 Boston : TorqueBox
JUDCon 2010 Boston : TorqueBox
 
13 14 SAP policy - revised for spring 2014 - final - 111413
13 14 SAP policy - revised for spring 2014 - final  - 11141313 14 SAP policy - revised for spring 2014 - final  - 111413
13 14 SAP policy - revised for spring 2014 - final - 111413
 
Tutorial caesars II
Tutorial caesars IITutorial caesars II
Tutorial caesars II
 

Similar a TorqueBox - moc Javy, piękno Rubiego

Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.jsPatryk Jar
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
TDD drogą do oświecenia w Scali
TDD drogą do oświecenia w ScaliTDD drogą do oświecenia w Scali
TDD drogą do oświecenia w ScaliKonrad Malawski
 
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodziCzterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodziJaroslaw Palka
 
4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...
4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...
4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...PROIDEA
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychSKN Shader
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzkeGaldoMedia
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaMaciej Ziarko
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerKamil Grabowski
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsWojciech Grześkowiak
 
Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Laravel Poland MeetUp
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnieCode-House
 

Similar a TorqueBox - moc Javy, piękno Rubiego (20)

Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
Scala
ScalaScala
Scala
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Jruby on Rails
Jruby on RailsJruby on Rails
Jruby on Rails
 
JRuby on Rails
JRuby on RailsJRuby on Rails
JRuby on Rails
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
TDD drogą do oświecenia w Scali
TDD drogą do oświecenia w ScaliTDD drogą do oświecenia w Scali
TDD drogą do oświecenia w Scali
 
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodziCzterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi
 
4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...
4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...
4Developers 2015: Czterej jeźdźcy apokalipsy, gdy Armagedon w JVM nadchodzi. ...
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzke
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel Extensions
 
Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)
 
Php5
Php5Php5
Php5
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnie
 

TorqueBox - moc Javy, piękno Rubiego