■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2009年09月06日

    Java総合講座 - 初心者から達人へのパスポート
                  vol.169

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


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


========================================================
◆ 01.SOAPのアプリケーション(Webサービス)
========================================================


では、今回は(C7)の操作をやってみましょう。

(1) LinuxのPCを起動した後、EclipseのPCも起動しましょう。そしてEclipseを起動しま
すが、このときワークスペースとしてはJavaWorksを指定して下さい。
(パースペクティブはJavaパースペクティブにしておきます。)

(2) パッケージ・エクスプローラーにおいて、プロジェクトJStudySOAPの中にはいっている
MailSender.java(パッケージはjp.co.flsi.lecture.webservice.hotel)を右クリックし、
「チーム」→「ヒストリーの表示」を選択します。

そうすると、「ヒストリー」ビューが開いて、リビジョン番号や改訂時刻、作成者(作成
あるいは修正した人のユーザー名)、コメントなどが表示されます。これが履歴のリスト
です。
現在は、1.4というリビジョンにアスタリスク(*)マークが付いていて、太字になって
いますね。これは現在(現行)のリビジョンが1.4であることを示しています。

┌補足─────────────────────────┐
「改訂」(リビジョン番号)のカラムと「改訂時刻」のカラムの
間には「タグ」というカラムがありますが、このタグというのは、
あるタイミングでファイル一揃いに名前やバージョン番号を付け
るものです。
たとえば、ベータ版として公開して有志にテストしてもらいたい
ときや、正式版としてリリースするときなどにファイル一揃いに
タグと呼ばれる名前(もしくは番号)を付けます。
このようなファイル一揃いにはリビジョン番号が揃っていることは
ほとんどありえないため、リビジョン番号とは別にファイルに
名前(もしくは番号)を付けて識別する必要があるのです。
そのためのタグというものが用意されたのです。
タグはたとえば、パッケージ・エクスプローラーにおいて、
プロジェクト名(たとえばJStudySOAP)を右クリック→「チーム」
→「バージョンとしてタグ付け」を選択するなどの方法で付け
られます。(タグには記号はほとんど使えないので注意して下さ
い。ドット(.)も使えませんので、例えばV3.12というような
バージョン番号は指定できません。代わりにハイフン(-)や
アンダースコア(_)は使用できますので、V3_12のように指定
するといいでしょう。)
現在のところ、タグは付けていませんので、「タグ」のカラムは
空白になっています。
└───────────────────────────┘

なお、「ヒストリー」タブの右側にあるツール・バー(アイコンがたくさん並んでいる所)
のアイコンの上にマウス・ポインターを乗せると機能名が表示されますが、これらの
アイコンのうち、「ローカル改訂」というアイコン(ウインドウのアイコン)をクリック
してへこませた状態にすると、リビジョン番号がついた改訂版は表示されません。
「ローカル改訂」というのは、CVSリポジトリーには反映させずにEclipse側だけで修正した
改訂版を意味するので、リビジョン番号はついていないのです。
一方、「リモート改訂」(円筒形のアイコン)というのはCVSリポジトリーに登録した
(コミットした)改訂版を意味します。したがって、「リモート改訂」(円筒形のアイコン)
や「ローカル改訂およびリモート改訂」(ウインドウと円筒形のアイコン)のアイコンを
クリックしてへこませた状態にすると、リビジョン番号がついた改訂版が表示されます。


それでは、リビジョン1.2の行をクリックしてみて下さい。下のほうにコメントの詳細
が表示されるのが分かりますね。「コメント」のカラムには少しのコメントだけしか表示
できませんから、コメントの詳細を知りたいときは、このようにそのリビジョンの行を
クリックします。

次に、リビジョン1.2の行を右クリックし、「現在を1.2と比較」を選択してみて下さい。
比較エディターが開いて、現在のリビジョン(左側=Eclipse側)とリビジョン1.2(右側
=CVSリポジトリー側)が表示され、どこがどう違うのか簡単に分かるようになりますね。

なお、現行のリビジョンを除く他の2つのリビジョンを比較したい場合は、Ctrlキーを
押しながら2つの行をクリックし(2つの行の色が反転する)、どちらかの行を右クリッ
クして「相互比較」を選択します。

あるいは、右クリック→「注釈の表示」を選択すると、ソース・ファイルのどの行が
どのリビジョンで編集されたものなのか調べることができます(「CVS注釈」ビュー
の中の各行をクリックする)。

