JRuby in the enterprise

Jerry Gulla
Jerry GullaDirector, Web Engineering at Acquia um Acquia
JRuby in the Enterprise
About Me
Advisory Engineer at Constant Contact

Spent several years working for Sun/Javasoft in
the distributed computing group

Email: jerry@gulla.com

Twitter: @jerrygulla

Github: github.com/jgulla
What is JRuby?


Just a Ruby interpreter running on the JVM

Ruby 1.8.7 & 1.9.2 compatible.
Text-To-Join

Distributed app

Written in Ruby as a Rails app

Four rails apps, actually

UI, API, Console, SMS Processor.
JRuby in the enterprise
JRuby in the enterprise
JRUBY.ORG
Why Ruby?


Ruby is…A dynamic, open source programming
language with a focus on simplicity and
productivity. It has an elegant syntax that is natural
to read and easy to write.
JRuby in the enterprise
WHY SHOULD YOU SWITCH TO RUBY? IF YOU ARE HAPPY WITH
 PERL OR PYTHON, YOU DON'T HAVE TO. BUT IF YOU DO FEEL
 THERE MUST BE A BETTER LANGUAGE, RUBY MAY BE YOUR
   LANGUAGE OF CHOICE. LEARNING A NEW LANGUAGE IS
  HARMLESS. IT GIVES YOU NEW IDEAS AND INSIGHTS. YOU
 DON'T HAVE TO SWITCH, JUST LEARN AND TRY IT. YOU MAY
   FIND YOURSELF COMFORTABLE ENOUGH WITH RUBY TO
                DECIDE TO SWITCH TO IT.

           -- YUKIHIRO MATSUMOTO (“MATZ”)
 HTTP://LINUXDEVCENTER.COM/PUB/A/LINUX/2001/11/29/
                      RUBY.HTML
Rails 3.x

“Optimized for programmer happiness”.
Why Not Grails?

Grails is great

Not as big of a break with Java

Wanted a bigger shift to bring new ways of doing
things into perspective.
Why JRuby?
High performance

  JVM Highly Tuned

Real threading

  Many “pure Ruby” shops using JRuby just for
  this

Vast array of libraries

  No need to abandon Java libraries.
Why JRuby Continued

Deployment Options

  Can deploy as a WAR file

Monitoring Options

  JVM tools to monitor all available

Speed of Development.
Don’t Freak the Ops
     Guys Out
  HTTP://UPLOAD.WIKIMEDIA.ORG/WIKIPEDIA/EN/F/F4/THE_SCREAM.JPG
http://commons.wikimedia.org/wiki/File:Everest-fromKalarPatar.jpg




          Scalability
Concurrency is a Myth




 HTTP://WWW.IGVITA.COM/2008/11/13/CONCURRENCY-IS-A-MYTH-IN-RUBY/
ILYA GRIGORIK
                HTTP://WWW.IGVITA.COM/ABOUT/




 JRUBY IS, IN FACT, THE ONLY RUBY IMPLEMENTATION
THAT WILL ALLOW YOU TO NATIVELY SCALE YOUR RUBY
 CODE ACROSS MULTIPLE CORES. BY COMPILING RUBY
 TO BYTECODE AND EXECUTING IT ON THE JVM, RUBY
THREADS ARE MAPPED TO OS THREADS WITHOUT A GIL
IN BETWEEN - THAT'S AT LEAST ONE REASON TO LOOK
                     INTO JRUBY.
   HTTP://WWW.IGVITA.COM/2008/11/13/CONCURRENCY-IS-A-MYTH-IN-RUBY/
“Enterprise” JRuby
“Enterprise” JRuby Cont.
Maven

Liquibase

JDBC

JNDI

Containers

You’re favorite commercial, open-source or home-
grown library.
Let’s Begin
          http://commons.wikimedia.org/wiki/File:Begin_road.JPG
http://commons.wikimedia.org/wiki/File:Panama_Canal_Locks_Construct.jpeg




    Set up Ruby
Ruby Version Manager




    HTTPS://RVM.BEGINRESCUEEND.COM/
Installing RVM


