近年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を担当。