Rails and Java EE integration - Native Rails on GlassFish v3
Posted by arungupta on April 14, 2008 at 11:18 AM EDT
The last part of this tri-series blog (Part 1, Part 2) will show how a Rails application can be deployed on GlassFish - without the need of Goldspike, Warbler or any other gem or plugin. Yes, that's a native Rails app deployment on GlassFish v3.
GlassFish v3 is next version of GlassFish v2 and the focus is modularization, enablement of non-Java EE containers and modularity - download b09.
Rails powered by GlassFish provides all the details on why GlassFish provides an industry-grade and functionally-rich Application Server.
Now detailed steps:
- Using JRuby
1.1 (installed with Rails), create a Rails app
"railsee3" as:
~/testbed/jruby-1.1/samples/rails >../../bin/jruby -S rails railsee3
create
create app/controllers
create app/helpers
create app/models
. . .
create log/production.log
create log/development.log
create log/test.log - Add Servlet descriptors
- Create a new directory "WEB-INF", and a new file
"web.xml" in that directory using
the following contents:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>server.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app> - Create a new file "sun-web.xml" in "WEB-INF" using the
following contents:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software
/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
<context-root>/servlet</context-root>
<class-loader delegate="true"/>
</sun-web-app> - Create a new directory "WEB-INF/lib".
- Create and Copy Servlet
- Create a Java library with Servlet code as explained in bullet #5 here.
- Copy "HelloServlet.jar" from "dist" directory of NetBeans project to "WEB-INF/lib" directory.
- Configure JRuby-on-Rails in GlassFish - Edit
"config/asenv.conf" in GlassFish directory and specify JRUBY_HOME as
the last line:
JRUBY_HOME="/Users/arungupta/testbed/jruby-1.1"
- Deploy the Rails application as:
- The bundled Servlet is now accessible at
"http://localhost:8080/servlet/hello". The default browser output
looks like:

And passing a parameter to the URL as "http://localhost:8080/railsee3/hello?name=Arun" shows the output as:

| ~/testbed/jruby-1.1/samples/rails
>~/testbed/glassfish/v3/p2b9/glassfish/bin/asadmin
deploy --force=true railsee3 railsee3 deployed successfully Command deploy executed successfully. |
Now, lets add Controller and View to Rails application and invoke this servlet from there to show complete integration with Rails.
- Create a new Controller and View as
~/testbed/jruby-1.1/samples/rails/railsee3 >../../../bin/jruby script/generate controller home index
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
exists app/controllers/
exists app/helpers/
create app/views/home
exists test/functional/
create app/controllers/home_controller.rb
create test/functional/home_controller_test.rb
create app/helpers/home_helper.rb
create app/views/home/index.html.erb - Change the generated controller in
"app/controllers/home_controller.rb" to:
class HomeController < ApplicationController
include Java
def index
url = java.net.URL.new("http://localhost:8080/servlet/hello");
conn = url.open_connection;
reader = java.io.BufferedReader.new(java.io.InputStreamReader.new(conn.get_input_stream));
@servlet_output = "";
input_line = reader.read_line;
while input_line != nil
@servlet_output << input_line;
input_line = reader.read_line;
end
reader.close;
end
end - Change the generated view in
"app/views/home/index.rhtml.erb" to:
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
<%= @servlet_output %> - Re-deploy the Rails application as shown in bullet # 5
above and "http://localhost:8080/railsee3/home/index" shows the output
as shown:

In summary, the tri-part blog showed the deployment models for a Rails application on GlassFish. Each model showed how a Java EE 5 Servlet can be co-bundled with Rails application and invoked from Rails view:
- Part 1- WAR-based deployment on GlassFish v2 UR1 using Goldspike
- Part 2 - WAR-based deployment on GlassFish v2 UR1 using Warbler
- Part 3 - Native deployment on GlassFish v3 without any additional gems or plugins
Related Topics >>
Blog Links >>
- Login or register to post comments
- Printer-friendly version
- arungupta's blog
- 711 reads





