Ruby on Rails in GlassFish Vivek.Pandey@Sun.COM http://weblogs.java.net/blog/vivekp/ Sun Microsystems Ruby On Rails in GlassFish 1
Agenda Introduction to RoR What is JRuby? GlassFish overview RoR on GlassFish > GlassFish gem > GlassFish v2 Update Center Module > Why JRuby on GlassFish? > Known Issues > Success Story Q&A Ruby On Rails in GlassFish 2
Introduction to RoR Ruby On Rails in GlassFish 3
Introduction to RoR RoR is Ruby on Rails Ruby > A dynamic object oriented and open source language Rails > Pure Ruby implementation > Web application framework Develop database backed web applications MVC pattern Generators for Model, View, Controller Easy to use ORM Ruby rake db:migrate Scaffolding Generate model, views and controller for CRUD applications Ruby On Rails in GlassFish 4
Rails MVC Browser Controller View Model DB Ruby On Rails in GlassFish 5
What is JRuby Ruby On Rails in GlassFish 6
What is JRuby? How do you run your Ruby application on the JVM? > Use JRuby 100% pure-java implementation of Ruby language > Ruby 1.8.5 > Best of both worlds: Java + Ruby Two-way Interaction > Invoke Java from Ruby > Invoke Ruby from Java (JSR 223) Embed Ruby interpreter in any Java application Ruby On Rails in GlassFish 7
What is JRuby? Open-source > Distributed under a tri-license (CPL/GPL/LGPL) Core team 4 developers (3 from Sun) Current release - JRuby 1.1RC2 > Planned 1.1 Ruby On Rails in GlassFish 8
JRuby Sample include Java frame = javax.swing.jframe.new("jruby Demo") Ruby On Rails in GlassFish 9
JRuby Sample include Java frame = javax.swing.jframe.new("jruby Demo") label = javax.swing.jlabel.new("hello JRuby World!") frame.getcontentpane.add(label) frame.setdefaultcloseoperation(javax.swing.jframe::ex IT_ON_CLOSE) Ruby On Rails in GlassFish 10
JRuby Sample include Java frame = javax.swing.jframe.new("jruby Demo") label = javax.swing.jlabel.new("hello JRuby World!") frame.getcontentpane.add(label) frame.setdefaultcloseoperation(javax.swing.jframe::exit_on_close) frame.setsize 200, 100 frame.setvisible(true) Ruby On Rails in GlassFish 11
JRuby Sample Ruby On Rails in GlassFish 12
GlassFish Ruby On Rails in GlassFish 13
What is GlassFish? Open Source > CDDL & GPL v2 Java EE 5 Reference Implementation > Included in Java EE 5 SDK Enterprise Quality > High Availability, Clustering >.NET 3.0 Web services interoperability > World Record Performance Community > Sources, bug DBs, discussions at glassfish.java.net > Roadmaps, Architecture Documents Ruby On Rails in GlassFish 14
GlassFish v2 Enterprise ready JavaEE 5 compliant application server > Clustering, Load Balancing, HA,.Net 3.0 Web Services interoperability > Seamless IDE integration NetBeans, Eclipse, Intellij Released Sept 2007 Productized as Sun Java System Application Server 9.1 Ruby On Rails in GlassFish 15
GlassFish v3 Small (Kernel < 100k) Fast (Startup in < 1 second) Embeddable (Run in the same VM as IDE) Modular (Java, Ruby, JavaScript,...) Support for upcoming Java EE 6 profiles Currently under development > Technology Preview 2 release expected around May at JavaOne 2008 Ruby On Rails in GlassFish 16
RoR vs JRoR on GlassFish Ruby On Rails in GlassFish 17
GlassFish v3 Gem Ruby Gem > gem install glassfish > GlassFish server + Grizzly connector for JRuby Adds glassfish_rails in bin directory Green alternative to WEBrick and Mongrel > One command, one process Ruby On Rails in GlassFish 18
Demo GlassFish v3 Gem http://blogs.sun.com/arungupta/entry/announcing_glassfish_gem http://blogs.sun.com/arungupta/tags/totd Ruby On Rails in GlassFish 19
GlassFish v2 Update Center Module GlassFish Update Center > Add new components > Update existing components JRuby on GlassFish module > JRuby 1.0.3 > Goldspike > Rails 1.2.6,... Standalone and Shared WAR Ruby On Rails in GlassFish 20
Ruby On Rails in GlassFish 21
Demo JRuby Update Center Module http://download.java.net/javaee5/screencasts/jruby-update-cente Ruby On Rails in GlassFish 22
Why JRuby on GlassFish? Java EE is tested deployment platform > Co-host Java EE & RoR apps One command, One instance, one process > Green alternative Database Connection Pooling Hot Deployment > No need to restart container OOTB Clustering and High Availability Ruby On Rails in GlassFish 23
Known limitation PermGen Issue > JRuby maps methods from a Ruby class as a Java class > A typical Rails application gets mapped in to hundreds of Java classes > JITs the mapped Java classes in PermGen space What is the solution? > JRuby 1.1 RC2 improved it Cap on number of Ruby methods to be JITted Sharable JITCache among multiple JRuby instance > Configure GlassFish to limit number of JRuby in the JRuby instance pool > DaVinci Machine Ruby On Rails in GlassFish 24
More Scripting in GlassFish JRuby/Rails JavaScript on server > Phobos PHP > Java-PHP Bridge > Quercus Upcoming scripting and framework support > Groovy on Grails > Jython/Django Ruby On Rails in GlassFish 25
Success Story Ruby On Rails in GlassFish 26
mediacast.sun.com Stores large media files (blogs.sun.com partner) Handful models, 4 controllers, Bunch of view templates Development > NetBeans 6, Mercurial plugin, WEBrick, GlassFish v2 UR1, MySQL, JConsole for debugging Production > 2 load-balanced T2000, Solaris 10, JDK 6, SJS AS 9.1 u1, MySQL Details at > http://blog.igorminar.com/2008/01/jruby-on-rails-rewrite-of.html Ruby On Rails in GlassFish 27
Reference GlassFish (glassfish.java.net) > TheAquarium (blogs.sun.com/theaquarium) JRuby on GlassFish Wiki > http://wiki.glassfish.java.net/wiki.jsp?page=jruby JRuby Wiki > http://wiki.jruby.org/wiki/jruby_on_rails_in_glassfish Project Da Vinci Machine > http://openjdk.java.net/projects/mlvm/ Ruby On Rails in GlassFish 28