JRuby on GlassFish v2

2007年6月19日 at 9:44 PM



さて、今日はGlassFish v2 (Grizzly)上でJRubyを動かす方法を紹介します。

GlassFish上でJRubyを動かす方法は大きくわけて3通りあります。


1. JRubyでwarファイルを作成してwarをデプロイする方法

2. GlassFish上でCGI経由で実行する方法

3. GrizzlyでJRubyを動かす方法(将来的に。。。)

  3.1 GrizzlyでJRubyを動かす方法「JRuby on Rails でエンタープライズ Ruby (高井 直人)」



動作方法による簡易比較


現時点では、どの方法もまだ、一長一短があります。

1,2に関してはGlassFish v2上で動作させる事ができますが、3についてはGrizzly上で動かします。

3についてはGlassFish v3に組み込まれてくるのではないかと思いますが、現時点では???です。

そこで、今回はGlassFish v2で動作させる事のできる、1,2にしぼって説明します。



1.についてはパフォーマンスは良いのですが、毎回warを生成しデプロイしなおさなければならないのがとても面倒です。

2.については、毎回デプロイしなおさなくてもダイレクトに修正が反影される為、非常に便利です。

 しかしその一方、CGI呼び出しの為非常にパフォーマンスは悪くなっています。

 そこでこの方法は、開発時に使用していただければと思います。


 そんな開発者の為に、GlassFish v2のインストールから、GlassFish v2上でJRubyを呼び出す方法(CGI版)を下記に説明します。

 どうぞ開発者の皆様、下記の方法を試してみて下さい。






インストールする為に必要な物


GlassFish v2 Beta

  (ちなみに、私はv2-b41dより少し新しいv2-b50で試しています。)

JRuby: jruby-bin-1.0.tar




インストールと動作確認の手順は下記のステップに従い行います。

インストール手順


1.環境設定の確認

2.GlassFishのインストール

3.GlassFishの構成

4.GlassFishの管理ドメインの起動

5.JRubyのインストール

6.Railsのインストール

7.Railsのアプリケーション作成

8.Railsプログラムの作成

9.Railsのroute.rbの修正

10.GlassFishのドメイン中のdefault-web.xmlの修正

11.GlassFishのドメイン再起動

12.ドメイン上でサンプルアプリの動作確認

13.GlassFishのノードエージェントを作成

14.ノードエージェント上にインスタンスを作成

15.ノードエージェントとインスタンスの起動

16.インスタンス上でのサンプルアプリの動作確認




詳細手順



1. 環境設定の確認


まずは、環境設定です。最初のインストールする時点ではJAVA_HOMEだけが必要になりますが、

$GLASS_FISH_INSTALL/binにパスを通しておくとGlassFishの管理用コマンドを呼び出す事が

できるようになるので便利です。今回私はMacBookの自分のデスクトップ上にglassfishを構築しています。



  ※ DHCP環境にインストールされる場合は、host名に気をつけてください。DHCPから取得した

   ホスト名でインストールした場合、不具合が発生する可能性があります。

   (不具合例:ノードエージェントが正常に起動できない等。)





yosshi > cat ~/.cshrc

cat ~/.cshrc

set prompt=”yosshi > “

set history=200

setenv TERM vt100

setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home

set path=(/Users/yt133043/Desktop/glassfish/bin /Users/yt133043/Desktop/glassfish/lib/jruby-1.0/bin

/Users/yt133043/Desktop/glassfish/lib/jruby-1.0/lib/ruby/gems/1.8/gems/rails-1.2.3/bin /usr/local/bin $path .)

setenv LD_LIBRARY_PATH /Users/yt133043/Desktop/glassfish/lib/jruby-1.0/lib:/Users/yt133043/Desktop/glassfish/lib/jruby-1.0/lib/ruby/gems/1.8/gems/rails-1.2.3/lib

setenv JRUBY_HOME /Users/yt133043/Desktop/glassfish/lib/jruby-1.0




2. GlassFishのインストール


さて準備が整いましたら、早速GlassFishをインストールしてみましょう。

インストールはコマンドラインから下記のコマンドを実行して行います。

