Java11でTomcat9を動かす

2019年5月17日(金)

環境

Oracle OpenJDK 11.0.2 (2019/01/15)をダウンロードする

JDK Builds from Oracle
http://jdk.java.net/
  Ready for use: JDK XX
    Archive (左メニュー)
      Archived OpenJDK General-Availability Releases
        Releases
          11.0.2
            Windows 64-bit zip (sha256) 179MB (openjdk-11.0.2_windows-x64_bin.zip)
        

Oracle OpenJDK 11.0.2 (2019/01/15)をインストールする

zipファイルを展開して好きな場所に置く。このドキュメントでは以下の場所とする。

D:\opt\oracle-openjdk-11.0.2
        

Apache Tomcat 9.0.20 (2019/05/13)をダウンロードする

Apache Tomcat
https://tomcat.apache.org/
  Download
    Tomcat 9
      Tomcat 9 Software Downloads
      https://tomcat.apache.org/download-90.cgi
        9.0.20
          README
            https://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/README.html
          Binary Distributions
            Core
              zip (apache-tomcat-9.0.20.zip)
        

Apache Tomcat 9.0.20 (2019/05/13)をインストールする

zipファイルを展開して好きな場所に置く。このドキュメントでは以下の場所とする。

D:\opt\apache-tomcat-9.0.20
        

Apache Tomcat 9.0.20 (2019/05/13)の仕様

関連情報

Tomcatの設定

Tomcat Setup
https://tomcat.apache.org/tomcat-9.0-doc/setup.html
  Introduction
    RUNNING.txt
    https://tomcat.apache.org/tomcat-9.0-doc/RUNNING.txt
        

"setenv" script

ファイルを作成してJDKのパスを記述する。

D:\opt\apache-tomcat-9.0.20\bin\setenv.bat

set "JAVA_HOME=D:\opt\oracle-openjdk-11.0.2"
exit /b 0
        

リモートデバッグ

引数 "jpda" を追加してTomcatを起動する。

D:\opt\apache-tomcat-9.0.20\bin\startup.bat

rem call "%EXECUTABLE%" start %CMD_LINE_ARGS%
call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
        

catalina.batに説明が書いてある。

D:\opt\apache-tomcat-9.0.20\bin\catalina.bat

echo Usage:  catalina ( commands ... )
echo commands:
echo   debug             Start Catalina in a debugger
echo   debug -security   Debug Catalina with a security manager
echo   jpda start        Start Catalina under JPDA debugger
echo   run               Start Catalina in the current window
echo   run -security     Start in the current window with security manager
echo   start             Start Catalina in a separate window
echo   start -security   Start in a separate window with security manager
echo   stop              Stop Catalina
echo   configtest        Run a basic syntax check on server.xml
echo   version           What version of tomcat are you running?
        

参考

ポート番号

デフォルトの8080が使用されている場合は起動ログにエラーが表示されるので他のポートに変更する。

18-May-2019 02:31:06.985 重大 [main] org.apache.catalina.util.LifecycleBase.handleSubClassException コンポーネント[Connector[HTTP/1.1-8080]] の初期化に失敗しました。
org.apache.catalina.LifecycleException: プロトコルハンドラの初期化に失敗しました
  at org.apache.catalina.connector.Connector.initInternal(Connector.java:983)
  at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
  at org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)
  at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
  at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1059)
  at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
  at org.apache.catalina.startup.Catalina.load(Catalina.java:584)
  at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:304)
  at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: java.net.BindException: Address already in use: bind
  at java.base/sun.nio.ch.Net.bind0(Native Method)
  at java.base/sun.nio.ch.Net.bind(Net.java:461)
  at java.base/sun.nio.ch.Net.bind(Net.java:453)
  at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
  at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
  at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:248)
  at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:222)
  at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1119)
  at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1132)
  at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:557)
  at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
  at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
  ... 13 more
        

server.xmlのHTTP Connectorのポートを変更する。

Documentation Index
https://tomcat.apache.org/tomcat-9.0-doc/index.html
  Reference
    Apache Tomcat 9 Configuration Reference
    https://tomcat.apache.org/tomcat-9.0-doc/config/index.html
      Connectors (左メニュー)
        HTTP 1.1
          The HTTP Connector
          https://tomcat.apache.org/tomcat-9.0-doc/config/http.html
        
D:\opt\apache-tomcat-9.0.20\conf\server.xml

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<--
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->
<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
        

動作確認

コマンドプロンプトのログは文字化けしているがログファイルでは読める。

Tomcatを起動する。

D:\opt\apache-tomcat-9.0.20\bin\startup.bat

D:\opt\apache-tomcat-9.0.20\logs\catalina.YYYY-MM-DD.log

