[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)

こんにちは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
====
[前回](http://qiita.com/dz_/items/3e85dd369c8053ceffe8 "Check! はじめての Zabbix インストール on Debian x Amazon RDS") の過程で Zabbix で jmx監視を試したかったので、[Tomcat](http://tomcat.apache.org/ "Apache Tomcat - Welcome!") の環境を作っています。その際につまづいたことについてのメモです。

動作環境
====

Webサーバー
---
- CentOS 6.6
- Apache Tomcat6 (6.0.24)
- Java 1.5.0 or 1.8.0

tomcat の最新バージョンは 8 ですが、諸事情により tomcat6 で環境作っています。

開発環境
----
- Windows Server 2012 R2
- Apache Tomcat6 (6.0.43)
- Java 1.8.0
- Netbeans 8.0.2

つまづいたところ (開発環境編)
====

Netbeans で Tomcat を扱いたい場合の対処
----

### 現象・原因
最近の <a href="https://netbeans.org/" title="Welcome to NetBeans" target="_blank">NetBeans</a> では、Tomcat のアプリケーションを作成するには、プラグインでインストールすることになっていました。また、Netbeans は、Windows 版も Mac 版も提供されており、どちらもこのプラグインが必要でした。

尚、Tomcat は別途インストール済みです。

### 対処
Tomcat アプリケーションを含む、 **Java EE Base** プラグインをインストールします。

Tools > Plugins を選択します。
![20150513_netbeans_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/a5c7195d-27f6-6fc8-3714-3786a088308f.png)

tomcat か Java EE Base を検索し、インストールします。
![20150513_netbeans_002.png](https://qiita-image-store.s3.amazonaws.com/0/3812/bf0b6fda-0c36-2984-bf21-e1b059df248e.png)

依存でインストールされるプラグインを確認し、次へ進みます。
![20150513_netbeans_003.png](https://qiita-image-store.s3.amazonaws.com/0/3812/8a9c8e16-7ee0-c500-f5de-ff3a4b2f7649.png)

Netbeans IDE をすぐに再起動するかどうかを選択し、完了します。
![20150513_netbeans_004.png](https://qiita-image-store.s3.amazonaws.com/0/3812/2f5dd26a-612f-8574-4256-3f2403a2af69.png)

これで、プロジェクト作成時に *Web Application* が選択できるようになります。
![20150513_netbeans-tomcat_005.png](https://qiita-image-store.s3.amazonaws.com/0/3812/36303123-d2a0-2de8-db5c-cf39f4775397.png)


つまづいたところ (Webサーバー編)
====

warのデプロイはできたのに動作しない場合の対処
----

### 現象

<a href="https://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html" title="Apache Tomcat 6.0 (6.0.44) - Manager App HOW-TO" target="_blank">Tomcat Manager</a> を利用して、 war をデプロイしました。ところが、デプロイ時はエラーが出ないのですが、Applications 一覧に表示されないし、URL直接指定してもエラーが発生します。

そこで、ログファイルを確認すると以下のようなエラーが出ていました。

```:/var/log/tomcat6/catalina.out
...
SEVERE: Error deploying web application archive WebApplication1.war
java.lang.NullPointerException
   at sun.reflect.annotation.AnnotationInvocationHandler.create(libgcj.so.10)
...
```

### 原因
開発環境と、Webサーバーの Java のバージョンが違いました。
Tomcat Manager を使っていれば、管理画面の下に環境が表示されます。（ぼーっと両方の管理画面眺めていたら気付きましたw）

URL: *http://<tomcat-server>:8080/manager/html*
![20150513_tomcat_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/373f8e38-bb5e-db24-d16e-48cc0ab0ae69.png)

### 対処
`alternatives` というコマンドを使って java のバージョンを選択できるので、これで対応しました。

```bash
# alternatives で 利用する Java のバージョンを確認、選択
alternatives --config java
```

以下のように表示され、 `+` が付いてる方が現在使われているバージョンです。そのままでよければ何も入力せず `Enter` 、変更したければその番号を入力します。

```bash
There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.45-28.b13.el6_6.x86_64/jre/bin/java
*  2           /usr/lib/jvm/jre-1.5.0-gcj/bin/java

Enter to keep the current selection[+], or type selection number: 
```

`service tomcat6 restart` で再起動すると管理画面にデプロイしたアプリケーションが表示され、アプリケーションの動作も確認できました。

ちなみに、Tomcat で利用するJavaのバージョンを指定するのは、後述する設定ファイルでも設定できるようです。（ `JAVA_HOME` を指定？）


javaの起動パラメータを指定したい場合の対処
----

### 現象
いろいろ調べたことを参考に、 `$CATALINA_HOME/bin/setenv.sh` を作成しましたが。反映されません。

### 原因
どうやら、今回の環境では `/etc/tomcat6/tomcat6.conf` が設定ファイルでした。

### 対処
`tomcat6.conf` に記載し、 `service tomcat6 restart` で反映されることが確認できました。

ちなみに、私の場合は jmxremote の設定をしたかったので、以下を追記しました。

```:/etc/tomcat6/tomcat6.conf
# 以下を追記
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
```

Epilogue - おわりに
====
日進月歩ですが、実験環境ができつつあります。次は Zabbix の jmx監視についてメモをまとめるつもりです。いつになるやら？がんばります！

近況
====

最近
----
- [Check! はじめての Zabbix インストール on Debian x Amazon RDS](http://qiita.com/dz_/items/3e85dd369c8053ceffe8 "Check! はじめての Zabbix インストール on Debian x Amazon RDS")
- [[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)](http://qiita.com/dz_/items/879ca03b5b594007ceab "[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)") ← :new: :sparkles:

Phalcon関連
----

- [爆速フレームワーク!! Phalcon PHP Framework](
http://qiita.com/dz_/items/55ae18f7fe3a873bace1 "爆速フレームワーク!! Phalcon PHP Framework")
- [Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会](http://qiita.com/dz_/items/974a90b32ba6a6e38182 "Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会")
- [Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！](http://qiita.com/dz_/items/e70d61487224b854b971 "Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！")

fluentd関連
----
- [Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)](http://qiita.com/dz_/items/960319ffffa0d7355f8c "Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)")
- [Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに](http://qiita.com/dz_/items/224607c84112ccafa2d6 "Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに")

Amazon ECS関連
----

- [Check! Amazon EC2 Container Service で Docker を学びたい！(準備編)][my-amazon-ecs-docker-vol1]
- [Check! Amazon EC2 Container Service で Docker を学びたい！ (IAMポリシー編)][my-amazon-ecs-docker-vol2]

[my-amazon-ecs-docker-vol1]:http://qiita.com/dz_/items/625f55bc5de371d15caa "Check! Amazon EC2 Container Service で Docker を学びたい！(準備編)"
[my-amazon-ecs-docker-vol2]:http://qiita.com/dz_/items/44388a0908f8d18fe42d "Check! Amazon EC2 Container Service で Docker を学びたい！(IAMポリシー編)"

技術ブログ寄稿
----

[cloudpack技術ブログ][cloudpack-blog]でも、AWS Lambda や 運用ツール Serf に関して記事を書いています。ご興味あれば読んでいただけると嬉しいです！

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank" rel="nofollow">大平 かづみ の記事一覧</a>


[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"