Rails と Java EE の連携 - Goldspike のかわりに Warbler でPosted by arungupta on April 07, 2008 at 11:49 AM 本ブログの3回連続シリーズ・[ Part 1 |Javaintegration_glassfish_1Ja] では、 Goldspike のプラグイン を使って Java EE のサーブレットと Rails アプリケーションを WAR ファイルにパッケージし、 GlassFish v2 UR1 上に配備する手順を紹介しました。 前回の記事中でも触れたとおり、 Goldspike には若干の問題が残されています。 Warbler を使えば、よりコンパクトで柔軟な、そして Ruby らしいやり方で WAR ファイルを作ることができます。 Warbler はとにかく無駄のない WAR ファイルを作成してくれるんです。たとえば .svn ディレクトリはパッケージングの対象から排除されますし、 test や migration などもちゃんと除外してくれるのですよ。実にすばらしい。 なお、Warbler は現時点ではディスパッチ処理に RailsServlet を使用していますが、これは必要に応じて取り外すことも可能です。今回お送りする Part 2 では、Warbler を使って WAR ファイルを生成する方法を解説します。 Rails powered by GlassFishでは、商用グレードのアプリケーションサーバ・ GlassFish に備わるリッチな機能が余すところなく紹介されています。 それでは、詳しい手順を紹介していきましょう: 1. まず、インストール済みの JRuby 1.1 ( Rails もセットアップされていること)に Warbler の gem をインストールします: ~/testbed/jruby-1.1 >bin/jruby -S gem install warbler JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Updating metadata for 35 gems from http://gems.rubyforge.org ................................... complete Successfully installed warbler-0.9.4 1 gem installed Installing ri documentation for warbler-0.9.4... Installing RDoc documentation for warbler-0.9.4... 2. "railsee2"という名前でRailsアプリケーションを作成します: ~/testbed/jruby-1.1/samples/rails >../../bin/jruby -S rails railsee2 create create app/controllers create app/helpers create app/models . . . create log/production.log create log/development.log create log/test.log 話を簡単にするために、このアプリケーションではデータベースを使用しないことにします。 config.frameworks -= [ :active_record, :active_resource, :action_mailer ] 3. "config" ディレクトリ内に "web.xml" というファイルを新規に作成し、以下のように記述してください。 <!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> この "web.xml" は Warbler により WAR ファイルにパッケージされます。 4. サーブレットの作成とコピー 1. この記事 #5 の手順に従ってサーブレットのコードを含むJavaのライブラリを作成します。 2. "HelloServlet.jar" を NetBeans プロジェクトの "dist" ディレクトリから Rails アプリケーションの "lib" ディレクトリにコピーします。 5. WARの作成と配備 1. 以下のようにコマンドを実行して WAR ファイルを作成しましょう: ~/testbed/jruby-1.1/samples/rails/railsee2 >~/testbed/jruby-1.1/bin/jruby -S warble JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL jar cf railsee2.war -C tmp/war . 2. そして、次の手順で WAR ファイルを GlassFish v2 UR2 に配備します: ~/testbed/jruby-1.1/samples/rails/railsee2 >~/testbed/glassfish/v2ur1/glassfish/bin/asadmin deploy railsee2.war Command deploy executed successfully. 6. "http://localhost:8080/railsee2/hello" という URL から、 Rails に含めたサーブレットにアクセスしてみましょう。 デフォルトではブラウザに以下のように表示されます: URL に "http://localhost:8080/railsee2/hello?name=Arun" のようにパラメータを渡すと、次のように表示が変わります: このように、GlassFish v2 UR1 上に配備した Rails アプリケーションを Java EE のサーブレットと連携させることができました。 では、続いて Rails アプリケーションにコントローラとビューを追加し、そこからこのサーブレットを呼び出して Rails との完全な連携を試してみましょう。 7. コントローラとビューは次のように作成します: ~/testbed/jruby-1.1/samples/rails/railsee2 >../../../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 8. "app/controllers/home_controller.rb" に作成されたコントローラを次のように変更しましょう: class HomeController < ApplicationController include Java def index url = java.net.URL.new("http://localhost:8080/railsee2/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 9. そして、 "app/views/home/index.rhtml.erb" に作成されたビューを次のように変更します: <h1>Home#index</h1> <p>Find me in app/views/home/index.html.erb</p> <%= @servlet_output %> 10. では、上記 # 5 に示す手順で WARファイルを再作成し、 "http://localhost:8080/railsee2/home/index" にアクセスしてみましょう。 次のような画面が表示されましたね: Cannot resolve external resource into attachment. このブログエントリでは、 Warbler を使って JavaEE5 のサーブレットと Rails アプリケーションをパッケージングし、 GlassFish 上に配備する手順について解説しました。 Warbler の詳しい使い方、および設定方法や web.xlm などについての詳細は、 Warbler のドキュメントにて紹介されています。 本 3 回シリーズの次のエントリでは、同じようなアプリケーションを GlassFish v3 上に配備する方法を紹介します。 GlassFish v3 のすごいところは、 Goldspike や Warbler 、あるいはその他のプラグインなどは一切必要とせず、それ単体で配備が完了するという点です。続きをお楽しみに! 日本語翻訳: Kana |