18-May-2019 16:10:11.882 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Serverのバージョン名:Apache Tomcat/9.0.20
18-May-2019 16:10:11.887 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server ビルド:          May 3 2019 22:26:00 UTC
18-May-2019 16:10:11.888 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log サーバーのバージョン番号:9.0.20.0
18-May-2019 16:10:11.889 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS 名:               Windows 7
18-May-2019 16:10:11.890 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS バージョン:            6.1
18-May-2019 16:10:11.890 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log アーキテクチャ:          amd64
18-May-2019 16:10:11.891 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             D:\opt\oracle-openjdk-11.0.2
18-May-2019 16:10:11.892 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM バージョン:           11.0.2+9
18-May-2019 16:10:11.893 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM ベンダ:            Oracle Corporation
18-May-2019 16:10:11.893 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         D:\opt\apache-tomcat-9.0.20
18-May-2019 16:10:11.894 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         D:\opt\apache-tomcat-9.0.20
18-May-2019 16:10:11.899 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:--add-opens=java.base/java.lang=ALL-UNNAMED
18-May-2019 16:10:11.900 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:--add-opens=java.base/java.io=ALL-UNNAMED
18-May-2019 16:10:11.901 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
18-May-2019 16:10:11.901 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Djava.util.logging.config.file=D:\opt\apache-tomcat-9.0.20\conf\logging.properties
18-May-2019 16:10:11.902 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
18-May-2019 16:10:11.903 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Djdk.tls.ephemeralDHKeySize=2048
18-May-2019 16:10:11.904 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
18-May-2019 16:10:11.904 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=y,suspend=n
18-May-2019 16:10:11.905 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Dignore.endorsed.dirs=
18-May-2019 16:10:11.906 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Dcatalina.base=D:\opt\apache-tomcat-9.0.20
18-May-2019 16:10:11.906 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Dcatalina.home=D:\opt\apache-tomcat-9.0.20
18-May-2019 16:10:11.907 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Djava.io.tmpdir=D:\opt\apache-tomcat-9.0.20\temp
18-May-2019 16:10:11.908 情報 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 商用環境に最適な性能を発揮する APR ベースの Tomcat ネイティブライブラリが java.library.path [] に存在しません。
18-May-2019 16:10:12.136 情報 [main] org.apache.coyote.AbstractProtocol.init プロトコルハンドラ ["http-nio-8081"] を初期化します。
18-May-2019 16:10:12.234 情報 [main] org.apache.coyote.AbstractProtocol.init プロトコルハンドラ ["ajp-nio-8009"] を初期化します。
18-May-2019 16:10:12.240 情報 [main] org.apache.catalina.startup.Catalina.load サーバーの初期化 [558]ms
18-May-2019 16:10:12.284 情報 [main] org.apache.catalina.core.StandardService.startInternal サービス [Catalina] を起動します
18-May-2019 16:10:12.286 情報 [main] org.apache.catalina.core.StandardEngine.startInternal サーブレットエンジンの起動:[Apache Tomcat/9.0.20]
18-May-2019 16:10:12.294 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\docs] を配備します
18-May-2019 16:10:12.606 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\docs] の Web アプリケーションの配置は [312] ms で完了しました。
18-May-2019 16:10:12.607 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\examples] を配備します
18-May-2019 16:10:12.823 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\examples] の Web アプリケーションの配置は [216] ms で完了しました。
18-May-2019 16:10:12.825 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\host-manager] を配備します
18-May-2019 16:10:12.852 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\host-manager] の Web アプリケーションの配置は [28] ms で完了しました。
18-May-2019 16:10:12.853 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\manager] を配備します
18-May-2019 16:10:12.874 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\manager] の Web アプリケーションの配置は [21] ms で完了しました。
18-May-2019 16:10:12.875 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\ROOT] を配備します
18-May-2019 16:10:12.891 情報 [main] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [D:\opt\apache-tomcat-9.0.20\webapps\ROOT] の Web アプリケーションの配置は [16] ms で完了しました。
18-May-2019 16:10:12.896 情報 [main] org.apache.coyote.AbstractProtocol.start プロトコルハンドラー ["http-nio-8081"] を開始しました。
18-May-2019 16:10:12.906 情報 [main] org.apache.coyote.AbstractProtocol.start プロトコルハンドラー ["ajp-nio-8009"] を開始しました。
18-May-2019 16:10:12.909 情報 [main] org.apache.catalina.startup.Catalina.start サーバーの起動 [668]ms
        

リモートデバッグを有効にしている場合はコマンドプロンプトに以下のログが出力されている。

Listening for transport dt_socket at address: 8000
        

Tomcatを終了する。

D:\opt\apache-tomcat-9.0.20\bin\shutdown.bat

18-May-2019 16:17:16.812 情報 [main] org.apache.catalina.core.StandardServer.await 有効なシャットダウンコマンドがシャットダウンポート経由で受信されました。 サーバーインスタンスを停止します。
18-May-2019 16:17:16.834 情報 [main] org.apache.coyote.AbstractProtocol.pause ProtocolHandler ["http-nio-8081"] を一時停止します。
18-May-2019 16:17:16.884 情報 [main] org.apache.coyote.AbstractProtocol.pause ProtocolHandler ["ajp-nio-8009"] を一時停止します。
18-May-2019 16:17:16.930 情報 [main] org.apache.catalina.core.StandardService.stopInternal サービス [Catalina] を停止します
18-May-2019 16:17:16.949 情報 [main] org.apache.coyote.AbstractProtocol.stop ProtocolHandler ["http-nio-8081"]の停止中
18-May-2019 16:17:16.952 情報 [main] org.apache.coyote.AbstractProtocol.stop ProtocolHandler ["ajp-nio-8009"]の停止中
18-May-2019 16:17:16.954 情報 [main] org.apache.coyote.AbstractProtocol.destroy ProtocolHandler ["http-nio-8081"] を破棄します。
18-May-2019 16:17:16.956 情報 [main] org.apache.coyote.AbstractProtocol.destroy ProtocolHandler ["ajp-nio-8009"] を破棄します。
        

最終的なフォルダ構成

D:\
  |+opt
      |+oracle-openjdk-11.0.2
      |
      |+apache-tomcat-9.0.20
          |+bin
          |   |-setenv.bat
          |   |-startup.bat
          |   |-shutdown.bat
          |
          |+conf
          |   |-server.xml
          |
          |+logs
              |-catalina.YYYY-MM-DD.log