あるいは、ソース・ファイルを古いリビジョンのものに戻したいとき(MailSender.java
をリビジョン1.2の内容に戻したいとき)は、パッケージ・エクスプローラーの中の
MailSender.javaを右クリック→「置換」→「ヒストリー」を選択し、1.2の行を右クリッ
ク→「コンテンツの取得」を選択します。(実際にやってみて下さい。)
そうすると、現在のEclipseのMailSender.javaの中身がリビジョン1.2の内容に戻されます。
ただし、Eclipse側のMailSender.javaのリビジョンは1.4のままで、この1.4に修正が加え
られたものとして扱われます。また、CVSリポジトリー側には何も変化はありません。
そこで、この内容をCVSリポジトリーに反映したい場合は、コミット(パッケージ・エクス
プローラーの中のMailSender.javaを右クリック→「チーム」→「コミット」を選択)を
行います。(実際にやってみて下さい。コミットのコメントは、
リビジョン1.2の内容を復活
とでもしておいて下さい。)こうしてコミットを行うとリビジョンは1.5に上がりますね。



┌補足─────────────────────────┐
前回は、(C6)の競合したときの対処について簡単に説明しました
が、これに関して少し補足しておきましょう。

CVS以前からある古いバージョン管理システム(たとえばRCS
(Revision Control System))やパソコン・ソフトの最大手のメー
カーであるM社のバージョン管理システムなどでは、一つのファイ
ルを同時に複数の人が編集することを禁じており、ファイルを
編集するためにはファイルにロックをかけ、ロックをかけた人
だけが編集できるようにしていました。
逆に編集が終わったらロックを解除し、その時点で他の人が編集
する(ロックをかける)ことが可能になります。(それぞれチェッ
クアウト、チェックインと呼ばれる操作で行われる。)
このやり方では、編集内容が競合することがないので安心して編集
できるという利点がありますが、現実的には開発の生産性を上げる
ために同じファイルの中の別々のメソッドをそれぞれ別々の人が
同時に編集するというような場面も多発します。
そのような場面にも対応できるようにするために、CVSでは同じ
ファイルを同時に複数の人が編集することを可能にし、競合がある
場合には通知して、マージするか他の対処法を取るかは開発者に
委ねるというやり方を取るようになったのです。(実際にはそれ
ぞれの開発者は普通、別々のメソッドを編集するだけであり、
同じ行のコードを同時に編集するというようなマージ不可能な
事態はめったに発生しないので、通常はマージ操作をするだけで
済みます。したがって、競合によって手を煩わせることはめった
にありません。)
このほうが、ロックをかけるやり方よりも開発体制が柔軟に取れ、
生産性もいいと考えられます。

しかしながら、CVSでも上記のロックをかける方式に似たやり方
を取ることもできます。
その手順は以下の通りです。(例としてJStudySOAPプロジェクト
のMailSender.javaファイルを使用します。)

(1) Eclipseのパッケージ・エクスプローラーにおいてJStudySOAP
(プロジェクト)を右クリックし、「プロパティー」を選択します。

(2) 「プロパティー」ウインドウにおいて、左側の「CVS」を選択
(クリック)し、右側の「このプロジェクトの監視/編集を可能に
する」という項目の先頭にチェック・マークを入れ、「OK」ボタン
をクリックします。

なお、上の(1),(2)の作業は、開発者全員が各自のEclipseで行う
必要があります。これで準備完了です。

(3) パッケージ・エクスプローラーの中で、編集したいファイル
(MailSender.java)を右クリックし、「チーム」→「編集」を
選択します。
そうすると、パッケージ・エクスプローラーの中のMailSender.java
の左側のアイコンが変わります。これは、このMailSender.javaを
編集中であることを表しますが、これがロックをかけていることに
相当します。
あとは、いつものようにエディターを開いてファイルを編集します。

このとき、他の開発者が同じファイルを編集(「チーム」→「編集」)
しようとすると、他者によって編集中である旨のダイアログ(実際
には「リソースにはすでにエディターがあります。・・・」という
分かりにくいメッセージが書かれたダイアログ・ウインドウだが、
これが他者によって編集中であることを意味している)が表示され
ることになりますので、このダイアログが表示されたら編集しない
ことにしておけば、競合は生じません。
ただし、実際にロックをかけている訳ではありませんので、この
状態でも強引にファイルを編集することは可能です。したがって、
強引にファイルを編集してしまって、複数の開発者が同じファイル
を同時に修正して競合してしまった場合は、あとでマージなどの
処理で対処することになります。

(4) ファイルの編集が終わったら、CVSリポジトリーへコミット(パッ
ケージ・エクスプローラーの中のMailSender.javaを右クリック→
「チーム」→「コミット」を選択)することにより、編集中の状態
が解除されます。(アイコンが元に戻ります。)