実行するとライセンスの同意確認画面が表示されますので、[Accept]ボタンを押下します。





yosshi > java -Xmx256m -jar glassfish-installer-v2-b50.jar

glassfish

glassfish/docs

glassfish/docs/css

glassfish/docs/figures

glassfish/docs/graphics

glassfish/docs/images

********************************************中略

glassfish/updatecenter/lib/schema2beans.jar

glassfish/updatecenter/lib/schema2beansdev.jar

glassfish/updatecenter/lib/swing-layout-1.0.1.jar

glassfish/updatecenter/lib/updatecenter-gui.jar

glassfish/updatecenter/lib/updatecenter-installer.jar

glassfish/updatecenter/lib/updatecenter-javahelp.jar

glassfish/updatecenter/lib/updatecenter.jar

glassfish/updatecenter/LICENSE.txt

glassfish/updatecenter/README

glassfish/updatecenter/registry/SYSTEM/local.xml

installation complete





3. GlassFishの構成


インストールが無事完了[instllation complete]するとGlassFishを構成します。


構成を行う前に、Profileについて簡単に説明します。

GlassFish v2より構成を行うために、新たにProfileという概念が導入されました。

Profileは初期設定を簡素化する為、頻繁に利用される3種類の構成をテンプレート化したものです。

Profileには、開発者用、クラスタ用、エンタープライズ用が用意されており、それぞれ異なる

設定が可能になっております。Profileの詳細については下記を参照してください。


Profileの詳細(One Pager: Usage Profile Support for Application Server)


今回、私は構成の為、クラスタ用のプロファイルを使用する事にしました。


   ※開発者用で構成するにはsetup.xmlを指定してください。


GlassFishの構成を行うと下記のトレースが出力されます。ここでGlassFishの管理サーバに

接続する為のポート番号の他、管理サーバインスタンスで使用されるポート番号等が

出力されますので、確認しておいてください。




yosshi > chmod -R 755 ./lib/ant/bin

yosshi > ./lib/ant/bin/ant -f setup-cluster.xml

Buildfile: setup-cluster.xml

all:

[mkdir] Created dir: /Users/yt133043/Desktop/glassfish/bin

get.java.home:

********************************************中略

create.domain:

[exec] Using port 4848 for Admin.

[exec] Using port 8080 for HTTP Instance.

[exec] Using port 7676 for JMS.

[exec] Using port 3700 for IIOP.

[exec] Using port 8181 for HTTP_SSL.

[exec] Using default port 3820 for IIOP_SSL.

[exec] Using default port 3920 for IIOP_MUTUALAUTH.

[exec] Using default port 8686 for JMX_ADMIN.

[exec] Domain being created with profile:cluster, as specified by variable AS_ADMIN_PROFILE in configuration file.

[exec] Security Store used should be: JKS

[exec] Domain domain1 created.

[exec] Admin login information for host [localhost] and port [4848] is being overwritten with credentials provided. This is because the –savelogin option was used during create-domain command.

[exec] Login information relevant to admin user name [admin] for this domain [domain1] stored at [/Users/yt133043/.asadminpass] successfully.

[exec] Make sure that this file remains protected. Information stored in this file will be used by asadmin commands to manage this domain.

[delete] Deleting: /Users/yt133043/Desktop/glassfish/passfile



BUILD SUCCESSFUL

Total time: 31 seconds

yosshi > rehash




4. GlassFish管理ドメインの起動


構成が正常に終了すると次にGlassFishの管理ドメインを起動します。

GlassFishを管理する為には2通りの管理方法が存在します。

一つはコマンドラインから行うasadminコマンドと、そして

もう一つは、管理画面から操作を行う方法です。


※ 一部の操作(管理ドメインの起動等)はコマンドラインからしか実行できない物もあります。

  asadminコマンドで実行できる操作の詳細についてはコマンド引数に–help

  をつけて実行してください。引数で指定可能な一覧が表示されます。



