■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2008年05月11日

    楽しいJava講座 - 初心者から達人へのパスポート
                  vol.103

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]

========================================================
◆ 01.Tomcatのアプリケーション開発
========================================================


前回は、WARファイルを使ってデプロイを行う方法を説明しましたが、
WARファイルにはいっている内容はwebappsディレクトリー下に置くもの
だけだということに注意してください。
JDBCドライバーのJARファイルなど、複数のアプリケーションで共有
するようなファイルは、別途
C:\Tomcat6.0\lib
にコピーしておく必要があります(vol.101参照)。



はい。では、これまでEclipseで使用してきたPCとは別のPCにデプロイを
する場合のデータベースのロードのお話の続きですが、
MySQLには、mysqldumpというツールが提供されており、このツールを使う
と、データベースのデータを外部のファイルに書き出すことができます。

このツールはMySQLのbinディレクトリー(フォルダー)、すなわち
C:\Program Files\MySQL\MySQL Server 5.0\bin
の中にはいっています。

こういったMySQLのツールは、本格的にデータベースを使用するようになると
頻繁に使われますので、ツールを簡単に呼び出せるようにしておくべきです。

そのために、以下のようにして、MySQLのbinフォルダーを環境変数のPATHに
登録しておきましょう。
以下の作業をEclipseでの開発に使ってきたPCとデプロイ先のPCの両方で
行っておきましょう。

(1) 「スタート」メニューから(「設定」→)「コントロール
パネル」を選択し、「コントロールパネル」ウィンドウの中から
「システム」のアイコンをダブルクリックします。

あるいは、「マイコンピュータ」を右クリックし、「プロパティ」
を選択します。

(2) Windows 2000では「詳細」タブ、Windows XPでは
「詳細設定」タブを選択します。

(3) 次に「環境変数」ボタンをクリックします。

(4) 「ユーザ環境変数」と「システム環境変数」のそれぞれの領域
の中で「Path」という文字を探します。
「Path」のつづりは大文字も小文字も区別されません。つまり、
全部大文字になっていても全部小文字になっていても同じものです。

(5) 「Path」を見つけたら、その行をクリックし、「編集」ボタン
をクリックして、「変数値」の先頭に以下の内容を入力します。

C:\Program Files\MySQL\MySQL Server 5.0\bin;

これはMySQLのbinフォルダーのパスですが、正しいパスになっている
ことを確認して下さい。もしMySQLを別のフォルダーにインストール
していたのであれば、別のフォルダー名を指定する必要があります。
(「変数値」は最初は後ろのほうが表示されていて、先頭は見えていな
いと思うので、カーソルを先頭(左端)まで移動して、確実にカーソル
が先頭に来たことを確認してから入力してください。
間違えると大変なことになりますから、間違えたと思ったら、いったん
「キャンセル」ボタンをクリックしてからやり直してください。)

なお、以前にもお話した通り、セミコロン(;)は区切りのマークです。
セミコロン(;)とコロン(:)は見た目に区別がつきにくいかもしれま
せんので、間違えないように、じゅうぶん注意してください。

(6) 終わったら、「OK」ボタンをクリックします。残りのウインド
ウも「OK」ボタンをクリックして閉じてください。
「コントロールパネル」ウインドウも閉じてください。


PATHの変更を正しく反映させるために、Windowsの再起動が必要に
なります。
この時点でWindowsを再起動しておきましょう。



では、mysqldumpを使って、データベースのデータを外部のファイルに
書き出しましょう。
(この作業は、開発で使ってきたPCのほうで行います。)

コマンド・プロンプト(「スタート」ボタン→「(すべての)プログラム」
→「アクセサリ」→「コマンドプロンプト」)を開き、
下記のコマンドを順番に入力していって下さい。
(以下はMySQL_worksというフォルダーを作成して、そこにデータベースの
データをINTSHOP.sqlというファイル名で書き出すようにしています。)

cd \  [Enter]
([Enter]はEnterキーを押すことを意味します。)

mkdir MySQL_works  [Enter]

cd MySQL_works  [Enter]

mysqldump -u root -prootpass --databases INTSHOP > INTSHOP.sql  [Enter]

ここで、-uはユーザー名を指定するためのパラメーターで、-pはパスワードを
指定するためのパラメーターです。
つまり、-uの後ろに指定したrootはMySQLのユーザー名、-pの後ろに指定した
rootpassはそのパスワードです。
ここで紛らわしいことに、
-p rootpass
というように-pの後ろにスペースを空けてしまうと、パスワードではなくデフォルトの
データベースを指定するパラメーターになってしまい、意味が違ってしまいます。
-pとパスワードの間は、スペースを空けずに必ずくっつけるように注意してください。

また、--databasesは対象とするデータベースを指定するためのパラメーターで、
ここではデータベースとしてINTSHOPを指定しています。

