前回は、Apache Software Fundationが約2年の歳月をかけて開発し、先日バージョン1.0をリリースしたオープンソースの J2EE アプリケーションサーバーGeronimoを紹介した。今回は、さらに深くGeronimoを解説してゆく。
付属アプリケーションDayTrader
前回 Webコンテナに JSF+Spring+Hibernate という最近では一般的な構成のアプリケーションをデプロイし、その手順などを紹介した。すなわち 組み込まれている Webコンテナ(TomcatとJettyから選択できるが Tomcat版を利用)のみを使ったアプリケーションを試したことになる。
今回は、EJBを用いたアプリケーションをデプロイし、J2EEアプリケーションサーバーの重要な機能である EJB コンテナを試してみたい。筆者が一通り試したところ、特に問題なく動作しておりGeronimoに期待以上の安定感を感じた。
今回は、Geronimo に付属している DayTrader というアプリケーションを利用してみた。DayTraderアプリケーション自体はオンライン株取引アプリケーションだが、アプリケーション内ではサーブレット、JSP、Webサービス、jEJB(Session Bean、Container-managed Persistence[CMP] Entity Bean、Message Driven Bean)を利用しており、J2EEサーバーの様々な機能のテストも兼ねるように設計されている。
DayTraderアプリケーションは、Geronimoをインストールし起動すれば既にデプロイ済みとなっており利用な状態にある(Geronimoのインストールおよび起動の方法は前回を参照していただきたい)。デプロイされているアプリケーションを参照するには、Geronimoの管理コンソールから参照可能だ。管理コンソールには、Geronimo起動後にWebブラウザより http://<ホスト>:8080/console/ にアクセスし、 ユーザー名 system パスワード manager でログインする
Geronomiのユーザー管理
まずは、ユーザー管理機能から紹介してゆこう。
管理コンソールへログインできるユーザーは初期状態では1つのみ定義されている。新しいユーザーの定義は管理コンソールから行える。定義を行う場合、管理コンソールの[Console Realm]メニューを選択し、表示される[Create New User]を選択することでCreateUserのページ(写真1)が表示され新しい管理ユーザーを追加することができる。
この定義は %GERONIMO_HOME%/var/security にある users.properties と groups.properties を編集することによってよって行われている。例えば新しい管理ユーザー root が追加された場合には、 users.properties が下記のように編集される。リスト1のように「ユーザー名=パスワード」という単純な書式で、ユーザーのリストを管理している。
リスト1●users.properties
system=manager root=root |
ユーザーの権限を管理しているのは groups.properties ファイルだ。このファイルはリスト2のように「グループ名=ユーザー名のリスト」の書式で記述されている。
リスト2●groups.properties
admin=system、root |
これらのファイルを直接編集しても同様の作業が行えるが、編集ミスをなくすためにもユーザー管理に限らず、管理コンソールから行えることは管理コンソールから行うべきだろう。
管理コンソールアプリケーションは実際には直接これらファイルを参照している訳ではない。管理コンソールアプリケーションは、Geronimoが提供する JAAS(Java Authentication and Authorization Service)の機能を用いている。その定義内でレルム geronimo-properties-realm 内に定義されている admin ロールをもったユーザーのみがアプリケーションにアクセス可能であるように定義しているのだ(リスト3)。
リスト3●管理コンソールアプリケーションのWebデプロイメントディスクリプタ(抜粋)
<security-constraint> <web-resource-collection> <web-resource-name></web-resource-name> <url-pattern>/portal/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>PUT</http-method> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name></web-resource-name> <url-pattern>/secure/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>PUT</http-method> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <realm-name>geronimo-properties-realm</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/loginerror.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>admin</role-name> </security-role> |
レルムとはユーザー名とパスワード、グループなどのリソースである。このレルムの管理は、管理コンソールの[Security Realms]メニューを選択すればよい。初期状態では管理コンソールアプリケーション用のレルムである geronimo-properties-realm と、ldap-realmが定義されている。前者は先ほどのpropertiesファイルを用いたユーザー管理、後者は LDAP によるユーザー管理が行われている。
GeronimoのLDAPレルムを試す
ではこのGeronimoのLDAPレルムを試してみよう。このLDAPレルムが参照しているLDAPサーバーは Pure Java のLDAPサーバーApache Directory Serverだ。
このサーバーは Geronimo に組み込まれているためGeronimo起動と共に起動され有効になる。初期状態ではこのLDAP内には管理ユーザー以外のユーザーは登録されていない。今回は新しいユーザーを追加するのに、GeronimoのLDAPデモ用に用意されている LDIFファイル(LDAP Data Interchange File )をインポートした。このファイルは http://localhost:8080/ldap-demo/geronimo-realm.ldif にアクセスすることで入手可能だ。
インポートすると systemとuser1とuser2 という3ユーザーが インポートされる。筆者はインポートにJavaで記述されているLDAPクライアントLDAP Browser/Editorを用いて行ったが、OpenLDAPが配布しているクライアントツールを用いてもよい。写真2は、LDAP Browserでインポート後の状態を表示している。いずれの方法にせよ、写真3の設定で Geronimo が内蔵する LDAP サーバーに管理アカウントで接続することができる。
インポートが完了したら LDAP 認証のデモプログラムのURL http://localhost:8080/ldap-demo/protect/hello.html にアクセスすれば、LDAPレルムを用いた認証が成功する(写真4)。
後半では、実際にEJBをデプロイし、デモ・アプリケーションを動かすまでを解説する。
(後編に続く)
■著者紹介 黒住幸光(くろずみ ゆきみつ)氏 |