1

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.ServerContainerInitializerWebsockets Containter

4

1 に答える 1