あるいは、「チーム」→「未編集」を選択しても編集中の状態が
解除されますが、この場合は編集した内容も解除されてしまい、
元のソース・コードに戻されてしまいます。
└───────────────────────────┘

[書籍紹介]
CVSについてもっと詳しく知りたい人は

「CVS/WinCVSハンドブック」

を読むといいでしょう。



さて、CVSの設定などを行っていたときに頻繁にLinuxのPCの所に行って操作
したり、EclipseのPCの所に行って操作したりと、あっちこっちへ行くのが
面倒だったかもしれません。

実は、通常の開発者は、こんな面倒なことはせずに、Linux側の操作もEclipseのPC
で済ませてしまいます。

そのために使用するのが、TelnetやSSHです。(X(エックス)ウインドウを使うと
いう方法もありますが、通常のサーバー・アプリケーションの開発では特にXウイ
ンドウを使う必要性はない(GUIを使う必要が無い)ので省略します。)


というわけで、これからTelnetのインストール&設定を行っておきましょう。

┌補足─────────────────────────┐
TelnetもSSHもともにクライアント/サーバー型のソフトウエア
であり、通常はネットワークを経由してクライアントとサーバー
の間で通信する形を取ります。
これらを使えば、遠隔地からLinuxやUNIXのコンピューターにログ
インすることができます。
このとき、特にインターネットなどのオープンなネットワークを
経由するときはセキュリティー(security)に注意が必要ですが、
SSHはSecure SHellの略で、安全な(=Secure)ものであるのに
対して、Telnetは安全ではありません。
もしTelnetのクライアントとTelnetのサーバーの間をインター
ネットで経由した場合、インターネット上にデータがそのまま
流されることになりますので、運が悪いときは、途中でハッカー
(クラッカー)が情報を盗み読んで悪用する恐れもあります。
ユーザー名やパスワードもそのまま流れてしまいますので、こ
れを盗み読まれると、ハッカー(クラッカー)がサーバーに容易
に侵入できてしまいます。
したがってTelnetは、外部の人が入れないように隔離された部屋
の中だけに張られたLAN上でのみ使用するか、あるいはインター
ネットに接続されている場合にはファイアー・ウォールで隔離保護
されたLAN上でのみ使用するようにします。
もし、インターネットなどの公的なネットワークを経由して使用
する場合には、Telnetの代わりにSSHを使用するべきです。
SSHの場合は、クライアントとサーバーの間を流れるデータが暗号
化されるため、安全になります。(ただし100%安全と言い切ること
はできないので、基本的にはインターネットなどのオープンなネッ
トワーク経由ではアクセスできないようにすることが望ましい。)

これはCVSの場合でも同じで、インターネット経由で通信する場合
はpserverではなく、SSHを使用すべきです。

しかし、SSHの話は、あとでセキュリティーの話をするときに
まとめてお話することにして、今回はTelnetのインストール&
設定だけを行います。
└───────────────────────────┘


まず最初にLinuxのPCにrootでログインし、次のyumコマンドを実行して下さい。

yum list telnet-server

これによって、(CVSのときと同様にして)インストール済みではなくてインストール可能
(available)であることを確認してください。(もしインストール済みであれば
インストールする必要はありません。)

telnet-server.i386というのがavailableなはずです。

では、このtelnet-server.i386をインストールしましょう。

yum -y install telnet-server.i386

しばらく待つとインストールが完了(Completed!)します。


続いて、/etc/servicesファイルにtelnetのポート番号が登録されていることを確認します。
grep "telnet" /etc/services
(出力されたリストの中に下記のような2行がリストされていればOKです。)
telnet      23/tcp
telnet      23/udp

上を見るとわかるようにtelnetのポート番号は23です。ファイア・ウォールを使って
いる場合は、このポートを空けておくようにファイア・ウォールの設定を変更しておく
必要があります。


次にxinetdの設定を行います。/etc/xinetd.d/telnetを編集しましょう。
vi /etc/xinetd.d/telnet
(このファイルの内容を次のように書き換えます。なお#で始まる行はコメント行です
ので無視してください。)
service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no
}
(書き換えが必要なのはdisableの行だけのはずです。)
(このファイルを保存して閉じます。)


続いて、クライアントのアクセス許可設定を行います。
vi /etc/hosts.allow
(このファイルに次のような行を追加します。)
in.telnetd : 192.168.0.1 192.168.0.2 127.0.0.1
(ここで192.168.0.1と192.168.0.2はクライアントのIPアドレスです。ご自分が使って
いるEclipseのPCの正しいIPアドレスに置き換えて下さい。なお、たとえば192.168.0.
のようにすると192.168.0.で始まるすべてのIPアドレスが対象になります。また、
127.0.0.1はそのLinuxのPC自体を表すアドレス(ループバック・アドレスと呼ぶ)で
テスト用に指定します。)
(このファイルを保存して閉じます。)

