読者です 読者をやめる 読者になる 読者になる

Wicket 7 native Websocket の制約?!

Wicket 7 で native Websocket を使ってサーバ PUSH に近いことをしようと作っていて、気持ち悪い制約に気が付いた。

Wicket のサイト web.xml では、たいてい WebFilter として、org.apache.wicket.protocol.http.WebApplication 継承クラスのマッピングには、

   <filter-mapping>
       <filter-name>WebFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>

と書いてサイトURL以下全て、WebApplication を通すであろう。

Tomcat 7 の環境だと Wicket が用意する org.apache.wicket.protocol.ws.tomcat7.Tomcat7WebSocketFilter を Websocket 用のフィルタとして

   <filter>
      <filter-name>WebSocketFilter</filter-name>
      <filter-class>org.apache.wicket.protocol.ws.tomcat7.Tomcat7WebSocketFilter</filter-class>
      <init-param>
         <param-name>applicationClassName</param-name>
         <param-value>sample.SamplApplication</param-value>
      </init-param>
   </filter>

と書くであろう。
  残念はことに 2017-3-14 現在は、まだ Tomcat 8 用のこの WebSocketFilter はWicket から配布されていない。

filter-mapping にすごくとんでもないルールがあって、url-pattern は、/wicket/ で開始しないと
受信するページで、WebSocketBehavior を登録してもソケット接続コネクションが通知されず結果としてメッセージ受信できない。

   <filter-mapping>
     <filter-name>WebSocketFilter</filter-name>
     <url-pattern>/wicket/*</url-pattern>
   </filter-mapping>

と書かないとならない。
これは、BookmarkablePageLink が生成するリンクのURLと被ってしまう。
BookmarkablePageLink が生成するにのは、
サイト名 + "/wicket/bookmarkable/" + PageクラスPATH
のはずだ。

これが嫌で、filter-mapping で、 /wsocket/* のように書いてしまうと、
接続はされないで受信するページを作れない。

/wicket/* でなければいけないようである。

Wicket 8 が、もっとちゃんと進めばこんな制約はなくなるのだろうか?