Via git repo (preferred method)
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Other methods at https://rvm.beginrescueend.com/rvm/install/
Install JRuby (via rvm)
rvm install jruby-1.6.3

When it’s done, use it:

  rvm use jruby-1.6.3

List of other ruby versions to install:

  rvm list known

List versions of ruby you have installed:

  rvm list
JRuby Without RVM


Assume Java, JRuby in your path

jruby -S gem ...
Install Rails


gem install rails

Can pick a specific version with a
“-v” flag.
Create Your Rails App
Jruby.org hosts a rails template

  Sets things up to run under native ruby or JRuby

  You can do this yourself, but it’s handier to start this
  way

rails new uberconf_demo --template=http://jruby.org

  Works with native ruby or JRuby.
Jruby.org Template
JRuby in the enterprise
Demo
Packaging Your App




   http://en.wikipedia.org/wiki/File:Distribution_differences.jpg
JRuby/Rails/WAR files
In the Java world, WAR files are standard

Fortunately, we have bundler

  Gem to package your Rails app as a WAR file

Can even make it “Executable” for stand-alone
testing!

http://caldersphere.rubyforge.org/warbler/
Install it


Easy!

gem install warbler
Run It




             http://en.wikipedia.org/wiki/File:Jeanette_Kwakye_cropped.jpg

Easy!

warble war
Other Useful Options
warble compiled    # Feature: precompile all Ruby files

warble config      # Generate a configuration file to customize your archive

warble executable # Feature: make an executable archive

warble gemjar     # Feature: package gem repository inside a war

warble pluginize # Install Warbler tasks in your Rails application

warble version    # Display version of Warbler

warble war       # Create the project war file

warble war:clean # Remove the project war file

warble war:debug # Dump diagnostic information
Maven

In the Java world, Maven is still pretty popular

  For better or for worse

You can use Maven to invoke warbler to package
your app.
JRuby in the enterprise
Database Migrations




http://en.wikipedia.org/wiki/File:Connochaetes_taurinus_-Wildebeest_crossing_river_-East_Africa.jpg
Database Migrations
Rails uses Rake for ActiveRecord migrations

Nice, but

  Hard to scale to multiple developers

  Hard to deploy to QA/Production systems
  without using ruby toolset

  Paranoid DBAs can’t see the SQL before
  running it.
Enter

liquibase.org

Version control for your database

Other frameworks (Grails) will be adopting it for
migrations

Language/Database agnostic.
Liquibase

Nothing special about using Liquibase with Rails

Use ActiveRecord migrations for initial dev/testing,
then migrate to Liquibase

When ready, just take “snapshot” of DB config,
then roll out new Liquibase changesets.
Handy Liquibase Commands
Generate initial changelog:
java -jar liquibase.jar --classpath=mysql-connector-
java-5.1.14-bin.jar --url=jdbc:mysql://localhost/
api_development --driver=com.mysql.jdbc.Driver --
username=demo --password=password --
changeLogFile=db-changelog.xml generateChangeLog

Drop all tables so you can start over:
dropAll

Run updates against a DB:
liquibase --changeLogFile=myChangeLog update

Just output SQL, don’t run: updateSQL
USING
 LIQUIBASE
WITH MAVEN
Liquibase with Rails Directly


https://github.com/redbeard/liquibase-rails

Supposed to add “drop in” migration tasks for
JRuby/Rails.
Liquibase Changeset
JNDI Database Access
       DATABASE.YML
Servlet Filters



You’ll need a custom web.xml config

Copy WARBLER_HOME/web.xml.erb to
  config/web.xml.erb

  Look for it at ~/.rvm/gems/jruby-1.6.2/gems/
  warbler-1.3.1/web.xml.erb
     HTTP://EN.WIKIPEDIA.ORG/WIKI/FILE:DICHROIC_FILTERS.JPG
web.xml.erb Filter Entry
Java Integration

Nothing special, just the usual JRuby/Java
integration

Looks for JARs in the container classpath, WAR or
in yourapp/lib
Calling Java




HTTPS://GITHUB.COM/JRUBY/JRUBY/WIKI/CALLINGJAVAFROMJRUBY
Tips, Tricks and Lessons




 http://en.wikipedia.org/wiki/File:Coolidge_after_signing_indian_treaty.jpg
