struts2 と websockets を使用する webapplication をホストする組み込みの tomcat を起動するために、実行可能な jar (依存関係あり) を使用しています。
アプリケーションは、Tomcat
インストールで実行すると適切に動作しますが、前述の実行可能な jar から実行すると、websocket コンテナーが初期化されない404
ため、対応するエンドポイントに接続しようとすると応答が返されます。
META-INF/Services/javax.servlet.ServerContainerInitializer
サーバーのサービスを初期化するクラスを見つけるために、さまざまな jar ファイルを読み取る検出プロセスに問題を絞り込みました。特に、Websockets コンテナーを初期化するクラスはorg.apache.tomcat.websocket.server.WsSci
.
私が見る限り、WsSci
クラスはMavenアセンブリプラグインによって実行可能なjarに再パッケージ化されていますが、META-INF/Services/javax.servlet.ServerContainerInitializer
ファイルは元のjarのようにこのクラスについて言及しておらず、org.apache.jasper.servlet.JasperInitializer
初期化子についてのみ言及しています。
実行可能なjarをそのままにして、クラスWebSockets Container
のメソッドを呼び出してプログラムで初期化を要求する方法はありますか? Tomcat
または、ファイルで初期化を要求しweb.xml
ますか?
注: 回避策として、実行可能な jar 内WsSci
の新しいファイルにクラスを手動で追加すると、正しく初期化されることがわかりました。META-INF/Services/javax.servlet.ServerContainerInitializer
Websockets Containter