The Apache Project

開発ロードマップ

スコープ

このドキュメントはStrutsの将来のリリースにおいて予想されるいくつかの変更について説明します。

このドキュメントは議論目的でのみ提供されています。 コードベースへの全てのリリースと変更はStruts PMC投票対象となります。

Bugzilla 検索結果

Struts開発チームは問題報告や機能拡張要求を管理するために、 Apache Bug Database (Bugzilla) を利用しています。ご参考までに、Bugzilla でよく行なわれる検索の結果へのリンクをいくつか示しておきます。

Struts 1.x

Struts 1.x シリーズを通してプラットフォーム要件は変更ありません(Servlet 2.2 / JSP 1.1)。 しかし、それ以降のプラットフォームもオプションとしてサポートするかも知れません。

Struts 1.xシリーズの各リリースはStruts 1.1がそうであったように、 引き続き下位互換性に重点を置き、既存の機能のリファクタリングに注力します。 ただし、数週間ごとに改善やバグフィックスを製作チームにリリースできるように、 今後の1.xシリーズでは、リリースをインクリメンタルにしたいと考えています

Servlet 2.2/JSP 1.1で実装可能な機能はすべて Struts 1.x シリーズ向けに検討される可能性があります。 そうした機能としては、(XLSTといった)ビュー[訳注:MVCのV]の代替技術のサポートの改善、 単体テストの組み込み、HTTP/HTTPSモード切替のサポートの組み込み、 ワークフローの扱いの改善、(BSF[Bean Scripting Framework]アクションといった)代替アクションタイプのサポート、 連鎖可能なリクエストプロセッサ、Actionコンテキストのサポートなどがあります。

検討される可能性の高い機能は既にサードパーティによる拡張機能として実装されており、 Struts SourceForgeサイトを通じて、 すでにStrutsコミュニティで積極的に活用されています。

1.xシリーズを通して、フレームワークの単体テスト網羅率の向上には引き続き重点を置く予定です。 バグ報告ではできれば失敗したテストケースも記載して下さい。 新機能の提案の際には、動作するテストスイートも含めて下さい。 ([提案する]新機能はテスト駆動で開発することを強く推奨します)

機能拡張要求は提案時にBugzillaに記録されます。 Bugzillaに機能拡張要求として載っているからといって、「実装決定」というわけではありません。 単にコミュニティのメンバーが提案していて、(今のところ)その提案が却下されていないだけなのです。

現在、実装決定・開発中の機能拡張のためにリリースのマイルストーンが設定されていますが、 直近のリリースでは実装完了しないかもしれません。 開発者が特定のマイルストーン向けのタグをつけていないバグ報告は、永遠に解決しない可能性もあります。 開発者(コミッタ以外も含む)が実際に機能拡張に着手した場合は、1.2.1や1.2.2といった特定のマイルストーンのタグをつけるはずです。

特定のターゲットのタグがついていない機能拡張については自由に着手していただいてかまいません。 Strutsのすばらしい機能の多くは、まさに皆さんのような開発者たちのおかげなのです。 もしある機能拡張に対して積極的な関心を表明したい場合は、[Bugzillaの]報告にメモを投稿し、 適切なリリースマイルストーンのタグをつけてください。

Struts 1.x ホワイトボード

