• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
JRuby and Google App Engine

JRuby and Google App Engine



Introduction to JRuby and also running Rails on the Google App Engine.

Introduction to JRuby and also running Rails on the Google App Engine.



Total Views
Views on SlideShare
Embed Views



2 Embeds 47

http://www.slideshare.net 46
http://www.slashdocs.com 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    JRuby and Google App Engine JRuby and Google App Engine Presentation Transcript

    • JRuby By Josh Moore
    • Who am I Josh Moore www.codingforrent.com twitter.com/codingforrent http://github.com/joshsmoore Ruby Watir at work Rails on the Google App Engine for hobby maintain rails_dm_datastore gem
    • Contents What is JRuby? Quick compare to MRI 1.8.7 and 1.9.1 Gem Compatibility Java Integration Performance JRuby on Rails Short comings Google App Engine
    • What is JRuby Ruby interpreter on top of the JVM Started in 2001 Runs rails in 2006 Compatible syntax 1.8.7/1.9.1(mostly)
    • Quick Comparison MRI 1.8.7 MRI 1.9.1 JRuby Gems Compatible Fairly Compatible Fairly Compatible Rails yes yes (Rails3) yes Speed slow fast medium to fast Green threads native threads native threads Pros Compatibility Fast medium Fast Better syntax? Java integration Ruby 1.8.x and 1.9 syntax Cons Slow ruby compatibility C extension with problems compatibility problems
    • Ruby Gems Pure Ruby gems, no problem Gems with C extensions, have problems C extensions can work if invoked using the Foreign Function Invocation interface. Nokogiri Switch to using Java instead of C Hpricot Some gems are JRuby only Jemini
    • Performance Performance numbers using this project
    • Java Integration - Libraries Any library in the classpath can be accessed Maven is a Build/depedency management to for Java, acts like gems in ruby Similar to rake and gems put together Gemcutter - 10,467 gems Maven - 158,643 archives, thats a lot Coming with JRuby 1.5.0
    • Java Integration - Code nil == null self == this Java interfaces mapped to modules to_java converts ruby objects to Java objects Closer Convention Implement Java interfaces as blocks b = JButton.new('click me') b.add_action_listener do |event| JOptionPane.show_message_dialog nil, "Clicked" end
    • Java Integration - Code Getters and Setters Java Java in JRuby getA and setA a and a= Object Creation Java Java in JRuby new Object(1) Object.new 1
    • Demo 1 Swing UI in Ruby
    • JVM Benefits World class garbage collection Performance Native Threads (really run rails in parallel) Pretty much runs on any hardware
    • JVM Optimization
    • JVM Optimization
    • Rails It just works (like most pure ruby libraries) Only deployment is different you can actually deploy and test in MRI and then deploy using JRuby deploy using warbler
    • Deploying Rails Packaged into WAR (Web Application Archive) Deployable on any Java Application server, or any Java hosting service. Including cloud hosting like Google App Engine
    • Known Problems ObjectSpace is disabled Slower startup time C extension incompatibilities
    • Rails on the Google App Engine By Josh Moore
    • What is it? Cloud hosting solution provided by Google. Even more "cloudish" (ie less control and even easier scaling) then heroku All you do is submit your code and it runs you have no control over where it runs or what it is running on or even how many instances are running. Getting lots of request GAE simply starts up more instances of your app automatically. Computer resources scaled 100% dynamically Built for scalability, including sharding of data
    • Architecture
    • Persistence - Datastore No RDMS Datastore Fast Not a relational database No SQL, GQL instead Some fast SQL operations are slow Sums/counts are not really efficient so it is best to keep running totals. Joining can be very inefficient All these differences can be overcome, it just requires a paradigm shift.
    • Strengths Fluid scalability no configuration required Fairly complete API set Persistence designed for scalability Everything designed for dynamic scalability No need to worry about or configure anything on the server side
    • The Downsides/Restrictions Officially Java and Python Ruby support not official Restrictive Only 30 seconds per request (spin up time) Only one set of rules Cannot write to file system from app Code restrictions No Threads and other API restrictions Absolutely no C code
    • JRuby on GAE Tools - http://code.google.com/p/appengine-jruby/ Project Run by John Woodell (Google employee) Also wraps the local development environment Work from MRI 1.8.7 no need to mess with jruby Provide API wrappers for google services Rack adapter - Rails, Sinatra, or custom Rails patches provided Datamapper adapter No ActiveRecord
    • Rails Some Modification required Datamapper based TinyDS based
    • Demo 2
    • Why do I use JRuby and GAE I Learned Java in College Like to atleast have a chance of knowing what is going on under the hood GAE Still in its infancy so still lots of work to be done
    • Question?
    • http://api.wefeelfine.org:8080/ShowFeelings? returnfields=feeling&limit=1&conditions=1 http://shootout.alioth.debian.org/u32/benchmark.php? test=all&lang=yarv&lang2=ruby http://blog.pluron.com/2009/05/ruby-19-performance.html http://blog.headius.com/2009/04/how-jruby-makes-ruby-fast. html http://github.com/acangiano/ruby-benchmark-suite http://www.jarvana.com/jarvana/info/repository_statistics