近年SpringSourceはモジュールに分離したアプリケーションの開発を行うための環境を整えてきた。その成果の一つがSpring dm Server(以下dm Server)である。

既に本企画では、SpringSourceが手がけた成果物としてSpring Dynamic Modules(以下Spring DM)を取り上げた。Spring DMは、SpringFrameworkのDIコンテナをOSGiコンテナへ展開を目的として始めたプロジェクトに対し、dm ServerはSpring DMをカーネルとして開発されたサーバである。

言い換えればSpring DMは各モジュールのワイアリングを行う機能を持った1モジュールだが、dm Serverはモジュールを動的にデプロイする事のできるコンテナであり、また開発しているモジュールの配布ができるリポジトリの役目を持つ。そのため、dm Serverに展開できるモジュールは、OSGiのBundle形式であり、動的なインストール、更新、削除がサポートしている。

Spring dm Serverを試す

dm Serverはtc Serverとは異なり、Spring Frameworkと同様Spring Community Downloadからダウンロードができる。dm Serverの最新版はこちらのサイトよりダウンロードできる。最新版は2.0.1.RELEASEである。

ダウンロードし、解凍すると、下記の構成で展開される。

試しにdm Serverを起動してみよう。展開したspringsource-dm-server-2.0.1.RELEASE(以下DM_HOME)フォルダにbinというフォルダがある。そこに移動し、起動する。

$ cd DM_HOME
$ ./startup.bat

無事に起動ができれば、http://localhost:8080/ にアクセスすると、下記のスプラッシュ画面が表示される。

続いて管理画面を開いてみよう。左上のAdmin Consoleへのリンクをクリックすると、認証画面が表示されるが、ID:admin、Password:springsourceを入力すると、認証され、下記の画面が開かれる。

dm Server対応サンプルアプリケーションをデプロイする

dm Serverにはgreenpagesというサンプルアプリケーションがある。今回はこのサンプルアプリケーションを見ていく。greenpagesはこちらのサイトよりダウンロードできる。

ダウンロード後、展開すると、下記の構成で展開される。

展開したgreenpages-2.1.0.RELEASE(以下GP_HOME)フォルダの中にあるsolutionフォルダをのぞくと、greenpagesの他、greenpages.db、greenpages.jpa、greenpages.webとそれぞれレイヤ毎に切り分けられた子プロジェクトとして、Mavenプロジェクトが作成されている。モジュール化を進めた開発では、モジュール毎にプロジェクトを作成する事が多い。こうする事で、それぞれ独立して開発を進める事が可能だ。そしてコードベースのレベルでの変更が独立されるので、ソースコードレベルの影響を最小化できる。また、デプロイする成果物の単位も、子プロジェクト毎にできるため、アプリケーションへの変更の影響も低減できる。

では、ビルドを行ってみよう。

$ cd GP_HOME/solution
$ mvn package

ビルドが終わると、GP_HOME/solution/greenpages/target以下に「greenpages-solution-2.0.1.SNAPSHOT.par」というファイルができている。"par"という拡張子はdm Serverにおけるデプロイのための形式で固めたファイルである。といっても、JARと同様、Zip圧縮されたファイルであるため、jarコマンドで解凍できる。試しに解凍してみよう。

$ cd GP_HOME/solutiongreenpages/target
$ jar xf greenpages-solution-2.0.1.SNAPSHOT.par

展開されると、greenpages.app-solution.jar、 greenpages.db-solution.jar、 greenpages.jpa-solution.jar、 greenpages.web-solution.warの4つである事が分かる。つまり、PAR形式とは、子プロジェクトの成果物を一つにまとめた形式である。

続いて、作成したgreenpagesをデプロイしてみよう。まず、このアプリケーションに必要なライブラリをdm Serverにデプロイする必要がある。といっても、GP_HOME/solution/greenpages/target/par-provided 以下に既に集められている。ここにあるJAR群をdm Serverへデプロイする。 dm ServerのユーザリポジトリはDM_HOME/repository/usrなので、そこへコピーする。

$ cp GP_HOME/solution/greenpages/target/par-provided/* DM_HOME/repository/usr

続いて、DBを起動し、テストデータを導入する。DBの起動、テストデータの導入は下記のように行う。

$ cd GP_HOME/db
$ run
$ data

テストデータの導入は以上である。

では、先ほど作成したPARをデプロイする。まず、Artifact Consoleを開く。下記画像の赤枠の「Artifacts」をクリックする。

続いて先ほど作成したPARファイルを選択して、Uploadボタンを押す。

無事にデプロイができると次の画面が表示され、「pars」にデプロイしたアプリケーションが登録されている事がわかるだろう。

無事にデプロイができている事を確認するため、http://localhost:8080/greenpages/にアクセスすると、下記のページが表示されるはずである。

なお、本手順はhttp://static.springsource.org/s2-dmserver/2.0.x/getting-started/html/を参考に作成した。そちらも併せて参考にしてほしい。

*  *  *

実はこれまでSpringSourceのみで開発を進めてきたSpring DM、Spring dm Serverであるが、共にソースコードがEclipse Foundationに寄贈され、それぞれEclipse Geminiプロジェクト、Eclipse Vergoプロジェクトとして開発が進められる事になった。

これはエンタープライズアプリケーションの開発において、OSGiが用いられるようになってから日が浅いため、主流の開発現場ではまだ短期的なコストがかかるためである。そのため、既にEquinoxなど、dm Serverのコアとなっているプロジェクトがあり、そしていくつかのベンダで協調して開発が行えるEclipse.orgにて開発を行う事で、よりよい成果を産む事を目的に寄贈された(既にSpring Dynamic Modules Reference GuideにはOracleのHal Hildebrand氏など、SpringSource外の企業のメンバーが名を連ねている)。

とはいえ、長期的な視点からとらえた時、アプリケーションのモジュール化がもたらす利点は多い。Eclipse.orgにプロジェクトが移管された後も、これらのプロジェクトではメインコミッタとしてSpringSourceのエンジニアが活躍し続ける予定のため、今後も注目すべきプロジェクトだろう。

執筆者紹介

近藤 寛喜(KONDO Hiroki) - チェンジビジョン 開発部


前職からSpringFrameworkを自ら拡張するくらい使っていたエンジニア。転職後は主にPCで動作するツールの開発を行っている。

Eclipseベースのツール開発を行っていたため、Spring DMに興味を持ち、Spring DMの扱い方など、モジュールベース開発を広めている。今回の企画ではSpring dm ServerやSpring tc Server、STSを担当。