Servlet API 3.0 proposal

Servlet API 3.0となる仕様JSR 315(http://jcp.org/en/jsr/detail?id=315)がJCPに提出されたようです。今回の仕様では各種Webフレームワークをプラガブルに使えるようにすることと、Java EE 6に合わせたEoDの二つが主な目的だそうです。詳細は次のようになっています。

  • Web framework pluggability
    • ほぼ全てのJavaによるWebフレームワークはサーブレットがベースとなっています。また、現在、ほとんどのWebフレームワークはサーブレット経由であるいはweb.xmlに設定することでプラグインするようになっています。これはサーブレットやリスナ、フィルタにアノテーションを定義すれば出来るようになると思われます。web.xmlにプログラム内からアクセスする(書き換えを目指している?)機能やwebappのコンフィグレーションを動的に変更する機能が必要になるでしょう。このJSRは(サーブレットコンテナ内の)webアプリケーションに違う種類のWebフレームワークをシームレスにプラグインする能力を追加することを目指しています。
  • EOD
    • アノテーション - 宣言的なプログラミングスタイルを採り入れるためにアノテーションを採用します。
    • EoDの一環として、webアプリケーションでもゼロコンフィグレーションにすることを目指しています。デプロイ・デスクリプタはコンフィグレーションを上書きするのに使われることになるでしょう。
    • Generics – 可能な場所ではgenericsを使うようにします。
    • APIユーザビリティを向上させるため可能なところではJava以外の言語も使えるようにするための拡張を行います。
  • Async and Comet support(非同期とプッシュ技術のサポート)*1
    • Non-blocking input – データがスムーズに届かない状況下でもブロッキングしないでクライアントからデータを受け取る機能
    • Non-blocking output – クライアントやネットワークの動作が遅い状況下でもブロッキングしないでクライアントにデータを送り続ける機能
    • Delay request handling - CometタイプのAjax webアプリケーションではリクエスト・ハンドリングをタイムアウトするかイベントが発生するまで遅らせるように要求できるようになっています。リクエスト・ハンドリングを遅らせることはリモートのあるいは反応の遅いリソースをリクエストを処理する前に取得しないといけないような状況において役に立ちます。また、かなりの数のアクセスが同時に発生するのを阻止するために特定のリソースへのアクセスを抑制しなければならない状況下でも役に立ちます。
    • Delay response close - CometタイプのAjax webアプリケーションでは非同期のイベントが発生したときに追加のデータを遅れるようにレスポンスのコネクションを開いた状態で維持しておくことを要求できるようになっています。
    • Blocking - Non-blocking notification - プッシュ・ブロッキング、ノン・ブロッキングののイベントを通知する機能。
    • Channels concept - Channelに登録して、そのchannelから非同期のイベントを取得する機能。この機能は誰がジョインできて誰ができないかというようなセキュリティ制約を生成、登録、登録解除できるようにすることを意味します。
  • Security
    • ログイン、ログアウトの機能
    • 自己登録の機能
  • Alignment
    • RESTのJSR(JSR 311)との関連で要求される機能
    • JSF 2.0 JSRとの関連で要求される機能
  • Misc
    • welcomeに指定できるファイルのサポートを向上させる(ファイルの種類を増やす?)
    • ServletContextListener ordering(取得方法?)
    • コンテナ全体で有効な初期値の定義
    • ファイルアップロード-進行状態のリスナ-アップロード途中のファイルと完了後のファイルを置く場所
    • スレッドセーフに関する課題を明確にすること

InfoQの記事(Sun Submits Servlet 3.0 Specification to JCP)では特にComet対応に注目しているみたいです。GlassFishではGrizzlyを使うとCometなプログラミングができるという話がhttp://weblogs.java.net/blog/jfarcand/archive/2006/07/the_grizzly_com.htmlに出ていました。

今年12月にPublic Reviewが出て、来年4月くらい(?)になってからFinalが出る予定のようです。もう大きな変更はなくて、今の環境に合わせるための修正という感じですね。