はじめに
この記事は以前EclipseからTomcatが起動出来ない事案が発生した際の事をまとめます。
あまりにも原因が盲点な箇所でしたので、同じように悩んでいる人のヒントになりますように。
ターゲットとしては開発環境構築をしている人向けなので、初心者向けとなります。
環境
OS:macOS Catalina(10.15.5)
Eclipse:Eclipse2020~2018
※原因の特定が出来なくて3バージョン程落としました
事のはじまり
3ヶ月ほど前にstrus2を使用したWEBアプリケーションを作成しようとしていたのですが、長らく放置していたので続きを作るかという流れでごちゃごちゃ触っていました。
(ライブラリが多いのでmavenプロジェクトに移行するぞという意志)
POMの設定も終わり、いざサーバー起動するぞという所でいつもなら秒で起動するサーバーが何故か起動しない…
そのまま待っていると何故かサーバーのタイムアウトエラーになってしまいました。
試したこと
ちょっと調子が悪いのかなと思い、一旦サーバーのタイムアウトの時間を45秒から120秒に変更してみました。
それでもタイムアウトエラーになってしまう。
ログには特に怪しい箇所もない。
情報: Server version: Apache Tomcat/8.5.34 [金 6 12 11:04:07 JST 2020]
情報: Server built: Sep 4 2018 22:28:22 UTC [金 6 12 11:04:07 JST 2020]
情報: Server number: 8.5.34.0 [金 6 12 11:04:07 JST 2020]
情報: OS Name: Mac OS X [金 6 12 11:04:07 JST 2020]
情報: OS Version: 10.15.5 [金 6 12 11:04:07 JST 2020]
情報: Architecture: x86_64 [金 6 12 11:04:07 JST 2020]
情報: Java Home: /Applications/Eclipse_2018-09.app/Contents/java/8/Home/jre [金 6 12 11:04:07 JST 2020]
情報: JVM Version: 1.8.0_181-b13 [金 6 12 11:04:07 JST 2020]
情報: JVM Vendor: Oracle Corporation [金 6 12 11:04:07 JST 2020]
情報: CATALINA_BASE: /Applications/Eclipse_2018-09.app/Contents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 [金 6 12 11:04:07 JST 2020]
情報: CATALINA_HOME: /Applications/Eclipse_2018-09.app/Contents/tomcat/8 [金 6 12 11:04:07 JST 2020]
情報: Command line argument: -Djava.ext.dirs=/Applications/Eclipse_2018-09.app/Contents/java/8/Home/jre/lib/ext [金 6 12 11:04:07 JST 2020]
情報: Command line argument: -Dcatalina.base=/Applications/Eclipse_2018-09.app/Contents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 [金 6 12 11:04:07 JST 2020]
情報: Command line argument: -Dcatalina.home=/Applications/Eclipse_2018-09.app/Contents/tomcat/8 [金 6 12 11:04:07 JST 2020]
情報: Command line argument: -Dwtp.deploy=/Applications/Eclipse_2018-09.app/Contents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps [金 6 12 11:04:07 JST 2020]
情報: Command line argument: -Djava.endorsed.dirs=/Applications/Eclipse_2018-09.app/Contents/tomcat/8/endorsed [金 6 12 11:04:07 JST 2020]
情報: Command line argument: -Dfile.encoding=UTF-8 [金 6 12 11:04:07 JST 2020]
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/XXXXXXXX/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.] [金 6 12 11:04:07 JST 2020]
情報: Initializing ProtocolHandler ["http-nio-8080"] [金 6 12 11:04:07 JST 2020]
情報: Using a shared selector for servlet write/read [金 6 12 11:04:07 JST 2020]
情報: Initializing ProtocolHandler ["ajp-nio-8009"] [金 6 12 11:04:07 JST 2020]
情報: Using a shared selector for servlet write/read [金 6 12 11:04:07 JST 2020]
情報: Initialization processed in 1147 ms [金 6 12 11:04:07 JST 2020]
情報: サービス [Catalina] を起動します [金 6 12 11:04:07 JST 2020]
情報: Starting Servlet Engine: Apache Tomcat/8.5.34 [金 6 12 11:04:07 JST 2020]
情報: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. [金 6 12 11:04:10 JST 2020]
情報: Starting ProtocolHandler ["http-nio-8080"] [金 6 12 11:04:10 JST 2020]
情報: Starting ProtocolHandler ["ajp-nio-8009"] [金 6 12 11:04:10 JST 2020]
情報: Server startup in 2956 ms [金 6 12 11:04:10 JST 2020]
ここから私がmaven化したことによってtomcatが動かない?という発想に至り、一旦プロジェクトの削除を行いました。
プロジェクト削除後、サーバーのみ起動するかの確認をすると、やはりタイムアウトエラーが発生。
ここからEclipseを壊してしまったのではないかという思いでEclipseを入れ直してみました。
同じようにサーバーのみ起動するかの確認をしても、やはりタイムアウトエラー。
Javaのバージョンもtomcatのバージョンも合ってるし原因が全くわからず。
そのまま次に行ったことはtomcat単体でサーバー起動が出来るかの確認。
上記にならってサーバー起動を行うと、普通に起動してるのではとなり意気揚々と
http://localhost:8080
へ接続しにいくと…
やっぱり接続出来ない!!!!!!!
MochiMac:bin XXXXX$ ./startup.sh
Using CATALINA_BASE: /Users/XXXXX/Desktop/apache-tomcat-9.0.36
Using CATALINA_HOME: /Users/XXXXX/Desktop/apache-tomcat-9.0.36
Using CATALINA_TMPDIR: /Users/XXXXX/Desktop/apache-tomcat-9.0.36/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
Using CLASSPATH: /Users/XXXXX/Desktop/apache-tomcat-9.0.36/bin/bootstrap.jar:/Users/XXXXX/Desktop/apache-tomcat-9.0.36/bin/tomcat-juli.jar
Tomcat started.
staetedって表示されてるんだからスタートしてんじゃん!!!!
と叫びたい気持ちをぐっと堪えてここで初めてログを確認しに行きました。
(eclipseで起動してた時もログを探せばよかったのではと今になって後悔しておりますが)
するとここで初めて原因のヒントに触れました。
12-Jun-2020 09:40:29.349 情報 [main] org.apache.coyote.AbstractProtocol.init プロトコルハンドラ ["http-nio-8080"] を初期化します。
12-Jun-2020 09:40:29.374 重大 [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:1042)
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:1057)
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)
8080が使用されている?
使っているつもりはなかったのですが、きっとどこかで使われてしまっているのだろうと思い、8081を使用するように修正してみました。
何故接続が拒否される?
そしてよくよく思い出してみて2ヶ月前に確かセキュリティソフトを入れ直してた記憶が…
もしかしてと思い、セキュリティソフトのファイアウォール周りとアクセス制限を無効にしてtomcatを再起動すると…
動いた!!!!!!!localhost:8080も接続出来る!!!!!
更にそのままEclipseでも無事にサーバーが立ち上がりました。
結果
ここまできて原因としてはセキュリティソフトのファイアウォール周りとアクセス制限の設定が原因でした。
あまりもくだらなく、盲点であり、かつ原因特定に時間がかかってしまったので記事にさせて頂きました。