Warbler Config


generate a warbler config file

warble config
JRuby in the enterprise
Pre-Compile Ruby Classes



config.features = %w(compiled)
Set Min/Max Runtimes
Set JNDI Source Name
Set Root Path for App


By default, the root of your app is the WAR name

This may not be what you want.
Set the Root Path
Create file jboss-web.xml in root of app directory




Tell warbler to include it via warble.rb
Bundle Up Files into A
Gem
Can be much faster to build/deploy depending on
how you do it (there are a lot of files!)

Make sure to test it
Make Your War Executable


Command Line:
warble executable war

 In warble.rb:
 config.features = %w(executable)
Rails Console


Rails has a “Console Mode” for testing

Great for trying out ActiveRecord queries, etc.

Just use “rails console” to invoke it.
Gem Versions

Be sure to lock down Gem versions when you’re
happy with them

Don’t want any last minute “upgrades!”

Use bundler

Put Gemfile.lock under source control.
Basic Versioning Rules
After bundling, always check your Gemfile.lock
into version control

After updating your Gemfile, always run
bundle install first.

When running an executable, ALWAYS use
bundle exec [command]

   The only exception is the rails command!
http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/
Handle Database Connection Outage




This is the “default” 500 error page.
You can Customize this
but...


You can do better
Create “Status” URL


Want a well known URL that Nagios or a Load
Balancer can check

Should return something useful (and specific to
your test).
Insert Your Own Middleware
Create lib/db_check.rb
Insert Your Own Middleware
Insert it into the stack (application.rb)
JRuby in the enterprise
You Now Have Generic Status Ability




Extend for other things useful to your application.
HTTP://TORQUEBOX.ORG/
IDEs
JRuby in the enterprise
JRuby in the enterprise
JRuby in the enterprise
JRuby in the enterprise
Resources
Books
Websites

http://www.jruby.org/

http://jrubyconf.com/

http://vimeo.com/groups/87639
(talks from 2010 JRubyConf)

http://www.engineyard.com/open-source
Twitter Users


http://twitter.com/#!/headius

http://twitter.com/#!/nicksieger

http://twitter.com/#!/jruby
Questions?
Thank You!
Don’t forget to fill out a session evaluation!
1 von 83

Recomendados

Why JRuby? von
Why JRuby?Why JRuby?
Why JRuby?Fiona Tay
22.8K views57 Folien
Migrate to JRuby von
Migrate to JRubyMigrate to JRuby
Migrate to JRubyIan Yang
734 views52 Folien
Polyglot Plugin Programming von
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin ProgrammingAtlassian
1.1K views95 Folien
Euruko 2012 - JRuby von
Euruko 2012 - JRubyEuruko 2012 - JRuby
Euruko 2012 - JRubyCharles Nutter
2.2K views67 Folien
Bitter Java, Sweeten with JRuby von
Bitter Java, Sweeten with JRubyBitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRubyBrian Sam-Bodden
3.2K views64 Folien
Quarkus bootstrap 2020 von
Quarkus bootstrap 2020Quarkus bootstrap 2020
Quarkus bootstrap 2020Maksym Govorischev
96 views43 Folien

Más contenido relacionado

Was ist angesagt?

Ruby On Rails Ecosystem von
Ruby On Rails EcosystemRuby On Rails Ecosystem
Ruby On Rails EcosystemAndrew Chalkley
1.2K views33 Folien
Ruby for devops von
Ruby for devopsRuby for devops
Ruby for devopsAdam Klein
382 views67 Folien
Inside The Java Virtual Machine von
Inside The Java Virtual MachineInside The Java Virtual Machine
Inside The Java Virtual Machineelliando dias
1.1K views51 Folien
Dynamic Languages Web Frameworks Indicthreads 2009 von
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Arun Gupta
1.3K views61 Folien
Cloud Foundry 百日行 振り返り von
Cloud Foundry 百日行 振り返りCloud Foundry 百日行 振り返り
Cloud Foundry 百日行 振り返りnota-ja
942 views30 Folien
GraalVM - MadridJUG 2019-10-22 von
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22Jorge Hidalgo
510 views61 Folien

