fc2ブログ

makopi23のブログ

makopi23が日々の生活で感じたことを気ままに綴るブログです。

「ユースケース駆動開発実践ガイド」で扱っている題材「インターネット書店」の環境構築

「ユースケース駆動開発実践ガイド」という書籍を読んでいるが、中々の良書である。

ユースケース駆動開発実践ガイド
翔泳社 (2016-01-28)
売り上げランキング: 27,362


ICONIXプロセスという手法を扱っており、DDD本の次に読む本としてもオススメだと思います。
ただ日本語版の初版が2007年発行(原著はもっと前!)なので、この書籍で扱っているプログラム題材「インターネット書店」を動作させるための環境構築にチョト苦労した・・・
10年以上前と今では、Spring FrameworkやTomcat、その他諸々のOSSのバージョンの差異がかなりデカいのよね。

せっかくなので、環境構築の手順について纏めておくことにする。Javaを普段使ってない読者向け。
ちなみに、ここで紹介する方法が正解というわけではないので注意!
とりあえず動作させるためにやってみた一例です。

環境


makopi23のPC環境は以下の通り。IDEはEclipseとTomcatが両方入ってる「Pleiades All in One」を使っている。



ソースコードの入手


makopi23が環境構築したプロジェクトを以下のGitHubにアップロードしたので、 C:\Dev フォルダにcloneすべし。
https://github.com/makopi23/InternetBookstore

InternetBookstore_clone.jpg

以下、C:\Dev フォルダにcloneしたことを前提に説明するが、clone先は他のフォルダでも構わない。
ただしその場合は、InternetBookstore\war\WEB-INF\bookstore-servlet.xml の15行目あたりのパスを修正すること。

ちなみに原著のソースコードは以下からDL出来る模様。(2017年3月現在)
https://iconixprocess.wordpress.com/downloads/internet-bookstore/


ライブラリの入手


Spring Frameworkは 2.0.5 を、HSQLDBは1.7.3 を既に入手してある。(2007年当時はこのくらいのバージョンだったらしい)
両者のjarファイルは C:\Dev\InternetBookstore\war\WEB-INF\lib にmakopi23が入れておいた。
その他必要となるライブラリのjarもmakopi23が入手して上記フォルダに入れてあるので、新たに入手する必要は無い。


Eclipseの環境構築


cloneしたInternetBookstoreの直下には .project ファイルを置いているので、Eclipseにそのままインポートできる。
Eclipseのメニューから[ファイル]-[インポート]-[既存プロジェクトをワークスペースへ]と選択し、インポートすべし。

Eclipseのパースペクティブは「Java EE」を選択しておく。
InternetBookstore_javaee.jpg

JDKのバージョンは 1.6 にとりあえずしておく。
InternetBookstore_jdk.jpg

次に、Tomcatの準備をする。
「サーバー」タブを選択し、「新規サーバを作成してください」的なリンクをクリックする。
InternetBookstore_server.jpg

Tomcatのバージョンを選択する画面では、「Tomcat 6」をとりあえず選択しておく。
(2007年当時はこのくらいのバージョンだったはず)
InternetBookstore_tomcat6.jpg

これでEclipseの準備はOK。


デプロイ


プログラム題材「インターネット書店」をTomcatにデプロイする。
「InternetBookstore」を右クリック → 実行 → サーバーで実行
InternetBookstore_deploy.jpg

使用するサーバーの選択画面が出るので、Tomcat 6 になっていることを確認し、完了ボタンを押す。
すると、Eclipseの内蔵ブラウザが起動して、「インターネット書店」のトップページが表示される。
InternetBookstore_homepage.jpg


「インターネット書店」の動作確認


トップページのURLは http://localhost:8080/InternetBookstore/
InternetBookstore_top.jpg

ハリー・ポッターの書籍が7冊表示されているので、一番上の1冊目のリンクをクリックする。
すると、ユースケース「書籍詳細を表示する」のページに遷移する。
URLは http://localhost:8080/InternetBookstore/bookdetails.htm?id=101
InternetBookstore_bookdetails.jpg