これでmysqldumpが実行され、MySQL_worksフォルダーの中にINTSHOP.sql
というファイルが作成されます。(エクスプローラーでファイルを見て
いる人は、INTSHOP.sqlの作成直後にはエクスプローラーにはまだ反映
されていないかもしれませんので、その場合は、メニュー・バーの
「表示」→「最新の情報に更新」を選択して画面を最新の状態にして
から見てください。)

INTSHOP.sqlというファイル名から推定されることと思いますが、このファイル
の中には、SQL文がはいっています。
複数のSQL文がはいっており、これらを実行すると、データベースの作成、テーブル
の作成、データのロード(追加)が行われるようになっています。


では、デプロイ先のPCにも上記と同じMySQL_worksフォルダーを作成しておき、
そこに、INTSHOP.sqlファイルをコピーしておきましょう。


続いて、デプロイ先のPCでMySQLにこのINTSHOP.sqlファイルを読み込ませる
ことによって、データをデータベースにロードしましょう。
デプロイ先のPCでコマンド・プロンプトを開き、次のコマンドを実行して
下さい。

cd MySQL_works  [Enter]

mysql -u root -prootpass -e "source INTSHOP.sql"  [Enter]

これで、INTSHOP.sqlファイルの内容がすべてデータベースに書き込まれました。

コマンド・プロンプトは閉じてしまってください(exitを入力する)。

ちなみにこのmysqlというコマンドは、MySQLのコマンド・ライン・クライアント
で動いているものと同じプログラムです。


これで、デプロイ先のPCでTomcatを起動すれば、テストできます。
たとえば、デプロイ先のPCのIPアドレスが192.168.0.6の場合は
(IPアドレスの調べ方を忘れた人は、vol.067を復習して下さい)
そのPCにLANでつながっている別のPCでWebブラウザーを起動して

http://192.168.0.6:8080/JStudy2/itemSelect.html

というURLを入力し、あとはいつものようにテストを行います。

(IPアドレスの調べ方を忘れた人は、vol.067を参照してください。)



ここで後学のために、INTSHOP.sqlをテキスト・エディターで開いて
見てください。
データベース名(intshop)やテーブル名(customer、item、orderheader、orderitem)
が小文字になっていますね。

これは、Windowsではファイル名を大文字で書いても小文字で書いても同一ファイル
とみなす(たとえば、CUSTOMER.FRMとcustomer.frmは同一ファイルとみなす)ため、
MySQLでは小文字のほうを優先して使うためです。

しかし、UNIXやLinuxでは、大文字で書いたファイル名と小文字で書いたファイル名は
別のファイルとして区別するため、上記のSQLファイルを使って作成したテーブルに
大文字のテーブル名を使ってアクセスしようとすると、テーブルが存在しない旨の
エラーになってしまいます。

というわけで、UNIXやLinuxを使用する場合にはデータベース名やテーブル名を大文字
にするか小文字にするか、どちらかに統一し、たとえば大文字に統一する場合は、
上記のSQLファイルの中のデータベース名やテーブル名を大文字に書き替えておく
必要があるのです。
(これはMySQLに限定した注意点です。MySQLはテーブルをファイルにして、OSの
ファイル管理機能でテーブルを管理させているためにこのような問題が生じるの
です。一般のRDBMSにこのような問題が生じる訳ではありません。)



┌補足─────────────────────────┐
上記のmysqldumpの実行では、データベースごと外部ファイルに
書き出していましたが、実際のアプリケーションの運用時には
テーブルごとに別々の外部ファイルに書き出したいときもあるで
しょう。
このような場合には、以下のコマンドを使用すると便利です。

mysqldump -u root -prootpass --tab=MySQL_dump INTSHOP

ここで、--tabはタブで分離されたデータ・ファイルを作成する
ことを指示するパラメーターで、このパラメーターを指定すると、
xxxx.sqlとxxxx.txtという2つのファイルが作成されます。
このうち、xxxx.sqlファイルにはテーブル作成のためのSQL文が
はいり、xxxx.txtにはタブで分離されたデータがはいります。
そしてxxxxの部分はテーブル名になります。
つまり、テーブルごとに別々のファイルが作成されることになり
ます。

そして、--tab=の右側にはこれらのファイルを書き出すフォルダー名
(ディレクトリー名)を指定します。

最後(一番右端)に指定したINTSHOPは、対象とするデータベース
の名前です。

なお、タブで分離されたデータのファイルは、表計算ソフトなどで
取り込んで使用することができるため大変便利です。
あるいは、逆に表計算ソフトなどで、データベースに追加したい
データを作成しておいて、タブで分離されたデータのファイル形式
に出力しておき、それをMySQLに読み込ませることもできます。

このタブで分離されたデータのファイルをMySQLに読み込ませる
ためには以下のコマンドを使用します。

mysqlimport -u root -prootpass INTSHOP MySQL_dump/customer.txt

ここで、INTSHOPは対象のデータベース名で、MySQL_dump/customer.txt
は、読み込ませるファイル(タブで分離されたデータのファイル)を
表します。mysqldumpでファイルを書き出したときと同じく、customer.txt
というファイル名はCUSTOMERテーブルのデータをタブで分離されたデータ
形式のファイルにしたものであることを意味します。
└───────────────────────────┘


