Posted by arungupta on April 07, 2008 at 11:49 AM
本ブログの3回連続シリーズ・ Part 1 では、 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/environment.rb" の以下の行のコメントアウトをはずしてください(行頭の "#" を削除します):
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" にアクセスしてみましょう。
次のような画面が表示されましたね:
![]() |
このブログエントリでは、 Warbler を使って JavaEE5 のサーブレットと Rails アプリケーションをパッケージングし、 GlassFish 上に配備する手順について解説しました。
Warbler の詳しい使い方、および設定方法や web.xlm などについての詳細は、 Warbler のドキュメント
にて紹介されています。
本 3 回シリーズの次のエントリでは、同じようなアプリケーションを GlassFish v3 上に配備する方法を紹介します。 GlassFish v3 のすごいところは、 Goldspike や Warbler 、あるいはその他のプラグインなどは一切必要とせず、それ単体で配備が完了するという点です。続きをお楽しみに!