Jruby On Rails For Glassfishv3
Jruby On Rails For Glassfishv3
Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA 95054 U.S.A.
Part No: 820492605 August 2008
Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product that is described in this document. In particular, and without limitation, these intellectual property rights may include one or more U.S. patents or pending patent applications in the U.S. and in other countries. U.S. Government Rights Commercial software. Government users are subject to the Sun Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its supplements. This distribution may include materials developed by third parties. Parts of the product may be derived from Berkeley BSD systems, licensed from the University of California. UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open Company, Ltd. Sun, Sun Microsystems, the Sun logo, the Solaris logo, the Java Coffee Cup logo, docs.sun.com, Java, and Solaris are trademarks or registered trademarks of Sun Microsystems, Inc. or its subsidiaries in the U.S. and other countries. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the U.S. and other countries. Products bearing SPARC trademarks are based upon an architecture developed by Sun Microsystems, Inc. The OPEN LOOK and SunTM Graphical User Interface was developed by Sun Microsystems, Inc. for its users and licensees. Sun acknowledges the pioneering efforts of Xerox in researching and developing the concept of visual or graphical user interfaces for the computer industry. Sun holds a non-exclusive license from Xerox to the Xerox Graphical User Interface, which license also covers Sun's licensees who implement OPEN LOOK GUIs and otherwise comply with Sun's written license agreements. Products covered by and information contained in this publication are controlled by U.S. Export Control laws and may be subject to the export or import laws in other countries. Nuclear, missile, chemical or biological weapons or nuclear maritime end uses or end users, whether direct or indirect, are strictly prohibited. Export or reexport to countries subject to U.S. embargo or to entities identified on U.S. export exclusion lists, including, but not limited to, the denied persons and specially designated nationals lists is strictly prohibited. DOCUMENTATION IS PROVIDED AS IS AND ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. Copyright 2008 Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, CA 95054 U.S.A. Tous droits rservs.
Sun Microsystems, Inc. dtient les droits de proprit intellectuelle relatifs la technologie incorpore dans le produit qui est dcrit dans ce document. En particulier, et ce sans limitation, ces droits de proprit intellectuelle peuvent inclure un ou plusieurs brevets amricains ou des applications de brevet en attente aux Etats-Unis et dans d'autres pays. Cette distribution peut comprendre des composants dvelopps par des tierces personnes. Certaines composants de ce produit peuvent tre drives du logiciel Berkeley BSD, licencis par l'Universit de Californie. UNIX est une marque dpose aux Etats-Unis et dans d'autres pays; elle est licencie exclusivement par X/Open Company, Ltd. Sun, Sun Microsystems, le logo Sun, le logo Solaris, le logo Java Coffee Cup, docs.sun.com, Java et Solaris sont des marques de fabrique ou des marques dposes de Sun Microsystems, Inc., ou ses filiales, aux Etats-Unis et dans d'autres pays. Toutes les marques SPARC sont utilises sous licence et sont des marques de fabrique ou des marques dposes de SPARC International, Inc. aux Etats-Unis et dans d'autres pays. Les produits portant les marques SPARC sont bass sur une architecture dveloppe par Sun Microsystems, Inc. L'interface d'utilisation graphique OPEN LOOK et Sun a t dveloppe par Sun Microsystems, Inc. pour ses utilisateurs et licencis. Sun reconnat les efforts de pionniers de Xerox pour la recherche et le dveloppement du concept des interfaces d'utilisation visuelle ou graphique pour l'industrie de l'informatique. Sun dtient une licence non exclusive de Xerox sur l'interface d'utilisation graphique Xerox, cette licence couvrant galement les licencis de Sun qui mettent en place l'interface d'utilisation graphique OPEN LOOK et qui, en outre, se conforment aux licences crites de Sun. Les produits qui font l'objet de cette publication et les informations qu'il contient sont rgis par la legislation amricaine en matire de contrle des exportations et peuvent tre soumis au droit d'autres pays dans le domaine des exportations et importations. Les utilisations finales, ou utilisateurs finaux, pour des armes nuclaires, des missiles, des armes chimiques ou biologiques ou pour le nuclaire maritime, directement ou indirectement, sont strictement interdites. Les exportations ou rexportations vers des pays sous embargo des Etats-Unis, ou vers des entits figurant sur les listes d'exclusion d'exportation amricaines, y compris, mais de manire non exclusive, la liste de personnes qui font objet d'un ordre de ne pas participer, d'une faon directe ou indirecte, aux exportations des produits ou des services qui sont rgis par la legislation amricaine en matire de contrle des exportations et la liste de ressortissants spcifiquement designs, sont rigoureusement interdites. LA DOCUMENTATION EST FOURNIE "EN L'ETAT" ET TOUTES AUTRES CONDITIONS, DECLARATIONS ET GARANTIES EXPRESSES OU TACITES SONT FORMELLEMENT EXCLUES, DANS LA MESURE AUTORISEE PAR LA LOI APPLICABLE, Y COMPRIS NOTAMMENT TOUTE GARANTIE IMPLICITE RELATIVE A LA QUALITE MARCHANDE, A L'APTITUDE A UNE UTILISATION PARTICULIERE OU A L'ABSENCE DE CONTREFACON.
081029@21288
Contents
JRuby on Rails in GlassFish Tutorial .................................................................................................... 5 Introduction to JRuby and Rails on the Sun GlassFish ......................................................................5 What is Ruby on Rails? ...................................................................................................................5 What is JRuby? ................................................................................................................................6 JRuby on Rails, the Sun GlassFish Enterprise Server v3 Prelude, and the GlassFish v3 Gem ..................................................................................................................................................6 Installing JRuby and Required Gems ...................................................................................................7 Downloading and Installing JRuby 1.1.4 .....................................................................................7 Installing Rails on JRuby ................................................................................................................7 Installing the GlassFish v3 Gem ....................................................................................................8 Creating a Simple Rails Application .....................................................................................................9 Creating the hello Application ......................................................................................................9 Creating the Controller and View .................................................................................................9 Passing Data From the Controller to the View ............................................................................9 Using Rails Without a Database ................................................................................................. 10 Deploying and Running a Rails Application .................................................................................... 11 Deploying a Rails Application as a Directory ........................................................................... 11 Deploying a Rails Application to the GlassFish v3 Gem ......................................................... 12 Accessing a Database From a Rails Application .............................................................................. 12 Setting Up the MySQL Database Server .................................................................................... 12 Creating a Database-Backed Rails Application ........................................................................ 13 Deploying and Running the Database-Backed Web Application .......................................... 14 Accessing Java Libraries from a Rails Application ........................................................................... 14 Creating the Rails Application That Accesses Java Libraries .................................................. 15 Creating the Views That Display the Images Generated by Java2D Code. ........................... 15 Adding Java2D Code to a Rails Controller ................................................................................ 16 Running a Rails Application That Uses Java 2D Code ............................................................ 18 Configuring JRuby Runtime Pool ..................................................................................................... 18 Introduction to Warbler ..................................................................................................................... 19
3
Contents
What is Warbler ........................................................................................................................... 19 Creating and Deploying a Simple Rails Application with Warbler ............................................... 20 Creating a Rails application ........................................................................................................ 20 Deploying the war file .................................................................................................................. 20 Further Information ............................................................................................................................ 21
Getting Started With JRuby on Rails for Sun GlassFish Enterprise Server v3 Prelude August 2008
This tutorial shows you how to get started using JRuby on Rails on the Sun GlassFishTM Enterprise Server v3 Prelude by covering the following topics:
Introduction to JRuby and Rails on the Sun GlassFish on page 5 Installing JRuby and Required Gems on page 7 Creating a Simple Rails Application on page 9 Deploying and Running a Rails Application on page 11 Accessing a Database From a Rails Application on page 12 Accessing Java Libraries from a Rails Application on page 14 Configuring JRuby Runtime Pool on page 18 Introduction to Warbler on page 19 Creating and Deploying a Simple Rails Application with Warbler on page 20 Further Information on page 21
What is Ruby on Rails? What is JRuby? The Sun GlassFish Enterprise Server v3 Prelude and the GlassFish v3 Gem
Rails is a web application framework that leverages the simplicity of Ruby and eliminates much of the repetition and configuration required in other programming environments. With Rails, you can create a database-backed web application, complete with models and tables, by running a few one-line commands. To learn more about Ruby on Rails, see Ruby on Rails.
What is JRuby?
JRuby is a JavaTM implementation of the Ruby interpreter. While retaining many of the popular characteristics of Ruby, such as dynamic-typing, JRuby is integrated with the Java platform. With JRuby on Rails, you get the simplicity and productivity offered by Ruby and Rails and the power of the Java platform offered by JRuby, thereby giving you many benefits as a Rails developer, including these:
You can access the rich set of Java libraries from your Rails application. You can use the powerful and secure support of Java Unicode strings with your Rails application. Your JRuby on Rails application can spin off multiple threads because JRuby uses Java threads, which map to native Ruby threads. Furthermore, you can pool these threads.
JRuby on Rails, the Sun GlassFish Enterprise Server v3 Prelude, and the GlassFish v3 Gem
Developing and deploying your Rails application on the Sun GlassFish Enterprise Server gives you the following advantages over using a typical web server used for running Rails applications:
A simple, integrated deployment environment. In other words, you do not need one set of software for developing the application and another set of software for deploying it. The ability to deploy multiple Rails applications to a single GlassFish instance. The ability of a Rails application to handle multiple requests.
For more details on these and other advantages of using the GlassFish for your JRuby on Rails applications, see Advantages of JRuby-on-Rails with the GlassFish Application Server. You have two options for deploying a Rails application on the Sun GlassFish:
Deploy the application as a directory to the Sun GlassFish Enterprise Server v3 Prelude by using the asadmin command. Deploy the application as a directory to the GlassFish v3 Gem installed on your JRuby virtual machine.
Getting Started With JRuby on Rails for Sun GlassFish Enterprise Server v3 Prelude August 2008
A Gem is a Ruby package that contains a library or an application. In fact, Rails itself is a Gem that you install on top of JRuby. One way to work with JRuby on Sun GlassFish is to install the GlassFish v3 Gem on top of your JRuby installation. The GlassFish v3 Gem is just a lightweight version of the Sun GlassFish Enterprise Server v3 Prelude and a Grizzly connector for JRuby. When you install the Gem, you have a Sun GlassFish instance embedded in the JRuby virtual machine. This gives you a more complete development and production environment because you have everything you need for JRuby on Rails applications running inside the JRuby virtual machine in addition to everything you need from the Sun GlassFish to create web applications.
1 2 3 4 5
You should see the following output, which tells you that six Gems and their documentation have been installed:
JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Successfully installed activesupport-2.1.1 Successfully installed activerecord-2.1.1 Successfully installed actionpack-2.1.1 Successfully installed actionmailer-2.1.1 Successfully installed activeresource-2.1.1 Successfully installed rails-2.1.1 6 gems installed Installing ri documentation for activesupport-2.1.1... Installing ri documentation for activerecord-2.1.1... Installing ri documentation for actionpack-2.1.1... Installing ri documentation for actionmailer-2.1.1... Installing ri documentation for activeresource-2.1.1... Installing RDoc documentation for activesupport-2.1.1... Installing RDoc documentation for activerecord-2.1.1... Installing RDoc documentation for actionpack-2.1.1... Installing RDoc documentation for actionmailer-2.1.1... Installing RDoc documentation for activeresource-2.1.1...
The -S parameter that you used to run the command to install Rails tells JRuby to look for the script anywhere in the <JRUBY_HOME> path.
Getting Started With JRuby on Rails for Sun GlassFish Enterprise Server v3 Prelude August 2008
1 2
This command creates the hello directory, which contains a set of automatically-generated files and directories. The directories containing the files that you'll use the most are:
app: Contains your application code. config: Contains configuration files, such as database.yml, which you use to configure a database. public: Contains files and resources that need to be accessed directly rather than accessed through the Rails call stack. These include images and straight HTML files.
1 2
Go to the <JRUBY_HOME>/samples/hello directory you created in the previous task. Create a controller and default view for your application:
jruby script/generate controller home index
You should see a controller called home_controller.rb in the hello/app/controllers directory and a view called index.html.erb in the hello/app/views directory.
1 2
Open <JRUBY_HOME>/samples/hello/app/controllers/home_controller.rb in a text editor. Add an instance variable called @hello_message to the action called index, so that the controller looks like this:
class HomeController < ApplicationController def index @hello_message = "Welcome to JRuby on Rails on the Sun GlassFish Enterprise Server" end end
In Rails, the actions are supposed to map to views. So, when you access the index.html.erb file, the index action executes. In this case, it makes the @hello_message variable available to index.html.erb.
3 4 5
Save the file. Open <JRUBY_HOME>/samples/hello/app/views/home/index.html.erb file in a text editor. At the end of the file, add the following output block:
<%= @hello_message %>
This JRuby code embedded into the view, inserts the value of @hello_message into the page. When you run the application, you can see Welcome to JRuby on Rails on the GlassFish Enterprise Server in your browser.
6
1 2
Open <JRUBY_HOME>/samples/hello/config/environment.rb file in a text editor. Remove the pound character (#) in front of line 21 to uncomment it so that it reads as:
config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
ActiveRecord supports database access for Rails applications. When you create model objects, you will most likely base them on ActiveRecord::Base.
3
10
Getting Started With JRuby on Rails for Sun GlassFish Enterprise Server v3 Prelude August 2008
Deploy it natively as a directory using the asadmin command. Deploy it using the GlassFish v3 Gem.
This section shows you how to deploy the hello application you created in the previous section natively and with the GlassFish v3 Gem and how to run the application in your web browser. You can also use these same instructions to deploy a legacy Rails application.
Set JRUBY_HOME property value to the path to your JRuby installation as the last line in one of the following files, located in the config directory of Enterprise Server your installation:
2 3
Save the file. Edit <AS_INSTALL>/domains/domain1/config/domain.xmland add this entry inside element:
<java-config> ... <jvm-options>-Djruby.home=<JRUBY_HOME></jvm-options> ... </java-config>
Note If GlassFish v3 JRuby IPS package was installed using update tool, then there is no need to
Start the server. Go to <JRUBY_HOME>/samples. Deploy the hello application with asadmin command from your Enterprise Server installation:
<AS_INSTALL>/bin/asadmin deploy hello
JRuby on Rails in GlassFish Tutorial 11
Run the hello application using the following URL in your browser:
http://localhost:8080/hello/home/index
1 2
When the GlassFish instance is finished launching, you should see output similar to the following:
INFO: Rails instance instantiation took : 37754ms 3
Run the application using the following URL in your web browser:
http://localhost:3000/home/index
You should now see the following message in your browser window:
Welcome to JRuby on Rails on the Sun GlassFish Enterprise Server!
Notice that the GlassFish v3 Gem runs on port 3000, not 8080.
3
12
1 2
3 4 5
Go to the books directory you just created. Open the config/database.yml file in a text editor. When prompted, enter your MySQL root password under the development heading in the database.yml file. Go back to the books directory if you are not already there. Create the database by running the following command:
jruby -S rake db:create
6 7
After the database creation is complete, you should see output similar to the following:
** Execute db:create
The rake command invokes the Rake tool. The Rake tool builds applications by running Rake files, which are written in Ruby and provide instructions for building applications.
8
Create the scaffold and the Book model for the application:
jruby script/generate scaffold book title:string author:string isbn:string description:text
When you run the script/generate command you specify the name of the model, the names of the columns, and the types for the data contained in the columns. A scaffold is the set of code that Rails generates to handle database operations for a model object, which is Book in this case. The scaffold consists of a controller and some views that allow users to perform the basic operations on a database, such as viewing the data, adding new records, and editing records. Rails also creates the model object when generating the scaffold.
9
When Rails is finished creating the tables, you should see output similar to the following:
CreateBooks: migrated (0.1322ms) =========
If you need to reset the database later, you can run jruby S rake db:reset.
JRuby on Rails in GlassFish Tutorial 13
1 2
Go to <JRUBY_HOME>/samples/books. Deploy the application to the GlassFish v3 Gem by running the following command:
jruby -S glassfish_rails books
Run the application in your web browser using the following URL:
http://localhost:3000/books
The opening page says Listing books and has an empty table, meaning that there are no book records in the database yet. To add book records to the table, do the next step.
4 5
Add records to the table by clicking the New book link on the index.html page. Enter the data for book on the new.html page and click Create.
Giving your controller access to Java libraries. Creating constants to refer to Java classes. Performing file input and output using the java.io and javax.imageio packages. Assigning Java objects to Ruby objects. Calling Java methods and using variables. Converting arrays from Java language arrays to Ruby arrays. Streaming files to the client.
14
Getting Started With JRuby on Rails for Sun GlassFish Enterprise Server v3 Prelude August 2008
For simplicity's sake, this application does not use a database. You will need a JPEG file to run this application.
1 2
3 4
Open the <JRUBY_HOME>/samples/imageprocess/config/environment.rb file in a text editor. Follow steps 2 and 3 from the instructions in section, Using Rails Without a Databaseon page 10. Go to the <JRUBY_HOME>/samples/imageprocess directory you just created. Create a controller and default view for the application by running this command:
jruby script/generate controller home index
5 6
7 8
Go to the <JRUBY_HOME>/samples/imageprocess/app/views/home directory. Create a second view by copying the default view into a view called seeimage.html.erb:
cp index.html.erb seeimage.html.erb
Creating the Views That Display the Images Generated by Java2D Code.
With this task, you will perform the following actions:
Load an image on which you want to perform image processing with Java2D Make the initial view show the original image and provide a link that the user clicks to perform the ColorConvertOp image processing operation on it. Make the other view display the processed image.
1 2
Find a JPEG image that you can use with this application. Add the image to <JRUBY_HOME>/samples/imageprocess/public/image file.
JRuby on Rails in GlassFish Tutorial 15
3 4 5
Go to <JRUBY_HOME>/samples/imageprocess/app/views/home file. Open the index.html.erb file in a text editor. Replace the contents of this file with the following HTML markup:
<html> <body> <img src="../../images/kids.jpg"/><p> <%= link_to "Perform a ColorConvertOp on this image", :action => "seeimage" %> </body> </html>
This page loads an image from <JRUBY_HOME>/samples/imageprocess/public/images and provides a link that references the seeimage action. The seeimage action maps to the seeimage view, which shows the processed image.
6
Replace kids.jpg from line 3 of index.html.erb with the name of your image that you saved from step 3 of this procedure. Save index.html.erb file. Open seeimage.html.erb file in a text editor. Replace the contents of this file with the following HTML markup:
<html> <body> <img src="/home/processimage"/><p> <%= link_to "Back", :action => "index" %> </body> </html>
7 8 9
The img tag on this page accesses the processimage action in HomeController. The processimage action is where you will put the Java2D code to process the image you loaded into index.html.erb.
This line is necessary for you to access any Java libraries from your controller.
16 Getting Started With JRuby on Rails for Sun GlassFish Enterprise Server v3 Prelude August 2008
Create a constant for the BufferedImage class so that you can refer to it by the shorter name:
BI = java.awt.image.BufferedImage
Give controller access to your image file using java.io.File, making sure to use the name of your image in the path to the image file. Place the following line inside the seeimage action:
filename = "#{RAILS_ROOT}/public/images/kids.jpg" imagefile = java.io.File.new(filename)
Notice that you don't need to declare the types of the variables, filename or imagefile. JRuby can tell that filename is a String and imagefile is a java.io.File instance because that's what you assigned them to be.
5
Read the file into a BufferedImage object and create a Graphics2D object from it so that you can perform the image processing on it. Add these lines directly after the previous two lines:
bi = javax.imageio.ImageIO.read(imagefile) w = bi.getWidth() h = bi.getHeight() bi2 = BI.new(w, h, BI::TYPE_INT_RGB) big = bi2.getGraphics() big.drawImage(bi, 0, 0, nil) bi = bi2 biFiltered = bi
Refer to The Java Tutorial for more information on the Java 2D API. The important points are :
You can call Java methods in pretty much the same way in JRuby as you do in Java code. You don't have to initialize any variables. You can just create a variable and assign anything to it. You don't need to give it a type.
send_data string, :type => "image/jpeg", :disposition => "inline", :filename => "newkids.jpg"
Sometimes you need to convert arrays from Ruby to Java code or from Java code to Ruby. In this case, you need to use the from_java_bytes routine to convert the bytes in the output stream to a Ruby string so that you can use it with send_data to stream the image to the browser. JRuby provides some other routines for converting types, such as to_java to convert from a Ruby Array to a Java String. See Conversion of Types.
Run the application by entering the following URL into your browser:
http://localhost:3000/home/index
You should now see an image and a link that says, Perform a ColorConvertOp on this image.
3
Click the link. You should now see a grayscale version of the image from the previous page.
Introduction to Warbler
-Djruby.runtime=X sets the initial number of JRuby runtimes that GlassFish starts with. The default value is one. This represents the highest value that GlassFish accepts as minimum runtimes, and the lowest value that GlassFish uses as maximum runtimes. -Djruby.runtime.max=X sets the maximum number of JRuby runtimes that might be available in the pool. The default value is two. For this element, too high values might result in OutOfMemory errors, either in the heap or in the PermGen. -Djruby.runtime.min=X sets the minimum number of JRuby runtimes that will be available in the pool. The default value is one. The pool will always be at least this large, but can be larger than this.
The dynamic runtime pool maintains itself with the minimum number of runtimes possible, to allow consistent and fast runtime access for the requesting application. The pool may take a initial runtime value, but that value is not used after pool creation.
Introduction to Warbler
In Deploying and Running a Rails Application on page 11, we have seen how to deploy a rails application directly to Enterprise Server. Warbler provides an easier way to deploy a rails application to a java application server.
What is Warbler
Warbler is a gem that makes .war file out of a Rails, Merb, or Rack-based application. Warbler provides a minimal, flexible, ruby-like way to bundle application files for deployment to a java application server. Warbler provides a set of out-of-the box defaults to allow most Rails applications to assemble and work without external gem dependencies. Warbler bundles JRuby and the JRuby-Rack servlet adapter for dispatching requests to the application inside the java application server, and assembles all jar files in <WARBLER_HOME>/lib/ directory into the application. To learn more about Warbler, see Warbler.
19
1 2
Edit the enviroment.rb file to indicate that your application does not use a database: Open <JRUBY_HOME>/samples/rails-warbler/hello/config/environment.rb in a text editor.
Remove the pound character (#) in front of line 21 to uncomment it so that it reads as follows and save:
config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
1 2
Run the hello application by using the following URL in your browser:
http://<hostname>:<port>/hello
20
Getting Started With JRuby on Rails for Sun GlassFish Enterprise Server v3 Prelude August 2008
Further Information
Further Information
For more information on Ruby-on-Rails, JRuby, and JRuby on Enterprise Server, see the following resources.
21
22