Was ist angesagt?(20)

Ruby for devops von Adam Klein
Ruby for devopsRuby for devops
Ruby for devops
Adam Klein382 views
Inside The Java Virtual Machine von elliando dias
Inside The Java Virtual MachineInside The Java Virtual Machine
Inside The Java Virtual Machine
elliando dias1.1K views
Dynamic Languages Web Frameworks Indicthreads 2009 von Arun Gupta
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009
Arun Gupta1.3K views
Cloud Foundry 百日行 振り返り von nota-ja
Cloud Foundry 百日行 振り返りCloud Foundry 百日行 振り返り
Cloud Foundry 百日行 振り返り
nota-ja942 views
GraalVM - MadridJUG 2019-10-22 von Jorge Hidalgo
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22
Jorge Hidalgo510 views
Dynamic Languages on the JVM von elliando dias
Dynamic Languages on the JVMDynamic Languages on the JVM
Dynamic Languages on the JVM
elliando dias608 views
MacRuby: What is it? and why should you care? von Joshua Ballanco
MacRuby: What is it? and why should you care?MacRuby: What is it? and why should you care?
MacRuby: What is it? and why should you care?
Joshua Ballanco1.3K views
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes von Charlie Gracie
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesJfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Charlie Gracie1.4K views
GraalVM - OpenSlava 2019-10-18 von Jorge Hidalgo
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18
Jorge Hidalgo310 views
Rails On Spring von swamy g
Rails On SpringRails On Spring
Rails On Spring
swamy g1.9K views
Introduction to JRubMe von pehrlich
Introduction to JRubMeIntroduction to JRubMe
Introduction to JRubMe
pehrlich379 views
Ola Bini J Ruby Power On The Jvm von deimos
Ola Bini J Ruby Power On The JvmOla Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The Jvm
deimos1.1K views
An introduction to the ruby ecosystem von Geison Goes
An introduction to the ruby ecosystemAn introduction to the ruby ecosystem
An introduction to the ruby ecosystem
Geison Goes1.8K views
Why we use mruby with Perl5? von karupanerura
Why we use mruby with Perl5?Why we use mruby with Perl5?
Why we use mruby with Perl5?
karupanerura 4.7K views
Aspect Orientated Programming in Ruby von deimos
Aspect Orientated Programming in RubyAspect Orientated Programming in Ruby
Aspect Orientated Programming in Ruby
deimos2.5K views
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat) von OpenBlend society
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)
Byteman and The Jokre, Sanne Grinovero (JBoss by RedHat)

Similar a JRuby in the enterprise

JRuby in a Java World von
JRuby in a Java WorldJRuby in a Java World
JRuby in a Java WorldMark Menard
459 views9 Folien
JRuby deployments von
JRuby deploymentsJRuby deployments
JRuby deploymentsberninme
238 views8 Folien
TorqueBox von
TorqueBoxTorqueBox
TorqueBoxbobmcwhirter
1.2K views114 Folien
Practical JRuby von
Practical JRubyPractical JRuby
Practical JRubyDavid Keener
1.2K views38 Folien
Instruments ruby on rails von
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on railspmashchak
1.3K views11 Folien
JRuby Basics von
JRuby BasicsJRuby Basics
JRuby Basicselliando dias
1.1K views20 Folien

Similar a JRuby in the enterprise(20)

