悪戦苦闘中

<< 戻る   トップ >>

うむ、うまくいかない

「うむ」で文章を始めるのはどうかとは思うが、うまくいかない。それなりに工夫して Java プログラムにあったエラーをすべて改修して、いざ動かそうと思ったのだが、そもそもアプリケーションを配備してくれない。前に配備した時には JPA も JAX-RS もない状態だったから、このどちらかが原因だろう。切り分けのため、JPA なし・JAX-RS ありの試験用プロジェクトを立ち上げてみた。これでうまくいかないので、とりあえず JAX-RS に問題があることは間違いない。とえいあえず、war アーカイブを作成してコマンドラインから配備してみようかと思う。やはりうまくいかない。

試すこと数刻、ようやくうまく動くようになった。問題の核心は、設定ファイル web.xml の <servlet> 設定にあった。そもそも、JAX-RS の動作を web.xml で指定するのは時代遅れ(@ApplicationPath で指定するべき)だ。それはさておき、サーバへの要求が JAX-RS に対するものであった場合、あらかじめ設定された package の中からそれを捜して応答する仕組みになっているようだ。複数の package にまたがっていいのか、というあたりは不明だ。この package 名の記述が成されていなかったために、うまく行かなかった模様だ。

 <servlet>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <servlet-name>JAX-RS_Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
	<init-param>
    	<param-name>jersey.config.server.provider.packages</param-name>
    	<param-value>jaxresource</param-value>
  	</init-param>
  	<init-param>
    	<param-name>jersey.config.server.provider.scanning.recursive</param-name>
    	<param-value>false</param-value>
  	</init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS_Servlet</servlet-name>
    <url-pattern>/jaxrs/*</url-pattern>
  </servlet-mapping>

この設定で jaxresource package 下のリソースに http://localhost:8080/rstest/jaxrs/@Path でアクセスできるようになった。旧式のやり方はある意味なにが起きているのか、内部の機序がわかりやすくてよい。しかし、新式のやりかたでもうまく動くようにさらにいじることにしよう。

まるでウソのようにうまくいった。しかし、同じように変更したのにもかかわらず、最初に作った JPA + JAX-RS はうまくいかない。今週は組み合わせて動くように再挑戦しようと思う。


作成: 2020-02-16 12:42:43更新: 2020-02-16 12:42:43
https://museo-anonimo.jp/nanban/?id=1469,https://museo-anonimo.jp/nanban/tr/1469