SlideShare a Scribd company logo
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

More Related Content

PDF
JRuby in the enterprise
PDF
Java 8 in Anger (JavaOne)
PPTX
Quarkus bootstrap 2020
PPT
Java, Ruby & Rails
PDF
Cloud Native Java:GraalVM
KEY
Introduction to JRuby
PDF
Introduction to JRuby
PDF
Migrating to java 9 modules
JRuby in the enterprise
Java 8 in Anger (JavaOne)
Quarkus bootstrap 2020
Java, Ruby & Rails
Cloud Native Java:GraalVM
Introduction to JRuby
Introduction to JRuby
Migrating to java 9 modules

What's hot (20)

PDF
Micronaut: Evolving Java for the Microservices and Serverless Era
PPTX
Faster java ee builds with gradle [con4921]
PDF
Migrating to Java 9 Modules
PDF
Coding Your Way to Java 12
KEY
Ruby Plugins for Jenkins
PPTX
Why jakarta ee matters (ConFoo 2021)
PPTX
How we took our server side application to the cloud and liked what we got
PDF
Better Career with Java
PDF
Migration tales from java ee 5 to 7
PDF
MongoDB training for java software engineers
PPTX
Top 50 java ee 7 best practices [con5669]
PPTX
Migrating to Java 11
PDF
Javantura v4 - JVM++ The GraalVM - Martin Toshev
PPTX
Preparing for java 9 modules upload
PDF
Micronaut Deep Dive - Devnexus 2019
PDF
Building Asynchronous Applications
PPTX
Developing in the Cloud
PPTX
Using Apache Camel as AKKA
KEY
Your fist RubyMotion Application
PPTX
Java script nirvana in netbeans [con5679]
Micronaut: Evolving Java for the Microservices and Serverless Era
Faster java ee builds with gradle [con4921]
Migrating to Java 9 Modules
Coding Your Way to Java 12
Ruby Plugins for Jenkins
Why jakarta ee matters (ConFoo 2021)
How we took our server side application to the cloud and liked what we got
Better Career with Java
Migration tales from java ee 5 to 7
MongoDB training for java software engineers
Top 50 java ee 7 best practices [con5669]
Migrating to Java 11
Javantura v4 - JVM++ The GraalVM - Martin Toshev
Preparing for java 9 modules upload
Micronaut Deep Dive - Devnexus 2019
Building Asynchronous Applications
Developing in the Cloud
Using Apache Camel as AKKA
Your fist RubyMotion Application
Java script nirvana in netbeans [con5679]
Ad

Similar to JRuby and Google App Engine (20)

PPT
Practical JRuby
PPT
Ruby On Google App Engine 2nd Athens Ruby Me
PPT
Dynamic Languages on the JVM
PDF
Rails On Spring
PDF
Bitter Java, Sweeten with JRuby
PPT
JRuby in a Java World
PDF
JRuby - Programmer's Best Friend on JVM
PDF
Ruby on Google App Engine: Upgrade to Google App "Turbo" Engine
PPTX
Day 8 - jRuby
PPT
Charles Nutter Presentations
PDF
Why don't you Groovy?
PPTX
[2014.11.18] java script execution environment survey
PPTX
Exploring Ruby on Rails and PostgreSQL
PPT
Rollin onj Rubyv3
ODP
Dynamic Languages Web Frameworks Indicthreads 2009
PDF
Introduction to JRuby
PPT
Java2 platform
PDF
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularity
PDF
Ruby BDD for Java
PPT
Introduction to Ruby on Rails
Practical JRuby
Ruby On Google App Engine 2nd Athens Ruby Me
Dynamic Languages on the JVM
Rails On Spring
Bitter Java, Sweeten with JRuby
JRuby in a Java World
JRuby - Programmer's Best Friend on JVM
Ruby on Google App Engine: Upgrade to Google App "Turbo" Engine
Day 8 - jRuby
Charles Nutter Presentations
Why don't you Groovy?
[2014.11.18] java script execution environment survey
Exploring Ruby on Rails and PostgreSQL
Rollin onj Rubyv3
Dynamic Languages Web Frameworks Indicthreads 2009
Introduction to JRuby
Java2 platform
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularity
Ruby BDD for Java
Introduction to Ruby on Rails
Ad

Recently uploaded (20)

PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Encapsulation theory and applications.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Big Data Technologies - Introduction.pptx
PDF
Approach and Philosophy of On baking technology
PDF
Machine learning based COVID-19 study performance prediction
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Empathic Computing: Creating Shared Understanding
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Machine Learning_overview_presentation.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Spectroscopy.pptx food analysis technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Reach Out and Touch Someone: Haptics and Empathic Computing
Encapsulation theory and applications.pdf
Review of recent advances in non-invasive hemoglobin estimation
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Big Data Technologies - Introduction.pptx
Approach and Philosophy of On baking technology
Machine learning based COVID-19 study performance prediction
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Network Security Unit 5.pdf for BCA BBA.
The Rise and Fall of 3GPP – Time for a Sabbatical?
Empathic Computing: Creating Shared Understanding
“AI and Expert System Decision Support & Business Intelligence Systems”
The AUB Centre for AI in Media Proposal.docx
Machine Learning_overview_presentation.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Spectroscopy.pptx food analysis technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Advanced methodologies resolving dimensionality complications for autism neur...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...

JRuby and Google App Engine

  • 2. 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
  • 3. 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
  • 4. 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)
  • 5. 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
  • 6. 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
  • 7. Performance Performance numbers using this project
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Demo 1 Swing UI in Ruby
  • 12. JVM Benefits World class garbage collection Performance Native Threads (really run rails in parallel) Pretty much runs on any hardware
  • 15. 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
  • 16. 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
  • 17. Known Problems ObjectSpace is disabled Slower startup time C extension incompatibilities
  • 18. Rails on the Google App Engine By Josh Moore
  • 19. 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
  • 21. 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.
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. Rails Some Modification required Datamapper based TinyDS based
  • 27. 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