さらに、他のすべてのクライアントのアクセス拒否設定を行います。
vi /etc/hosts.deny
(このファイルに次のような行を追加します。)
in.telnetd : ALL
(このファイルを保存して閉じます。)

xinetdを再起動します。
service xinetd restart


ここで、一般ユーザー(ここではuser01という名前にする)を用意しておきましょう。

useradd user01

user01のパスワードを設定します。

passwd user01
(パスワードを2回聞いてきますので、入力します。当メールマガジンでは87654321
というパスワードにしておきます。)

これからTelnetを使うときは、このユーザーにログインすることにしましょう。


では、telnetの動作確認をしましょう。

telnet 127.0.0.1

とコマンド入力します。

login:

と表示されたらユーザー名(user01)を入力し、

Password:

と表示されたらパスワード(87654321)を入力しましょう。これで動作確認はOKです。

exit

と入力してtelnetから抜け出て下さい。



では、今度はEclipseのPCからtelnetを起動してみましょう。
(WindowsにはTelnetのクライアント機能が含まれているのでこれを使用して動作テスト
してみます。)

コマンド・プロンプトを開いて、次のコマンドを入力します。

telnet 192.168.0.5
(ここで192.168.0.5はTelnetサーバー(LinuxのPC)のIPアドレスです。皆様の環境
での正しいIPアドレスに置き換えて下さい。)

以下、先ほどと同様に

login:

と表示されたらユーザー名(user01)を入力し、

Password:

と表示されたらパスワード(87654321)を入力しましょう。これで動作確認はOKです。

exit

と入力してtelnetから抜け出て下さい。



さて、通常の開発者は上のようなTelnetのクライアント機能ではなく、もっと
使い勝手の良いTelnetクライアント・ソフトを使っています。
よく使われているのが、Tera Termという無料のソフトです。これはVectorなど
で公開されています。下記URLからダウンロードできますので、ダウンロード
およびインストールしておいて下さい。

http://www.vector.co.jp/soft/win95/net/se320973.html

(なお、Tera TermはTelnetだけでなく、SSHの機能も含んでいるので、あとでSSHのお話
をするときにも使用します。)

インストールが終わったら、動作確認しましょう。Tera Termを起動して下さい。
「Tera Term: 新しい接続」というウインドウが開きますので、「ホスト」には
Telnetのサーバー(LinuxのPC)のIPアドレスを入力し、「サービス」はTelnet
を選択して、「OK」ボタンをクリックして下さい。

先ほどと同様にユーザー名(user01)、パスワード(87654321)を入力しましょう。

┌補足─────────────────────────┐
もし、ユーザー名やパスワードを入力し間違えて、入力した文字
を消したいときは、BackspaceキーではなくDeleteキーを押します。
└───────────────────────────┘

次に、スーパーユーザー(root)になってみましょう。

su -

と入力して下さい。パスワードを聞いてきたら、パスワードを入力して下さい。
(user01のときはプロンプトが$だが、rootのときはプロンプトが#になるので、正しく
rootになっていることが確認できますね。)

もし、文字化けが発生しているときは、メニュー・バーの「設定」→「端末」を選択し、
「Tera Term: 端末の設定」ウインドウにおいて、「漢字-受信」や「漢字-送信」の
項目を正しい文字コードに変更して下さい。(CentOSのデフォルトではUTF-8になって
いるはずです。気になる人は/etc/sysconfig/i18nの中を見て下さい。)
なお、この「Tera Term: 端末の設定」ウインドウでは画面のサイズ(端末サイズ)も
変更できますので、ここで画面の幅や高さも少し広げておくといいでしょう。自分で
使いやすいサイズに変更してみて下さい。
特に、あとでログの中などを見るときに、幅ができるだけ広いほうが見やすいことに
気づくと思います。

では、

exit

と入力してrootから抜けたあと、再度

exit

入力してTelnetから抜け出ましょう。


これで、Telnetを使える体制ができましたので、今後はこのTera Termを活用して、
Linux側の操作も基本的にはEclipseのPC(WindowsのPC)で済ませることにしましょう。


(次回に続く)


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



[Windowsは米国Microsoft Corporationの、米国およびその他の国における登録商標です。]

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      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) 2009 Future Lifestyle Inc. 不許無断複製