02.サンプルのインストール方法と注意点

概要

サンプルのインストール方法を説明します。
サンプルは、maven未使用の版と、maven使用の版と2つがあります(maven版は2017.01.01に作成)。
 
 
【サンプルの動作環境(動作確認したバージョン)】
  Java: 8
  Tomcat: 7.0.25
  Spring: 5.0.8、4.3.2
  ログ: Logback 1.1.2 + slf 1.6.4
  ORマッピング: MyBatis3
  DB: Postgres
  OS: Windows ※説明はLinux系で動かすことを想定しています。ただOSの用意が面倒なのでWindowsとしています。
 
 
 
【注意点】
他の記事でも書きましたが、今回は初級者向けということでmavenを使用しない方針にしました。
ただそのために、ログの設定ファイルと、WEB起動時に読み込む設定ファイルの設計は少しやりづらくなってしまいました。
他についてはそれほどやりづらくはないですが、もしサンプルの内容が理解できましたら、maven2などで環境を
作り直してみるのも良いかと思います。

(追記:2017.01.01)maven版(spring4)も作成しアップしました。
(追記:2018.08.08)maven版(spring5)も作成しアップしました。
 
 
 
 
 

サンプルのダウンロード

  以下にサンプルがありますので、ダウンロードしてください。
  
 
        ※一番下あります。コメントも確認してみてください。
 
  

tomcatのインストール 

  tomcatをインストールされていない方は、ダウンロードしてインストールしてください。
  バージョンはtomcat7の最新版で良いと思います。(tomcat8以上でも大丈夫かも知れませんが試していません)
 
 
  インストール場所はどこでも大丈夫です。

  【補足: tomcatホームとcatalina.base】
   本サンプルではtomcatホームとcatalina.baseは同じディレクトリとしました。
   この2つについて、それぞれ簡単に触れます。
    tomcat.home ⇒ tomcatの実体(実行ファイルとライブラリ)が置かれたディレクトリ
    catalina.base ⇒ 設定ファイルなどが置かれたディレクトリ
   実はtomcatの実行ファイル(ライブラリ含む)と、tomcatの設定ファイルを別々の場所に置けます。
   これで何が嬉しいかというと、tomcatのバージョンが同じでポート番号の違うWEBをいくつも立ち上げたい場合です。
   実行ファイルと設定ファイルをポート番号ごとにコピーして用意しても良いのですが、HDD容量を使ってしまいます。
   そこで、実行ファイルは1つで、設定ファイルだけポート番号ごとに用意する、といったことができます。

   ちなみに、tomcat7からsetenv.shという機構ができましたので、かなり設定しやすくなっています。


DBのインストール 

  postgresをインストールされていない方は、ダウンロードしてインストールしてください。
 
 

