Upgrade to Pro — share decks privately, control downloads, hide ads and more …

When Ruby meets Java - The Power of Torquebox

When Ruby meets Java - The Power of Torquebox

Presentation made by @arunagw and me at RubyConf India 2012

Rocky Jaiswal

February 01, 2012
Tweet

More Decks by Rocky Jaiswal

Other Decks in Programming

Transcript

  1. When Ruby Meets Java T h e P o w

    e r o f T o r q u e b o x Monday 26 March 12
  2. About Us A r u n A g r a

    w a l - 2 8 0 + c o m m i t s i n R a i l s c o r e - M o n g o i d c o r e t e a m m e m b e r - C r e a t o r o f o m n i a u t h - t w i t t e r - C o d i n g o n R a i l s s i n c e 2 0 0 7 - a g r a w a l a r u n . c o m / @ a r u n a g w R o c k y J a i s w a l - C o d i n g s i n c e 1 9 9 5 - K n o w b i t s o f J a v a & R u b y - E n j o y u s i n g J R u b y - r o c k y j . i n / @ w h a t s u p r o c k y Monday 26 March 12
  3. ToDo - T h e E n t e r

    p r i s e - W h a t i s T o r q u e b o x - D e m o - S c h e d u l i n g - S e r v i c e s - M e s s a g i n g - B a c k g r o u n d a b l e - C l u s t e r i n g & C a c h i n g - P e r f o r m a n c e & S u m m a r y - S u r p r i s e ! ! Monday 26 March 12
  4. What If... Wouldn’t it be great if - I could

    use the power of Java libraries with the ease of Ruby - I could use the power of a proven Java Server without writing any XML - I could deploy my JRuby app and test it without rebuilding it and restarting the server Monday 26 March 12
  5. TORQUEBOX Built upon JBoss 7 Built using JRuby (1.6.7) Supports

    Rack, Rails, Sinatra Everything in one box Monday 26 March 12
  6. Installation - Download the distribution from torquebox.org OR - rvm

    jruby (1.6.7) jruby -J-Xmx1024m -S gem install torquebox-server --pre Monday 26 March 12
  7. Scheduling Uses the battle-tested Quartz Java library Zero XML Minimal

    configuration No manual thread / process management No messing with cron Monday 26 March 12
  8. Scheduling config/torquebox.yml jobs: mail_notifier: job: MailNotifier cron: '*/5 * *

    * * ?' description: Deliver reminder email class MailNotifier def run send_reminder_notification end def send_reminder_notification puts "Sending mail ..." #UserMailer.reminder_email(User.find(1)).deliver end end Monday 26 March 12
  9. Services Long running services with 3 line configuration Full access

    to the Rails environment JVM threads! Monday 26 March 12
  10. Services config/torquebox.yml services: MessageNotifier: config: name: hello class MessageNotifier def

    initialize(opts={}) @name = opts['name'] end def start Thread.new { run } end def stop @done = true end def run until @done do_something #todo sleep(5) end end end Monday 26 March 12
  11. Messaging JMS supported out-of-the-box (HornetQ) Advanced Messaging Queuing Protocol (AMQP)

    - RabbitMQ Supports STOMP out of the box Monday 26 March 12
  12. Messaging In a long running service - ... def do_something

    puts "Checking the queue for messages ..." bunny = Bunny.new(:logging => false) # start a communication session with the amqp server bunny.start # declare a queue q = bunny.queue(@name) # get message from the queue msg = q.pop[:payload] puts "This is the message: " + msg.to_s # close the connection bunny.stop end Monday 26 March 12
  13. Backgroundable As easy as A, B, C ... class User

    < ActiveRecord::Base include TorqueBox::Messaging::Backgroundable always_background :send_signup_notification validates_confirmation_of : ... def send_signup_notification(user) UserMailer.welcome_email(user).deliver end end Monday 26 March 12
  14. Clustering torquebox run --clustered Does everything Servers in a LAN

    are automatically clustered Top it up with mod_cluster from JBoss Monday 26 March 12
  15. Caching TorqueBox provides an implementation of the Rails 3.x ActiveSupport::Cache::Store

    that exposes your application to the Infinispan data grid. Uses Infinispan by default Can utilize the cluster with minimal config Share the cache across the cluster - FTW! Monday 26 March 12
  16. Risks - Version 2 is quite stable but still at

    RC1 - Upgrading JRuby will not help sometimes - You will be on a cutting edge open-source technology but documentation is great, help is available online and on IRC Monday 26 March 12