asadinコマンドから管理ドメインを起動した後、ブラウザより [ http://HOST:4848 ] にアクセス

してみてください。管理画面へのログイン画面が出力されます。デフォルトの管理ユーザ名、パスワードは

それぞれ、 [ admin ] , [ adminadmin ] です。




yosshi > asadmin start-domain –user=admin domain1

Starting Domain domain1, please wait.

Log redirected to /Users/yt133043/Desktop/glassfish/domains/domain1/logs/server.log.

Redirecting output to /Users/yt133043/Desktop/glassfish/domains/domain1/logs/server.log

Domain domain1 started.

Domain [domain1] is running [Sun Java System Application Server 9.1 (build b50-beta3)] with its configuration and logs at:
[/Users/yt133043/Desktop/glassfish/domains].

Admin Console is available at [http://localhost:4848].

Use the same port [4848] for “asadmin” commands.

User web applications are available at these URLs:

[http://localhost:8080 https://localhost:8181 ].

Following web-contexts are available:

[/web1 /__wstx-services ].

Standard JMX Clients (like JConsole) can connect to JMXServiceURL:

[service:jmx:rmi:///jndi/rmi://yosshi1.japan.sun.com:8686/jmxrmi] for domain management purposes.

Domain listens on at least following ports for connections:

[8080 8181 4848 3700 3820 3920 8686 ].

Domain supports application server clusters and other standalone instances.





5. JRubyのインストール


GlassFishのインストールが完了すると、次にJRubyのインストールを行います。

JRubyはGlassFishのインストールしたディレクトリに存在する/lib配下に行います。





yosshi > cp jruby-bin-1.0.tar ./glassfish/lib/

yosshi > cd ./glassfish/lib/

yosshi > tar xvf jruby-bin-1.0.tar

jruby-1.0/bin/

jruby-1.0/bin/_jrubycleanup.bat

jruby-1.0/bin/_jrubysetcp.bat

jruby-1.0/bin/_jrubyvars.bat

jruby-1.0/bin/_jrubyvmopts.bat

*****************************************中略

jruby-1.0/samples/scripting.rb

jruby-1.0/samples/swing.rb

jruby-1.0/samples/swing2.rbv
jruby-1.0/samples/xslt.rb

yosshi > rehash





6. Railsのインストール


JRubyのインストールが完了すると、Railsもインストールしておきます。

Railsのダウンロード・インストールは約10〜15分程かかりますので、

その間はしばらく別の作業でもしておいてください。







yosshi > jruby -S gem install rails –include-dependencies

Need to update 43 gems from http://gems.rubyforge.org

…………………………………….

complete

Successfully installed rails-1.2.3

Successfully installed activesupport-1.4.2

Successfully installed activerecord-1.15.3

Successfully installed actionpack-1.13.3

Successfully installed actionmailer-1.3.3

******************************************中略

Installing RDoc documentation for actionmailer-1.3.3…

Installing RDoc documentation for actionwebservice-1.2.3…





6.1 Activerecord-JDBCのインストール(必要な場合)


これは、必要に応じてインストールしてください。goldspikeでwarを作成する場合、

本ライブラリが必要なようです。




yosshi > jruby -S gem install activerecord-jdbc

Successfully installed ActiveRecord-JDBC-0.4

Installing ri documentation for ActiveRecord-JDBC-0.4…

Installing RDoc documentation for ActiveRecord-JDBC-0.4…

yosshi > jruby -v

ruby 1.8.5 (2007-06-07 rev 3841) [i386-jruby1.0]

yosshi > jruby -S rails -v

Rails 1.2.3





7. Rails アプリケーションの作成


JRubyとRailsのインストールが完了しましたので、実際にサンプルの

アプリケーションを作成しましょう。JRuby on Railsのアプリケーションは、

GlassFishのドキュメントルート配下に直接作成します。





yosshi > cd /Users/yt133043/Desktop/glassfish/domains/domain1/

yosshi > pwd

/Users/yt133043/Desktop/glassfish/domains/domain1/

yosshi > ls

addons bin generated jbi master-password

applications config imq lib session-store

autodeploy docroot java-web-start logs


yosshi > cd docroot/

cd docroot/

yosshi > jruby -S rails sample-app

create

create app/controllers

create app/helpers

create app/models

create app/views/layouts

create config/environments

create components

**************************************************中略

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





8. Railsプログラムの作成


HelloWorldの簡単なプログラムを作成してみます。




yosshi > cd /Users/yt133043/Desktop/glassfish/domains/domain1/docroot/sample-app

yosshi > pwd

/Users/yt133043/Desktop/glassfish/domains/domain1/docroot/sample-app

yosshi > jruby script/generate controller hello

exists app/controllers/

exists app/helpers/

create app/views/hello

exists test/functional/

create app/controllers/hello_controller.rb

create test/functional/hello_controller_test.rb

create app/helpers/hello_helper.rb

yosshi > cd app/controllers/

cd app/controllers/

yosshi > vi hello_controller.rb



class HelloController  “<H2>Hello World</H2>”
end
end





9. Railsのroute.rbの修正


プログラムの作成が終わると、Routingを設定します。

ここでは、REQUEST_URI(sample-app/)を解釈し、controllerとactionを指定します。





yosshi > cd ../../config/

yosshi > vi routes.rb

下記を追加


map.connect ‘sample-app/:id’, :controller => ‘hello’, :action => ‘index’




10. GlassFishのドメイン中のdefault-web.xmlファイルの修正


JRuby on Railsのプログラムを作成した後、GlassFish上から作成したアプリケーションを

呼び出すための設定を行います。default-web.xmlという設定ファイルに、下記のコードを

記載してください。



yosshi > cd /Users/yt133043/Desktop/glassfish/domains/domain1/config

yosshi > vi default-web.xml


<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value>sample-app/public/dispatch.cgi</param-value>

</init-param>

<init-param>

<param-name>executable</param-name>

<param-value>/Users/yt133043/Desktop/glassfish/lib/jruby-1.0/bin/jruby</param-value>

</init-param>

<init-param>

<param-name>passShellEnvironment</param-name>

<param-value>true</param-value>

</init-param>

</servlet>



<servlet-mapping>

<servlet-name>cgi</servlet-name>

<url-pattern>/sample-app/*</url-pattern>

</servlet-mapping>






11. ドメインの再起動(起動/停止)


ここで、設定を修正したので、ドメインの再起動を行います。




yosshi > asadmin stop-domain domain1
Domain domain1 stopped.
yosshi > asadmin start-domain domain1
Starting Domain domain1, please wait.
Log redirected to /Users/yt133043/Desktop/glassfish/domains/domain1/logs/server.log.
2007/06/20 4:12:23 com.sun.portal.portletcontainer.sdkinstaller.PortletContainerConfigurator main
…… ( 中略 )
Domain listens on at least following ports for connections:
[8080 8181 4848 3700 3820 3920 8686 ].
Domain supports application server clusters and other standalone instances.





12. ドメイン上でサンプルアプリの動作確認


それでは、実際に、ブラウザ経由でサーバインスタンスに接続してみてください。



http://HOST:8080/sample-app


如何でしょう。HelloWorldは正常に表示されましたか?

正常に表示されたら、直接 controllerを修正して再度ブラウザより

アクセスしてみてください。

動的に修正が反影されている事が確認できましたか?





13. GlassFishのノードエージェントの作成


今、管理サーバインスタンスと同一上にアプリケーションを作成しています。

そこで、セキュリティ的にも問題ですので、新たにサービスを提供する為の

インスタンスを作成しましょう。インスタンスを作成する前にまず、

インスタンスを稼働させる為のノードエージェントを作成します。





yosshi > asadmin create-node-agent –user=admin yosshi1

Command create-node-agent executed successfully.





14. ノードエージェント上にインスタンスの作成


ノードエージェントを作成した後、ノードエージェント上にインスタンスを

作成します。作成したインスタンスに接続する為のポート番号はHTTP_LISTENER_PORT

に記載されている(ここでは、38083)番号になります。




yosshi > asadmin create-instance –nodeagent yosshi1 instance1

Using 38,083 for HTTP_LISTENER_PORT.

Using 38,184 for HTTP_SSL_LISTENER_PORT.

Using 33,823 for IIOP_SSL_LISTENER_PORT.

Using 37,678 for JMS_PROVIDER_PORT.

Using 33,703 for IIOP_LISTENER_PORT.

Using 38,689 for JMX_SYSTEM_CONNECTOR_PORT.

Using 33,923 for IIOP_SSL_MUTUALAUTH_PORT.

Command create-instance executed successfully.





15. ノードエージェント+インスタンスの起動


ノードエージェントとインスタンスを作成した後、それぞれを起動します。

ここで、インスタンスはノードエージェントを起動した際に自動的に起動されます。

また、起動時に問い合わせされるadminとmasterのデフォルトのパスワードは、

それぞれ、 [ adminadmin ] , [ changeit ] になります。





yosshi > asadmin start-node-agent –user=admin yosshi1

Please enter the admin password> [ adminadmin ]



Please enter the master password [Enter to accept the default]:> [ changeit ]



Redirecting output to /Users/yt133043/Desktop/glassfish/nodeagents/yosshi1/agent/logs/server.log

Redirecting application output to /Users/yt133043/Desktop/glassfish/nodeagents/yosshi1/agent/logs/server.log

Redirecting output to /Users/yt133043/Desktop/glassfish/nodeagents/yosshi1/instance1/logs/server.log

Command start-node-agent executed successfully.





16. インスタンス上でのサンプルアプリの動作確認


それでは、最後に作成したインスタンスに接続してみましょう。


http://HOST:HTTP_LISTENER_PORT/sample-app


如何でしょう。HelloWorldは正常に表示されましたか?


※ プログラムの修正はかならず、domain/docroot配下に存在するコードを修正してください。

 ノードエージェント上に存在するdocrootを修正しても、インスタンスを再起動した後

 domain/docroot配下に存在する内容で上書きされてしまいます。

 GlassFishではCentral Repositoryという機能が存在し、

 ドメインで全てのコンテンツを管理しています。

 そして、各インスタンスでは、そのRepositoryのキャッシュが存在するという

 アーキテクチャになっていますので、キャッシュ上のコンテンツを編集しても

 オリジナルのコンテンツが変更されていない場合、キャッシュに施した修正が

 上書きされてしまいます。

 そこで、修正は全てドメインに存在するコンテンツに対して行い、

 各インスタンスに対する変更のアップデートは、インスタンスの再起動を実施し

 行ってください。



asadmin stop-instance

asadmin start-instance





最後に


以上で、GlassFish上でCGI経由でJRubyを動かす方法について説明しましたが、

最初にも述べましたが、CGI経由の呼び出しは毎回JVMが起動されるため、

非常にコストが高くなっています。ただそれでも動的に変更が確認できるという点は

非常に有用です。ケースバイケースで本設定を御試しください。

Have a good JRuby environment !!



ビデオ





広告

Entry filed under: Application Server/GlassFish.

UNIX MagazineでApplication Server特集 SJS Web Server 7.0 Update 1のリリース


Java Champion & Evangelist

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2007年6月
« 5月   7月 »
 123
45678910
11121314151617
18192021222324
252627282930  

カテゴリー

Twitter

  • ありがとうございます😊 twitter.com/chomado/status… 1 hour ago
  • @kotomacontact そうですね、ここに限らずたまに、似た話を聞きますので、つい書いてしまいました。 ありがとうございます。私自身も勘違いがおきないような資料作りを今後も、心がけていきたいと思います。 3 hours ago
  • @kotomacontact と思ってます。 3 hours ago
  • @kotomacontact 人は間違いがありますし(私も含め)個人攻撃をしたいわけではないです。ただDBサービスという区切り方はないです。だってDBが落ちてしまうとそこに接続している全サービスは落ちますしサービス毎のスケールもできない。単にAPI化すれば良いというわけでもない 3 hours ago
  • RT @DaschnerS: IntelliJ 2017.3 EAP improves its #JavaEE8 support! twitter.com/intellijidea/s… 5 hours ago

clustermap

ブログ統計情報

  • 1,004,766 hits

Feeds


%d人のブロガーが「いいね」をつけました。