「Write a review of this book」のリンクをクリックすると、ユースケース「顧客レビューを書く」のページへ遷移する。
URLは http://localhost:8080/InternetBookstore/writecustomerreview.htm?bookid=101
InternetBookstore_review.jpg

Title、Your Review、Ratingの3つを入力し、「Save Review」ボタンをクリックすると、Thanksページへ遷移する。
URLは http://localhost:8080/InternetBookstore/writecustomerreview.htm
InternetBookstore_thanks.jpg

「Continue shopping」のリンクをクリックするとトップページへ戻る。


データベース


投稿した書籍レビューの文章がデータベースにちゃんと入ってるか確認してみる。

まず、アプリケーション実行中はTomcat 6がHSQLDBのファイルにロックをかけているようなので、Tomcat 6を停止する必要がある。
Eclipseの「サーバー」タブに赤四角の停止ボタンがあるので、それを押せばTomcatが停止する。

次にHSQLDBを起動する。
コマンドプロンプトで C:\Dev\InternetBookstore\db に移動し、以下のコマンドを実行する。
java -cp ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.Server
InternetBookstore_hsqldb_start.jpg

次に、コマンドプロンプトを別ウィンドウでもう1つ起動し、C:\Dev\InternetBookstore\db に移動し以下のコマンドを実行する。
java -cp ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.util.DatabaseManager
InternetBookstore_databasemanager.jpg

DB接続画面のGUIが起動するので、Type欄を「HSQL Database Engine Server」を選択してOKボタンを押す。
InternetBookstore_connect.jpg

「HSQL DataBase Manager」のGUIが起動するので、ここからSQLを実行できる。
さきほど投稿した書籍レビューが CustomerReviews テーブルに入っているか、Select文を実行してみる。

select * from CustomerReviews;

すると、SQL実行結果が表示される。さきほど投稿した結果が最終行(ID=6)に表示されている。
InternetBookstore_sql1.jpg


まとめ


10年以上前のアプリを1から環境構築するのはけっこう骨が折れますね・・・
原著のソースコード公開先を見つけるだけでも一苦労でした。(公式サイトのソースコードDL先とかリンク切れしてるし)

ちなみに冒頭で「DDD本を読んだ人が、次に読む本としてもオススメ」と書いたDDD本はこちら。

エリック・エヴァンスのドメイン駆動設計
翔泳社 (2013-11-20)
売り上げランキング: 6,998


DDD界隈で著名な増田さん、かとじゅんさんも「ユースケース駆動開発実践ガイド」をオススメしている模様。



「ユースケース駆動開発実践ガイド」の読書会も開催されているので、この機会に是非参加して一緒に読んでみませんか~

コデアル読書会 - ユースケース駆動開発実践ガイド
https://codeal.connpass.com/
(私もこの読書会がキッカケで読み始めました)


おまけ



ダウンロードしてきた原著のソースコードは、そのままだといくつか動作しない箇所があった。
そのため、makopi23が以下の修正を独自に入れてるので注意が必要。

■修正点
(1)
InternetBookstore\war\META-INF\context.xml を削除

(2)
bookstore-servlet.xml の50行目あたり
BookstoreValidatorをコメントアウトし、CustomerReviewValidatorを追加

(3)
/InternetBookstore/src/com/iconixsw/bookstore/domain/logic/CustomerReviewValidator.java を追加

(4)
INSERT INTO Books (id, title, synopsis)
  VALUES
(107, 'Harry Potter and the As-yet Unreleased Novel',
  'Harry continues his adventures and ...'
);

(5)
INSERT INTO Customers (id, firstName, lastName, email, password) 
 values (1, 'Billy Bob', 'Red', 'billybob@abc.xyz', 'password');

(6)
customerreviewaccepted.jsp
【誤】<p><a href="home.jsp">Continue shopping</a></p>
【正】<p><a href="home.htm">Continue shopping</a></p>

(7)
writecustomerreview.jsp
【誤】
<a href="bookdetails.htm?bookid=<c:out value="${command.book.id}"/>">View
book details</a>
【正】
<a href="bookdetails.htm?id=<c:out value="${command.book.id}"/>">View
book details</a>

-->