JRuby in a Java World von Mark Menard
JRuby in a Java WorldJRuby in a Java World
JRuby in a Java World
Mark Menard459 views
JRuby deployments von berninme
JRuby deploymentsJRuby deployments
JRuby deployments
berninme238 views
Instruments ruby on rails von pmashchak
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on rails
pmashchak1.3K views
Ruby on Rails survival guide of an aged Java developer von gicappa
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developer
gicappa1.2K views
Crank Up Your Apps With TorqueBox von Jim Crossley
Crank Up Your Apps With TorqueBoxCrank Up Your Apps With TorqueBox
Crank Up Your Apps With TorqueBox
Jim Crossley3.7K views
Jruby synergy-of-ruby-and-java von Keith Bennett
Jruby synergy-of-ruby-and-javaJruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-java
Keith Bennett1.1K views
Capybara and cucumber with DSL using ruby von Deepak Chandella
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using ruby
Deepak Chandella236 views
Introduction To Rails von Eric Gruber
Introduction To RailsIntroduction To Rails
Introduction To Rails
Eric Gruber1.2K views
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber von Udaya Kiran
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Udaya Kiran183 views
JBoss, Rails and the cloud von elliando dias
JBoss, Rails and the cloudJBoss, Rails and the cloud
JBoss, Rails and the cloud
elliando dias596 views
Ruby and Rails short motivation von jistr
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
jistr592 views
Scala on Rails #rakutentech von Kazuhiro Sera
Scala on Rails #rakutentechScala on Rails #rakutentech
Scala on Rails #rakutentech
Kazuhiro Sera4.6K views
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010 von Arun Gupta
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Arun Gupta1.7K views
Ruby on Rails : First Mile von Gourab Mitra
Ruby on Rails : First MileRuby on Rails : First Mile
Ruby on Rails : First Mile
Gourab Mitra982 views

Último

Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen... von
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...NUS-ISS
28 views70 Folien
Igniting Next Level Productivity with AI-Infused Data Integration Workflows von
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Safe Software
225 views86 Folien
Voice Logger - Telephony Integration Solution at Aegis von
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at AegisNirmal Sharma
17 views1 Folie
SAP Automation Using Bar Code and FIORI.pdf von
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdfVirendra Rai, PMP
19 views38 Folien
Melek BEN MAHMOUD.pdf von
Melek BEN MAHMOUD.pdfMelek BEN MAHMOUD.pdf
Melek BEN MAHMOUD.pdfMelekBenMahmoud
14 views1 Folie
Future of Learning - Yap Aye Wee.pdf von
Future of Learning - Yap Aye Wee.pdfFuture of Learning - Yap Aye Wee.pdf
Future of Learning - Yap Aye Wee.pdfNUS-ISS
41 views11 Folien

Último(20)

Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen... von NUS-ISS
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
NUS-ISS28 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows von Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software225 views
Voice Logger - Telephony Integration Solution at Aegis von Nirmal Sharma
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at Aegis
Nirmal Sharma17 views
Future of Learning - Yap Aye Wee.pdf von NUS-ISS
Future of Learning - Yap Aye Wee.pdfFuture of Learning - Yap Aye Wee.pdf
Future of Learning - Yap Aye Wee.pdf
NUS-ISS41 views
Combining Orchestration and Choreography for a Clean Architecture von ThomasHeinrichs1
Combining Orchestration and Choreography for a Clean ArchitectureCombining Orchestration and Choreography for a Clean Architecture
Combining Orchestration and Choreography for a Clean Architecture
ThomasHeinrichs169 views
DALI Basics Course 2023 von Ivory Egg
DALI Basics Course  2023DALI Basics Course  2023
DALI Basics Course 2023
Ivory Egg14 views
AI: mind, matter, meaning, metaphors, being, becoming, life values von Twain Liu 刘秋艳
AI: mind, matter, meaning, metaphors, being, becoming, life valuesAI: mind, matter, meaning, metaphors, being, becoming, life values
AI: mind, matter, meaning, metaphors, being, becoming, life values
Understanding GenAI/LLM and What is Google Offering - Felix Goh von NUS-ISS
Understanding GenAI/LLM and What is Google Offering - Felix GohUnderstanding GenAI/LLM and What is Google Offering - Felix Goh
Understanding GenAI/LLM and What is Google Offering - Felix Goh
NUS-ISS41 views
Attacking IoT Devices from a Web Perspective - Linux Day von Simone Onofri
Attacking IoT Devices from a Web Perspective - Linux Day Attacking IoT Devices from a Web Perspective - Linux Day
Attacking IoT Devices from a Web Perspective - Linux Day
Simone Onofri15 views
TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensors von sugiuralab
TouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective SensorsTouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective Sensors
TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensors
sugiuralab15 views
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum... von NUS-ISS
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
NUS-ISS34 views

JRuby in the enterprise