Struts 1.x シリーズで今後行なうかも知れない変更に関する検討項目の概要です。 これはあくまでホワイトボードであり、いずれも変更される可能性があります

  • Struts 1.0.0 (完了) - モジュールのサポートと新たに「設定」オブジェクト一式を提供するためにStruts内部を大幅にリファクタリング。 Struts Tiles と Struts Validator をメインの配布にバンドル。 Struts EL の初期リリースはオプションパッケージとして提供。
  • Struts 1.2.x (アルファリリース) - Struts 1.x 製品シリーズのリファクタリングを継続。現行の1.2.0をリリースしたのは、 際立って多い問題報告を解決するため。 1.2.0リリース前にいくつかのパッチを適用。
    • 1.0 から 1.1 の間やそれ以前に発生した「推奨されない」機能を削除
    • ワイルドカードマッピングのサポートを追加
    • その他マイナーな拡張やリファクタリング
  • Struts 1.3.x (保留) - 製品ベースへのより本質的な機能拡張
    • Subversionへのリポジトリ移行を検討(保留)
    • Mavenビルドを完全サポート(保留)
    • タグライブラリとアプリケーションをそれぞれ別のサブプロジェクトに移動
    • Struts Flowサブプロジェクトの立ち上げ
    • Struts BSFサブプロジェクトの立ち上げ
    • (現在、Contribにある)「Struts Chain」リクエストプロセッサへ移行
    • 可能ならばCommons Resourcesへ移行
    • あらゆる設定ファイルで、Tiles定義ファイル[tiles-defs.xml]のように設定要素を継承できるように機能拡張
  • Struts 1.4.x - 製品ベースへのより本質的な機能拡張
    • Actionコンテキストへの移行を検討(これもCommons Chainパッケージをベースにする可能性あり)
    • (代替的なリクエストプロセッサの仕様策定で実現可能なら)他のプラットフォーム(2.3/1.2)向けの拡張サポートを検討
  • その他、1.x.xシリーズで実装可能性のある機能拡張

Struts 2.0.x

Struts 2.x (別名「次世代」Struts)では大幅な機能拡張を行ないます。 Servlet 2.4 / JSP 2.0プラットフォームを利用しての実装が予想されますが、 それ以前のプラットフォームもオプションでサポートするかもしれません。

Struts 2.xはサポート技術として JSTL と JavaServer Faces (JSF) APIに依存することが予想されます。 しかしながら、Strutsフレームワークは Model 2/MVC アーキテクチャのコントローラの役割を引き続き担当します。 今後も中心となるフレームワークはモデルにもビューにも依存しません。

Struts 2.xの開発ではアーキテクチャの根本的な見直しを行ないます。 2.xの目標は我々が過去何年もStrutsを使ってきた中で学んできた全てを組み込み、 より良いものを作り上げることです。 開発作業ではテスト駆動開発など最新の成功事例に追随し、 プロジェクト管理ではMavenなどの技術に依存します。

もちろん、Strutsチームは1.xコードベースのサポートも、 バグフィックスや機能拡張の追加といった形で長期にわたり行なわれることが予想されます。 (実稼動しているサイトで多くの人が今後も利用するだろうというのが主な理由です)。 従って、2.xと1.xシリーズの開発は平行して行う予定です。 2.xのマイルストーンリリースが1.xの新規リリースと同時に行なわれる場合もあるかも知れません。

ターゲットとなる機能としては以下のものが挙げられます。

  • 全てのコア機能での包括的な単体テストカバレッジ
  • 大規模チームによる開発環境でのStruts利用のサポート強化
  • ビジネスロジックやページを最小限もしくは全く変えずに Portlet環境 (JSR 168) を透過的にサポート
  • JSTL/JSFタグライブラリとJSF API の直接的サポート
  • XLSTなどプレゼンテーションレイヤのサポート強化
  • BSFやJellyなどの技術を用いたスクリプト制御可能なアクションのサポート強化
  • Servlet 2.4/ JSP 2.0プラットフォームで利用可能な新技術に向けたリファクタリング

Struts 2.xの実装候補の初期提案である「Struts Jericho」は contribフォルダで利用可能です。

Portlet (JSR-168) Whiteboard

JSR-168をサポートするに当たって大きな問題が3つあります(小さな問題もきっとたくさんあるでしょう)。

  • Struts APIではサーブレットAPIオブジェクト(ServletContext, ServletRequest, ServletResponse)を前提にしているのに対し、 JSR-168はPortletContext, PortletRequest, そして PortletResponseを扱います。 Action.execute()への呼び出しシーケンスを変えるか(この方法だと下位互換性に問題があります)、 Portlet環境でどうにかごまかす必要があります。
  • Portletリクエストのライフサイクルは実際には2つのかたまり — プロセシング(処理を行う部分)とレンダリング(結果を返す部分) — に分けられます。Strutsの観点からすると、リクエストプロセッサパイプラインの最初の部分は「プロセシング」の部分で、 結果ページのフォワードは「レンダリング」の部分で行なうようにする必要があるということを意味します。
  • 現在、Strutsはページやアクションに対応するURLを導き出すプロセスをもっています。 このプロセスはWEBアプリケーション内にあるので、開発者のために何をすべきか正確に把握しています。 しかしPortletコンテナでは、URLを管理するのはポータルサーバーなので、 StrutsベースのPortletはこの目的のためにPortlet APIにアクセスする必要があります。

