Date post: | 15-May-2015 |
Category: |
Technology |
Upload: | brian-sam-bodden |
View: | 6,997 times |
Download: | 0 times |
Bitter Java? Sweeten with JRuby
Brian Sam-Bodden
Java Today
Java is a 10+ year old programming language
Java is Dead
Long live Java!
Java is the new COBOL
Java is not going anywhere
Because Java is everywhere!
But Java is not perfect
and it is adjusting to keep up
Java has its jewels
JDBC, JMS, Servlets
and its blemishes...
EJB < 3, JSF
But we have a secret weapon...
presenting the amazing, highly tuned, multi-platform computing engine that dominates the
present and permeates the future
On this corner...
The JVM
The are more than 200+ languages implementations for the Java VM
The Java VM is like that neighborhood with low taxes and good schools... everyone wants in
Regardless of where we go with Java “the language”, Java “the platform” is here to stay
Groovy, JRuby and all the new kids on the block are just new additions to our beloved Swiss army knife
What’s Missing?
Java is solid on the server-side
Java powers the enterprise
Web development with Java has not been all that successful in the presentation tier
Dynamic languages and frameworks based on dynamic languages have proved to be better suited for this
Why Ruby?
Why not?
Rubyis...
✓Object-Oriented
✓Reflective ✓Dynamic
✓ Interpreted
✓General Purpose
✓ Multi-paradigm
✓ Garbage-collected
✓Elegant
Created by Yukihiro “Matz” Matsumoto
Developed in 1993, released in 1995
Blended parts of his favorite languages:
Perl, Smalltalk, Sather, Eiffel, CLU, Ada and Lisp
More popular than Python in Japan
Ruby Ideals:
Programming should be fun!
Principle of Least Surprise
“I believe people want to express themselves when they program. They don’t want to fight with the
language. Programming languages must feel natural to programmers.”
Matz
JRuby
A non-Java language for the Java platform
A Ruby interpreter written in Java
Started life in 2001
Current version is 1.0 (1.1b1)
Open Source
Oh, come on! Grow up!
Ruby libraries from Java (like ActiveRecord)
Java libraries from Ruby (Swing, SWT)
➡Using Bean Scripting Framework (JDK <= 1.5)
➡Using JSR 223 Scripting API (JDK > 1.5)
RubyGems comes pre-installed
Mongrel supports JRuby
Rails just works
No native extensions (unless by native you mean Java ;-)
JRuby does not produce bytecode artifacts for the Ruby code (yet!)
This is key difference with Groovy*
Corporate backing :-) Sun and Thoughtworks have folks working on JRuby full-time
All you need to run JRuby is the Java JDK (=>1.4)
Familiar?
pure Ruby with Java players
http://www.tc.umn.edu/%7Eenebo/webstart/jirb-console/console.jnlp
Let’s try some interactive JRuby
Fire up the JRuby console using Java Web Start
Java version of IRB (Interactive RuBy) tool
IRB is the best to get acquainted with Ruby
A Simple Comparison
Let’s do some file I/O...
First we need a text file
package com.integrallis;
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;
public class MyFileReader {
public static void main(String[] args) { try { BufferedReader in = new BufferedReader(new FileReader("read_me.txt")); String str; while ((str = in.readLine()) != null) { System.out.println(str); } in.close(); } catch (IOException e) { e.printStackTrace(); } }}
Let’s open the text file and print out its contents
...in Java
Let’s do it the Ruby way!
But wait! This just in...
... Ruby encapsulates common behaviors
➡ A one-liner version, yet is readable!
Why?
For Web applications...
Best of both worlds:
➡Dynamic-Framework on the Front End (Rails)
➡Solid Back End battle tested technologies (Spring/EJB3)
Got API-itis?
Ruby’s ability to create concise DSLs
paired with Java’s richness of APIs and frameworks
Java APIs are robust, fully-featured, flexible...
...which makes them complex
A JRuby DSL can help us in the 80-20 scenarios
Got API-itis? JRuby+SWT
There are JRuby DSLs all ready to use...
Today!
Raven - Wrapper for Rake, RubyGems and Maven
AntBuilder - Wrapper for Ant
JRake - Wrapper for Rake
ActiveRecord-JDBC - OR-Wrapping
JtestR - Test Java code with the best Ruby testing tools
JRuby on Rails
Java & JEE
the most prevalent language
the most complete enterprise platform
a rich ecosystem of web frameworks
a vibrant open source community
plagued by mediocre web frameworks
not well suited for rapid prototyping
in need of a dynamic language web framework
one level of abstraction too low for the web
Java & JEE
Who could help Java on the Web Tier?
Ruby on Rails
a revolutionary web framework
complete MVC solution
fast prototyping
killer AJAX support
a DSL for the web
leading the pack on the web 2.0 front
born from a product, not a committee
a vibrant open source community
Ruby on Rails
JRuby on Rails
the agility of rails - the scalability of Java
JRuby likely to surpass Ruby in speed
sneak Ruby and RoR into the enterprise!
JRuby on Rails
JRuby on Rails
JRuby on Rails
JEE servers are good at scaling up
no more multi-process management
use JRuby “multi-VM” support
leverage the maturity of the JVM and JEE servers
JRuby on Rails
deploy your Rails app as a WAR
leverage JDBC from ActiveRecord
JRuby & Rapid Spring Prototyping
JRuby+Spring RAD
a simple example by the folks at jobster
use JRuby for rapid prototyping
Spring controller that delegates to a JRuby controller
JRuby controllers live alongside your JSPs
JRuby+Spring RAD
Simple JRuby controller
JRuby+Spring RAD
JSP view provides input to the Ruby controller
JRuby+Spring RAD
JSP view provides input to the Ruby controller
JRuby+Spring RAD
this experimental library supports:
✓access to Spring beans from JRuby code
✓ access to Hibernate queries
JRuby on Springy Rails
JRoR on Spring
✓use rails-integration plugin
✓ expose WebApplicationContext in a RoR controller
Chris Nelson’s work
✓include Spring - Spring plugin for JRuby
JRoR on Spring
✓install goldspike rails-integration plugin on you JRoR app
✓ rake war:standalone:create to package a WAR with:
➡Your RoR app
➡JRuby and Rails libraries
JRoR on Spring
rake war:standalone:create in action:
JRoR on Spring
generated WARs work on many servers:
✓Tomcat
✓Jetty
✓Glassfish
✓JBoss
JRoR on Spring✓ add Chris’ Spring module:
JRoR on Spring
✓Add Spring application
✓Expand the generated WAR
➡Application Code
➡ Libraries (Jars)
➡Config Files
JRoR on Spring
✓ access your Spring beans from a RoR controller
JRoR on Spring
✓add a new face to your Spring applications
✓ leverage thousands of open source projects
✓leverage the good parts of JEE like JDBC and JMS
ResourcesJRuby
www.jruby.orgrubyforge.org/projects/jruby-extras
JRuby Rails Integrationwww.headius.com/jrubywiki/index.php/Rails_Integration
headius.blogspot.com/2006/11/advanced-rails-deployment-with-jruby.html
RAD Spring Prototyping with JRubythebogles.com/blog/projects/ruby-on-spring/
www.botspiritcompany.com/src/springruby/example_ruby_spring.html
Chris Nelson’s Workmysterycoder.blogspot.com/2007/06/spring-jruby.html
mysterycoder.blogspot.com/2007/06/include-spring.html