Friday April 04, 2008
Rails and Java EE integration - Servlet co-bundled and invoked from Rails
One of the several
advantages of deploying Rails
applications on GlassFish
is - co-hosting Rails and Java EE applications in the same container.
The screencast
#web9 shows how Rails applications can be easily deployed on
GlassFish.
This blog takes the JRuby-on-Rails (jRoR) and Java EE integration to
the next level. It show how a Java EE Servlet can be co-bundled within
a jRoR application. And then it shows how such a servlet can be easily
invoked from a Rails view. It uses WAR-based
mode for deploying jRoR applications on GlassFish.
Here are the detailed steps:
| ~/testbed/jruby-1.1RC3
>bin/jruby -S gem
install
activerecord-jdbc-adapter JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Successfully installed activerecord-jdbc-adapter-0.8 1 gem installed Installing ri documentation for activerecord-jdbc-adapter-0.8... Installing RDoc documentation for activerecord-jdbc-adapter-0.8... |
|
~/testbed/jruby-1.1RC3/samples/rails >../../bin/jruby -S rails
railsee1 create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create config/initializers create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create script/process create test/fixtures create test/functional create test/integration create test/mocks/development create test/mocks/test create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache create tmp/pids create Rakefile create README create app/controllers/application.rb create app/helpers/application_helper.rb create test/test_helper.rb create config/database.yml create config/routes.rb create public/.htaccess create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/boot.rb create config/environment.rb create config/environments/production.rb create config/environments/development.rb create config/environments/test.rb create script/about create script/console create script/destroy create script/generate create script/performance/benchmarker create script/performance/profiler create script/performance/request create script/process/reaper create script/process/spawner create script/process/inspector create script/runner create script/server create script/plugin create public/dispatch.rb create public/dispatch.cgi create public/dispatch.fcgi create public/404.html create public/422.html create public/500.html create public/index.html create public/favicon.ico create public/robots.txt create public/images/rails.png create public/javascripts/prototype.js create public/javascripts/effects.js create public/javascripts/dragdrop.js create public/javascripts/controls.js create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log |
| config.frameworks -= [ :active_record, :active_resource, :action_mailer ] |
|
~/testbed/jruby-1.1RC3/samples/rails/railsee1
>../../../bin/jruby
script/plugin install
svn://rubyforge.org/var/svn/jruby-extras/trunk/rails-integration/plugins/goldspike A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/test A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/test/war_config_test_config.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/test/test_java_library.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/test/test_maven_library.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/test/test_create_war.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/Rakefile A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/init.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/tasks A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/tasks/war.rake A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/lib A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/lib/util.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/lib/war_config.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/lib/run.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/lib/java_library.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/lib/packer.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/lib/create_war.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/install.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/generators A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/generators/goldspike A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/generators/goldspike/goldspike_generator.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/generators/goldspike/templates A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/generators/goldspike/templates/web.xml.erb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/generators/goldspike/templates/war.rb A /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1/vendor/plugins/goldspike/README Exported revision 960. exists config create config/war.rb create WEB-INF create WEB-INF/web.xml.erb |

| String
name = request.getParameter("name"); if (name == null || name.equals("")) name = "Duke"; out.println("<h1>Servlet HelloServlet at " + request.getContextPath () + " says Hello " + name + "!</h1>"); |
| <servlet> <servlet-name>hello</servlet-name> <servlet-class>server.HelloServlet</servlet-class> </servlet> |
| <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> |
|
~/testbed/jruby-1.1RC3/samples/rails/railsee1
>../../../bin/jruby
-S rake war:standalone:create (in /Users/arungupta/testbed/jruby-1.1RC3/samples/rails/railsee1) info: Assembling web application info: Packing needed Java libraries ... info: adding Java library jruby-complete-1.1RC3 info: adding Java library goldspike-1.6 info: adding Java library activation-1.1 info: adding Java library commons-pool-1.3 info: adding Java library bcprov-jdk14-124 info: Packing needed Ruby gems ... info: adding Ruby gem rails version 2.0.2 info: adding Ruby gem rake version 0.8.1 info: adding Ruby gem activesupport version 2.0.2 info: adding Ruby gem activerecord version 2.0.2 info: adding Ruby gem actionpack version 2.0.2 info: adding Ruby gem actionmailer version 2.0.2 info: adding Ruby gem activeresource version 2.0.2 info: adding Ruby gem activerecord-jdbc-adapter version 0.8 info: Packing needed files ... info: Creating web archive |
| ~/testbed/jruby-1.1RC3/samples/rails/railsee1
>~/testbed/glassfish/v2ur1/glassfish/bin/asadmin
deploy railsee1.war Command deploy executed successfully. |


| ~/testbed/jruby-1.1RC3/samples/rails/railsee1
>../../../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 |
| class
HomeController < ApplicationController include Java def index url = java.net.URL.new("http://localhost:8080/railsee1/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 |
| <h1>Home#index</h1> <p>Find me in app/views/home/index.html.erb</p> <%= @servlet_output %> |

Posted by Arun Gupta in web2.0 | Comments[4]
|
|
|
|
Today's Page Hits: 18328
Hello. Do you know if this would work the same with a java SecurityFilter?
At work I have a group of applications in JSF which use a custom SecurityFilter for authentication. It would be useful to know if you can make a JRuby on rails app while keeping the security filters in place and working with the rails app.
Posted by Cristian Vat on April 05, 2008 at 07:47 AM PDT #
Cristian,
I've not tried it but, theoretically, it should work. I think you may like to ask this question on user@jruby.codehaus.org for a broader audience.
Posted by Arun Gupta on April 05, 2008 at 01:16 PM PDT #
Posted by Arun Gupta's Blog on April 07, 2008 at 11:51 AM PDT #
Posted by Arun Gupta's Blog on April 14, 2008 at 08:20 AM PDT #