[Apache Tomcat] Apache OpenWebBeansをつかってCDIを使えるようにした話

# 概要
Apache TomcatでCDIを使用できるようにするのは、pom.xmlを書いたり設定を行ったりしてめんどくさい。そこで今回はApache OpenWebBeansを使用して簡単にCDIを使用できるようにしていこうと思う。


# 前提条件
1. javaコマンドが使用できること
2. Gitが使用できること
3. eclipseが使用できること（できたら）


# 全体構成

```
/作業先/
  ├ Tomcat/
  │  ├ apache-tomcat-9.0.22/
  │  │  ├ bin/
  │  │  │  ├ startup.bat
  │  │  │  └ startup.sh
  │  │  └ conf/
  │  │     ├ Catalina/
  │  │     │  └ localhost
  │  │     │     └ Sample.xml
  │  │     ├ context.xml
  │  │     └ logging.properties
  │  ├ current -> (/作業先/Tomcat/apache-tomcat-9.0.22/)
  │  ├ openwebbeans-distribution-2.0.9
  │  │  ├ install_owb_tomcat7.bat
  │  │  └ install_owb_tomcat7.sh
  │  ├ apache-tomcat-9.0.22
  │  └ openwebbeans-distribution-2.0.9-binary.zip
  └ quita
     └ cdi-sample
        └ WebContent
          └ WEB-INF
            └ beanse.xml
```


# 作業手順
1. 今回作業を行うディレクトリを作成する。(以下、作業先)

2. 作業先にTomcatディレクトリを作成する。

3. Apache TomcatをTomcatディレクトリにダウンロードし、解凍する。

4. バージョン変更時を考えcurrentリンクを作成する。

    ``` sh
    # Windowsの場合
    mklink /j current apache-tomcat-9.0.22

    # linuxの場合
    ln -s apache-tomcat-9.0.22 ./current
    ```

5. 【Windowsの場合実施】コンソールが文字化けしないようにするため、Apache Tomcat内にあるconf/logging.propertiesを変更する

    ``` properties:logging.properties
    # 51行目付近
    # 変更前
    java.util.logging.ConsoleHandler.encoding = UTF-8
    # 変更後
    java.util.logging.ConsoleHandler.encoding = SJIS
    ```

6. Apache OpenWebBeansをTomcatディレクリにダウンロードし、解凍する。

7. Apache OpenWebBeans内にあるinstall_owb_tomcat7を実行する

    ``` sh
    # Windowsの場合
    install_owb_tomcat7.bat ..\current

    # linuxの場合
    install_owb_tomcat7.sh ../current
    ```

8. 【Windowsの場合実施】Apache Tomcat内にあるconf/context.xmlの"<Context>"タグ内にタグを追加し、以下のようにする

    ``` xml:context.xml
    <Context>

        <!-- Default set of monitored resources. If one of these changes, the    -->
        <!-- web application will be reloaded.                                   -->
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
        <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
        <!-- ↓追加したタグ -->
        <Listener className="org.apache.webbeans.web.tomcat7.ContextLifecycleListener"/>
        <!-- Uncomment this to disable session persistence across Tomcat restarts -->
        <!--
        <Manager pathname="" />
        -->
    </Context>
    ```

9. 作業先に以下のGitをクローンする
    - https://gitlab.com/P488/qiita.git

10. 以下の内容のxmlをApache Tomcat内にあるconf/Catalina/localhostに作成する。

    ``` xml:Sample.xml
    <Context path="/Sample" reloadable="true" docBase="/作業先/quita/cdi-sample/WebContent">
    </Context>
    ```

11. Apache Tomcatのbin内にあるstartupを実行する

    ``` sh
    # Windowsの場合
    startup.bat

    # linuxの場合
    startup.sh
    ```

12. localhost:8080/Sample/SampleServlet にアクセスし、「Served at: 」と出力されることを確認する。


# 感想・まとめ
　今回Apache OpenWebBeansを使用してApache TomcatでCDIを使用できるようにしてきた。Windowsの場合手作業が入るため少しめんどくさいがbat/shを実行すれば簡単にCDIを使用できるようになるのかなと思った。今回使用したソースはeclipseで作成してあるので、できる方はいろいろいじくってみるのもよいかもしれない。（eclipseで使用する場合は、ウィンドウ -> 設定 -> サーバー -> ランタイム環境 -> Tomcat9(Java11) -> 編集からTomcatインストールディレクトリを/作業先/Tomcat/currentに変更する）

間違い・問題等あったらコメントしてください。