Strutsアプリケーションを小規模の変更で(理想的には変更なしで)、Webアプリとしても Portletとしても使用できることが重要な目標となります。 したがって、標準Strutsディストリビューションにこうしたサポートを何としても組みこみ、 WEBアプリケーション、Portlet両方の環境で使えるようにしなければなりません。

JavaServer Faces

JavaServer Faceの仕様は確定しておりません。 しかし、StrutsはStruts Faces タグライブラリを通してJSFへのサポートを既に提供しております。JSF の仕様が確定し、広く利用されるようになれば、StrutsでJSFをさらに使いやすくするための機能拡張が Struts開発者から提供されると思われます。

現在のところ、JavaServer Faces実装に取り組むオープンソースのプロジェクトは、 MyFacesしかありません。 成果物はLGPLで提供されていますが、 このライセンス形態を容認しない開発者もいます。(もしこのプロジェクトに興味がおありでしたら、 ASLのようにより寛大なライセンスを採用するよう、 開発者に働きかけることをお勧めします。

JavaServer Facesの仕様に責任を持つJava Community Process (JCP) に対するApacheの強い支持と影響力のおかげで、JakartaなどApache Software Foundation の各プロジェクトが(非営利団体向け)認定奨学金の資格を得たり、TCK(テクノロジー互換性キット) にアクセスしたり、アプリケーションが仕様に準拠していると認定を受けられるようにプロセスが変更されました。

JavaServer Faces準拠が認定されたApacheの実装があれば、間違いなくすばらしいことでしょう。 リファレンス実装ではないにせよ、それと同様に扱うことが出来るでしょうし、 Apache的なやり方で厳格に仕様に従っていることでしょう。 厳格で高品質なオープンソース実装は恐らくコンテナの中で人気のある選択肢となることでしょう。

こうした実装作業はApacheのトップレベルプロジェクトであるStrutsが行なうかもしれません。 あるいは新しい別プロジェクト(「Apache Faces」?)がこの作業を行い、 Strutsは現在Commonsを使っているように技術を利用するだけという形になるかもしれません。

しかし現時点では「検討中のコード」はありません。Apache製品ではこうした決定はコードベースを作成・維持する人にゆだねられます。 したがってコードベースがない現状では、拘束力を持つ決定を行なうことはできません。 しかし「Apache Faces」の実装を進めたい人は、こうした選択肢が確固として存在することを覚えておいて下さい。

JavaServer Facesの厳密な実装の提供はさておき、それ以外にも「Apache Faces」が提供すると思われる JSF関連のツールや技術は非常ににたくさんあります。例えば、(TilesやValidatorのような)複合ビュー(composite view) やバリデーションのフレームワーク、複数リクエストのトランザクションのためのフレームワーク、 HTML以外のマークアップ言語(XULやXFormsやSVGのようなものをFacesをベースに構築するのは簡単です)、 JSP以外のレンダリング技術(動的に生成される出力先をマークする手段があるものなら何でも)、 ビルトインの標準コンポーネントなどあらかじめビルドされたコンポーネントのライブラリ (こうしたコンポーネントはJSP環境でもJSP以外の環境でも同じように動作します)、 XMLをベースにした人手を介さないあらゆるユーザインターフェースなどが挙げられます。

いつものことですが、標準実装は始まりに過ぎないのです。

StrutsやJavaServer facesの詳細はFAQを参照してください。 JavaServer Facesの概要についてはJamesHomes.comのJava Server Faces Resourcesもご参照ください。

関連提案



Website updated from CVS: 2004 AUG 24 by husted.

Javadocs updated from CVS: 2004 AUG 24 by husted.