環境設定

  いくつか環境変数などの設定が必要です。
  以下の通りお願いします。
 

 環境変数の追加

     以下の環境変数を設定してください。
     ※実際のところ、maven2を使用するとこの設定をしなくてもうまく動かせそうです。
      JUnit起動時の設定ファイルのディレクトリを設定します。
 
      ●変数名: APP_SAMPLE_CONF_DIR
      ●値   : tomcatのホームディレクトリ/app-info/sample
 
 

 設定フォルダの作成

   お客様が設定を自由に変更できるように、設定用のフォルダを作ります。
   添付ファイル内にある、「app-info」フォルダをtomcatのホームディレクトリ配下にコピーします。
 
    コピー先: tomcatホームディレクトリ/
 
    【補足】
     DBの接続先などの情報は環境によって異なります。
     また、環境は、ベンダ側の開発環境、お客様の検証環境、お客様の商用環境、など様々あります。
     もし、WARファイルの中にDBの接続先を記述してしまうと、これらの環境ごとにWARを作り直さないといけません。
     そこで、WARの外部に設定ファイルを置くようにします。
 

 JDBCドライバーのインストール

   添付ファイル内にある、「jdbc/postgresql-9.1-903.jdbc4.jar」を以下の場所にコピーします。
   (インストールしたPostgresにあるドライバーでも同じです)
 
    コピー先: tomcatホームディレクトリ/lib
 
    【補足1: 重要)メモリリークを防ぐ
     tomcat7からは、DataSource(DBと接続するためのオブジェクト)は、tomcatで管理(クラスロード)するようになりました。
     生成も破棄もtomcatが行おうとします。
     もし、WARの方にDBのドライバを置いてしてしまうと、うまくクラスが解放できなくなり、
     WARの再配備をしたときにDataSourceなどがメモリに残ってしまいます。
     それが、メモリリークになり、何度もWARの再配備をすることでOutOfMemoryしてしまうことがあるようです。
       参考: tomcat7でメモリリーク。PermGenを食いつぶす
 

    【補足2: 複数のバージョンのドライバーを1つのtomcatで扱えない】
     上記の補足で記述したtomcat7以降の特徴により、もう1つ制限ができます。
     それは、「1つのtomcatには1つのバージョンのドライバーしか使えない」ということです。
     この制限は、たいていのDBのドライバーはバージョンが変わってもパッケージ名が同じ、ということに起因しています。
     上記の補足のとおり、DBのドライバーはtomcatがロードします。
     tomcatがロードするために、tomcat上に複数のアプリが存在しても、すべてのアプリで共有することになります。
     ですので、アプリ1でoracle9iのドライバーをロードした場合、アプリ2でもOracleを使いたい場合は
     oracle9iのドライバを使わざるを得なくなります。(パッケージ名まで含めたドライバクラス名が同じなので)
     もちろん、別の種類のDB、例えばpostgres7とoracle9i、それぞれのドライバーを使用することは可能です。
     oracle11g用とoracle9i用の両方のドライバーを使用することができないのです。
     (このあたりはクラスローダーの親子関係について知っていると理解しやすいです)



 DB作成

    以下のSQLを実行して、DBとテーブルを作成します。
    注意点としては、簡便のため管理ユーザ(POSTGRES)を所有者(OWNER)にしていますが、
    実践では別のユーザを作成して所有者にすべきです。 
 
    【DBテーブル等の作成】
CREATE DATABASE test
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'Japanese, Japan'
       LC_CTYPE = 'Japanese, Japan'
       CONNECTION LIMIT = -1;

CREATE TABLE t_member
(
  id integer NOT NULL,
  name character varying(20) NOT NULL,
  age integer NOT NULL,
  up_date timestamp with time zone NOT NULL,
  role character varying(20) NOT NULL,
  login_id character varying(20) NOT NULL,
  login_pw character varying(20) NOT NULL,
  version integer NOT NULL DEFAULT 0,
  CONSTRAINT t_member_pkey PRIMARY KEY (id ),
  CONSTRAINT t_member_login_id_key UNIQUE (login_id )
)
WITH (
  OIDS=FALSE
);

CREATE SEQUENCE seq_member_id
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
 
 
    【DB接続の設定】
    上記でコピーした設定ファイルを変更してDB接続用のID・PWを設定します。

     設定ファイル: tomcatホームディレクトリ/app-info/sample/web.properties
 

 eclipseへのインポート

   いよいよメインです。 
   まず、eclipseを立ち上げて、ワークスペースを新たに指定して起動しなおします。

   起動したら、以下のようにソースをインポートします。

   ・ インポートする
     ファイルメニュー ⇒ インポート を指定します。
     開いたウィンドウで Maven⇒Existing Maven Projects を選択、
     ダウンロードしたサンプルソース(spring_mvc_sample)を指定します。

     インポート後、プロジェクトを右クリックし、Maven⇒Update Project を選択します。
     プロジェクトに必要なプラグインやJarがダウンロードされます。


 Excelファイルの関連付け

  DbUnitを使用するときにExcelを使用しますので、eclipseのファイルを開くときの関連付けを行います。
  [ウィンドウ]-[設定]を選択
  ポップアップが表示されたら、「*.xls」と外部のプログラムExcelを結び付けてください。



 Exclipseでデバッグ中に余計なエラーが出ないようにする

  以下のリンク先の作業をしておいた方が余計なエラーに煩わされずに作業できると思います。



 Exclipseでデバッグ中に「ソースが見つからない(Source Not Found)」が出ないようにする

  Mavenで上記のエラーが出るときがあるので、あらかじめ以下を実行しておくと出にくくなると思います。
  ・以下のプラグインをインストール
    Help ⇒ Intall New Software... ⇒ 以下のプラグインを指定してインストール
    https://dl.bintray.com/tha/eclipserepo/
  ・Mavenのソースダウンロードを実行
    Eclipse ⇒ Maven ⇒ Download Sources 




以上で終了です。


 
 
 
 
 
 
 

  
 Created Date: 2015/03/24