JRuby および GlassFish に関する FAQ

  1. 他にも色々な言語があるのに、なぜ Ruby なのですか?
    • Ruby は Rails のおかげでどんどんポピュラーになってきています。
    • Ruby-on-Rails (ROR) は Web 開発者の間ではとても人気のあるフレームワークです。
    • JRuby は Java で書かれた、完成度の高い Ruby の処理系です。 JRuby は JVM 上で動作しますので、 Ruby から既存の Java のライブラリにアクセスすることが可能です。
  2. シンプルさと生産性の高さ以外に、 JRuby や Ruby を選ぶ理由はありますか?<br>
    Ruby 人気を支えているのは、 Rails というフレームワークです。 JRuby を利用すれば、 Ruby の簡易性と Java のライブラリに秘められたパワーをともに享受することができます。<br>
  3. GlassFish が生成する JRuby インスタンスの数を設定することはできますか?<br>
    はい、できます。設定方法はこちらで説明されています。
  4. JRuby 1.0.2 を使うと、 Ruby と Java を組み合わせた場合と比較して非常にパフォーマンスが悪いようです。この問題にはどう対処すれば良いですか?<br>
    JRuby の最近のリリースは以前に比べてパフォーマンスがかなり向上していますので、最新のものを利用することをお勧めします。また、ちょっとしたチューニングを施すことで( JRuby のパフォーマンス・チューニング(英文) 参照)、 CRuby (MRI) とほぼ同等のパフォーマンスを出すことも可能です。パフォーマンス・ベンチマークの結果はJRuby on Rails は速い(英文)にてご覧いただけます。
  5. GlassFish は複数の Rails のバージョンをサポートしていますか ?<br>
    はい、サポートしています。アップデートセンターから入手可能な JRuby 用モジュールを使うと、スタンドアロンモードとライブラリ共有モードのWARファイルの2タイプの WAR ファイルを作成することができます。<br>
    スタンドアロンモードの WAR ファイルには、アプリケーションが必要とする全てのライブラリ、 gem 、プラグインが全て同梱されています。対して、共用モードの WAR ファイルはアプリケーション固有のライブラリのみで構成され、その他のクラスは GlassFish アプリケーションサーバのインスタンスに設定されたクラスパスに従ってロードされる仕組みになっています。<br>
    GlassFish のインスタンス上には、スタンドアロンモードの WAR ファイルを複数配備することができます。または、一台あるいは複数台のマシンにインストールした複数の GlassFish のインスタンスを、それぞれ異なるバージョンの Rails 用に構成することもできます。この場合、ロードバランサを用いてこれらのインスタンスをフロントエンドすることが可能です。
    • GlassFish を使う場合、 Rails のインスタンスを操作する複数のスレッド間で変数が共有されるのですか、それともそれぞれが独立しているのでしょうか?*<br>
      全てのリクエストはそれぞれの Rails インスタンス内で発生し、複数のリクエスト間で何かが共有されることはありません。配備モデルは mongrel を用いる場合とおおむね同じですが、 mongrel は必要ありません。<br>
  6. レコードのマイグレーションを行う際には、 関連付けられた Active Records をリフレッシュする必要があります。ホットデプロイサイクルの一環としてこれを実現する方法は?<br>
    WAR ファイルのデプロイに時にマイグレーションを実行するような Ruby Shim を書くのも、一つの方法でしょう。JIRA のように、起動時に正しいバージョンのテーブルを参照しているかを確認するためデータベース・スキャンを行う製品では、このような作業が重要となります。この手法は常に利用できるものではありませんが、配備を完全に自由に制御できる状況にある場合は非常に便利です。
  7. 小規模なエンタープライズシステムの開発に GlassFish を利用するメリットは?<br>
    GlassFish をエンタープライズシステム開発に用いることで、以下のようなメリットを享受できます:
    • RoR アプリケーションと Java EE アプリケーションを同一のコンテナ上で共存させることが可能
    • 分かりやすく、かつ Java EE と類似した開発 / 配備モデル
    • データベース・コネクション・プーリング
    • WAR のホットデプロイ機能(デプロイ時にコンテナの再起動が不要)
    • ロードバランシング、クラスタリング、高可用性のもたらす利点により、高度なスケーラビリティを期待できます。
  8. JRuby のベンチマーク数は ?<br>
    参考サイト:

なお、これらのベンチマーク数公開後にパフォーマンスの改善がなされています。ベンチマーク数はバージョン 1.1 あたりから更に向上する事でしょう。

  1. JRuby はいつ Ruby 1.8.6 に対応するでしょう ?<br>
    JRuby 1.1 で stdlib をアップデートする計画があります。 - that's really all is meant by 1.8.5 support, since largely that's all that's changed.
  2. GlassFish 上で負荷分散の調整を行うには?<br>
    GlassFish インスタンスのクラスタに対する負荷分散の調整は、以下のいずれかのアプローチで行うことが可能です
    • Sun Web Server 、 Apache および IIS 上で Sun LB プラグインを使用
    • Apache (mod_jk)
    • F5
    • Sun Secure Application Switch

詳しくは、GlassFish v2 の セットアップの手引き / ロードバランサの調整 をお読みください。

  1. GlassFish はページ・キャッシングをどのように処理しますか ?<br>
    Grizzly のファイル・キャッシュ機能により、静的なページは Web サーバにアクセスすることなく配信されます。
  2. JRuby の Rubinius サポートはどのような状態になっていますか ?<br>
    Rubenius (およびその他の Ruby 実装)の現状は、 http://headius.blogspot.com/2007/11/top-five-questions-i-get-asked.html で紹介されています。また、より最近の情報は こちらでもご覧いただけます。<br>
    Rubenius のバイトコードは現在進行形で更新されているようなので、これ以上の Rubinius バイトコードのサポートは行われません。幸いなことにJRuby の通常のインタプリタモードのパフォーマンスが改善されたため、新しいバイトコード・エンジンのインストールは、もはや優先事項ではなくなりました。<br>
    JRuby 開発チームは、時々 Rubinius の様々なコア・クラス群を JRuby 上で実行してみています。それらは通常問題なく動作しますが、動作速度は 2x 程度となっています。
  3. GlassFish と Apache httpd の静的ページの表示速度を比較したベンチマークはありますか?<br>
    はい。ベンチマークは ここ(英文) でご覧いただけます。
  4. GlassFish V3 および JRuby GlassFish gem をビルドする方法は?<br>
    • 準備するもの
      • Subversion クライアント
      • Maven 2.0.x
    • GlassFish V3 および JRuby GlassFish gem をビルドするには、以下のコマンドを実行してください。

<pre>
svn checkout https://svn.java.net/svn/glassfish-svn/trunk/v3
cd v3
mvn -U install
cd distributions/gem
mvn install
</pre>
コマンドを実行すると、 distributions/gem/target/dependency/glassfish/pkg に gem が生成されます。


日本語翻訳: Kana

英文 (翻訳したバージョン: 60)