カテゴリー別アーカイブ: メモ書き

Eclipseから起動するTomcatにユーザライブラリを配置する

Eclipseを使ってTomcatを対象とした動的Webページを開発している場合、Eclipse上でプロジェクトを右クリックした後に[Run AS(実行)]→[Run on Server(サーバで実行)]をクリックすると自動的にTomcatを起動してくれます。そのとき、プロジェクトのビルド対象となっているJavaのプログラムをコンパイルし、それをWEB-INF/classes以下にdeployしてくれるのですが、そのままではビルドパスで設定されているJarファイルをdeployしてくれません。

Tomcatなどで動作する動的Webページの場合、ユーザが独自に追加するJarファイルはWEB-INF/lib以下に配置します。しかし、Eclipseプロジェクトのビルドパスにはservlet-api.jarなどのサーブレットコンテナ側のライブラリも含まれているため、これらすべてをWEB-INF/libに配置するわけにはいきません。ですので、ユーザで追加したライブラリファイルのdeployについては別個に設定する必要があります。

さて、プロジェクトを右クリックして[Properties(プロパティ)]をクリックすると、プロジェクトの設定画面を開きます。この画面の中に[Deployment Assembly]という項目がありまして、この項目が[Run on Server(サーバで実行)]をクリックした時のdeploy設定となります。というわけで、この項目で表示されている一覧にdeployしたいユーザライブラリを追加すると、EclipseからTomcatを起動したときにWEB-INF/lib以下に指定したライブラリを自動で配置してくれます。

2015-03-20-1

上の例ではGsonというJsonを解析するためのライブラリをdeploy対象のライブラリとして追加しています。これで、開発用Tomcatの実行環境やプロジェクトのWebContent以下にユーザライブラリを手動で追加しなくてもよくなりますね。

svnのリポジトリを復旧する

私のsubversionリポジトリは、一定時間おきにsvnsyncでミラーリングかけることでバックアップしているのだけれども、このバックアップのスクリプトがエラーを出すようになってしまいました。バックアップ側にはこれといって問題はなさそうだったので、リポジトリの方を確認。

% svnadmin verify [path to repository]
* Verified version 1.
* Verified version 2.
....
* Verified version 2000.
svnadmin: Checksum mismatch:
expected: [xxxxx]
actual: [XXXXX] ← expectedと違う

どうも、データファイルが壊れているようなメッセージなので、リポジトリを復旧することにしました。壊れた部分のデータはバックアップ側にもなかったので諦めることに。。。

まずは、壊れていない部分をdumpします。

% svnadmin dump [path to repository] > svn.dump
* Dumped revision 1.
* Dumped revision 2.
...

壊れているバージョンがあれば、そこから先をdumpできない。例えば、ver.2001が壊れていたとすると、ver.2000までしかdumpされません。そこで、壊れているバージョンをskipして、その先の壊れていない部分のdumpデータを先に作っていたdumpファイルに追加します。例えば、ver.2001が壊れている場合、ver.2001をskipし、ver.2002からdumpしてファイルに追加します。

% svnadmin dump --incremental -r2002:HEAD [path to repository] >> svn.dump
* Dumped revision 2002.
* Dumped revision 2003.
...

あとは、作成したdumpデータを新しいリポジトリに登録すれば復旧完了です。

% svnadmin create [path to new repository]
% svnadmin load [path to new repository] < svn.dump

これで、壊れていない部分のデータについて復旧できます。ただし、壊れた部分のversion番号は詰められるので、壊れたデータの数だけversion番号が小さくなります。そのため、このリポジトリと同期しているファイルがある場合、version番号のずれによる不具合が起こる可能性があるので、新しくcheckoutした方が無難かも。

追記(2015/03/03):
もちろん、壊れた部分のデータも失われているので、何が失われたかを確認する必要がありますね。