さて、これまでに作成してきたINTSHOPのWebアプリケーションでは、
絶対的なURL(たとえば

http://localhost:8080/JStudy2/itemSelect.html

を直接記述しているファイルがいくつかありました。
たとえば、invalidorder.htmlなどがそうですね。
(これを探すためには、Eclipseのメニュー・バーで「検索」→「ファイル」を
選択し、「含まれるテキスト」に
http://localhost:8080/
を入力し、「ファイル名のパターン」で
*.html, *.jsp
を指定し、「検索」ボタンをクリックします。
下の「検索」タブ下に見つかったファイルがリストされますので、
どれかをダブル・クリックすると、そのファイルが開かれ、見つかった場所が
示されます。)

これらの絶対的なURLは、サーバーが別のPCになってしまうと、正しく参照できなく
なりますね。
LANでつながっている別のPCにデプロイした人は、以下のように操作して
試してみてください。(これはvol.096で行った操作と同じです。)

Webブラウザーを起動して、下記のURLを入力してください。
(Webブラウザーを起動しているPCではTomcatは起動させないで
ください。また、デプロイ先のPCではTomcatを起動しておきます。
以下では例として、デプロイ先のPCのIPアドレスを192.168.0.6と
していますが、これを正しいIPアドレスに読み替えてください。)
http://192.168.0.6:8080/JStudy2/itemSelect.html

(1) 「キーワード」欄、「カテゴリー」欄ともに何も入力せずに
「送信」ボタンをクリックしてみてください。

(2) 次のページ(商品リストのページ)で商品をどれか(たとえば「製品001」)
選択(チェック・マークを入れる)し、「選択した商品をカートに入れる」
ボタンをクリックします。

(3) 選択した商品が次のページ(ショッピング・カートのページ)で
リストされていることを確認し、「選択した商品を購入する」ボタンを
クリックします。

(4) 次のページ(購入手続きのページ)で、ユーザーIDには
J0001
などCUSTOMERテーブル上に存在する顧客番号を入力し、パスワードには
tekitou
など適当な値を入力して(あるいは入力しなくてもよい)
「最終購入確認画面に進む」ボタンをクリックします。

(5) 次のページで「購入(注文確定)する」ボタンをクリックします。

(6) 次のページで「商品の検索ページに戻るには、ここをクリック」をクリック
して、商品の検索ページへ進みます。

(7) 「キーワード」欄、「カテゴリー」欄ともに何も入力せずに
「送信」ボタンをクリックしてみてください。

(8) 次のページ(商品リストのページ)では商品をどれも選択せずに
「選択した商品をカートに入れる」ボタンをクリックします。

(9) 次のページ(ショッピング・カートの中のリスト)に商品が何もリスト
されていないことを確認し、Webブラウザーの「戻る」ボタンを何回か(5回くらい)
クリックして、ユーザーIDとパスワードを入力するページまで戻ってください。

(10) ユーザーIDには
J0001
などCUSTOMERテーブル上に存在する顧客番号を入力し(前に入力したものが
残っているはずなので、そのまま使えるはず)、パスワードには
tekitou
など適当な値を入力して(あるいは入力しなくてもよい)
「最終購入確認画面に進む」ボタンをクリックします。

(11) すると、「購入手続き不可」のページが表示され、
--------------------------------------------------------
ショッピング・カートの中に商品が入っていないなどの理由により、購入手続きを進めることができません。
まことに申し訳ありませんが、商品の検索から再度やり直してください。 
--------------------------------------------------------
というメッセージが表示されますね。

これはinvalidorder.htmlのWebページですね。


(12) そこで、「商品の検索に戻るには、ここをクリック」をクリックすると、
http://localhost:8080/JStudy2/itemSelect.html
のURLが使用されるため、(自分のPCではTomcatが起動されていないので)
エラーになりますね(「ページを表示できません。」というようなメッセージ
が表示されると思います)。


これでは困りますね。というわけで、これらのURLはvol.088のように
http://IPアドレス:8080/JStudy2/の部分を指定しないURL(相対的なURL
に直しておくべきです。

具体的には、invalidorder.htmlの中の

<A href="http://localhost:8080/JStudy2/itemSelect.html">
の行を
<A href="../itemSelect.html">
に書き換えてやれば対処できます。

しかし、いつもこのように簡単に書き換えられるわけではなく、vol.100のように
(HTMLファイルはJSPファイルに変えておいてから)プログラミングで対処しなけ
ればならない場合もあります。
(残りの対処は演習として、自分でやってみてください。)


では、デプロイのお話はここまでにして(Linuxへのデプロイは
別の機会にお話することにして)、Strutsのお話にはいる
ことにしましょう。


(続く)


では、今日はここまでにします。

何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2008 Future Lifestyle Inc. 不許無断複製