<?xml version="1.0"?>
<document url="./status.xml">

<!--
// ======================================================================== 78
-->

<properties>
    <title>Roadmap - The Apache Struts Web Application Framework</title>
    <author>Craig R. McClanahan</author>
    <author>Ted Husted</author>
    <author>Steve Byrne</author>
</properties>

<body>

<chapter href="roadmap" name="Development Roadmap">

<section href="scope" name="Scope">

    <p>
    This document outlines some of changes we expect to
    see in future releases of Struts.
    </p>

    <p>
    This document is provided for discussion purposes only.
    All releases and changes to the codebase are subject to
    <a href="./bylaws.html">a vote</a> of the
    <a href="volunteers.html#pmc">Struts PMC</a>.
    </p>

    </section>

    <section href="Bugzilla" name="Bugzilla Queries">

        <p>
            The Struts development teams uses the <a href="http://jakarta.apache.org/site/bugs.html">Apache Bug Database</a> (Bugzilla)
            to manage problem reports and enhancement requests.
            For your convenience, here are some common Bugzilla queries:
        </p>

        <ul>
            <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;product=Struts&amp;order=bugs.bug_id">Open reports</a></li>
            <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=3&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Struts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit&amp;order=Bug+Number">Open reports with at least 3 votes</a></li>
            <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Struts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit&amp;order=bugs.bug_id">Open problem reports</a>
                <ul>
                <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;product=Struts&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;order=bugs.bug_id">major problem reports</a></li>
                <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;product=Struts&amp;bug_severity=Blocker&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;order=bugs.bug_id">normal/minor problem reports</a></li>
                </ul>
                </li>
            <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;product=Struts&amp;bug_severity=Enhancement&amp;order=Bug+Number">Open enhancement reports</a>
                <ul>
                    <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Enhancement&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Struts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=PatchAvailable&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit&amp;newqueryname=&amp;order=Bug+Number">Patch Available</a></li>
                </ul>
                </li>
            <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=RESOLVED&amp;resolution=LATER&amp;resolution=REMIND&amp;product=Struts&amp;order=bugs.bug_id">Reports to be handled "LATER"</a></li>
        </ul>


    </section>

<section href="Struts_1_x" name="Struts 1.x">

    <p>
        Releases in the 1.x series will focus on refactoring of existing functionality, with a
        continued emphasis on backward compatibility.
    </p>
    <p>
        New features are being added to the Struts 1.x series,
        but only if backward compatability with the prior release can be retained.
        The 1.x API is evolving through a deprecate/replace/remove protocol.
        Developers are encouraged to stay current with the "best available" release
        and to observe deprecation warnings.
        Features are deprecated before removal, and deprecated features are ultimately removed.
    </p>

    <p>
        The 1.x series is being refactored into the Struts subproject and several dependant subprojects.
        Each subproject is expected to be dependant on the Struts core for necessary functionality.
        Otherwise, the subproject should be hosted in another venue, such as Jakarta Commons or Jakarta Taglibs.
    </p>

    <p>
        Popular third-party extensions that are in active use by the Struts Community may be considered
        as subprojects, such as those distributed through the
        <a href="http://sourceforge.net/projects/struts">Struts SourceForge</a> site.
    </p>

    <p>
        Throughout the 1.x series,
        there will be a continued emphasis on expanding unit test coverage for the framework.
        Bug reports should include a failing test case when possible.
        Proposals for new features should include a working test suite.
        (Creating features through Test Driven Development is strongly encouraged.)
    </p>

    <p>
        Enhancement requests are logged in Bugzilla as they are suggested.
        <strong>The listing of an enhancement in Bugzilla does not imply that is being "planned"</strong>,
        merely that some member of the community has suggested it,
        and the idea hasn't been ruled out (yet).
    </p>

    <p>
        Future release milestones are provided for enhancements
        which are being actively planned or developed
        but may not be ready for the very next release.
        If a report has not been tagged for a specific milestone by a working developer,
        then <strong>it may never be implemented</strong>.
        When developers (including non-Committers) are actually working on an enhancement,
        they should re-tag it for a specific release milestone, such as "1.3.1" or "1.3.2".
    </p>

    <p>
        If an enhancement has not been tagged for a specific target,
        feel free to start working on it yourself.
        Many of our best features have been contributed by developers,
        just like you.
        If you are working on an enhancement,
        post a note on the ticket that you are working on an enhancement
        and then post a patch as soon as possible.
        If the development effort doesn't succeed,
        post a note to the ticket explaining what problem you had creating the enhancement,
        so that other developers can explore alternatives.
    </p>

    </section>

    <section href="Struts_1_x_whiteboard" name="Struts 1.x Whiteboard">

        <p>
            These are some general ideas we have about what may happen in the Struts 1.x series.
            This is a <strong>whiteboard</strong> and everything here is <strong>subject to change</strong>.
        </p>

        <ul>

            <li>Struts 1.0.0 (complete) -
            Major refactoring of Struts internals to provide support for modules and a new "config" object series.
            Bundles Struts Tiles and Struts Validator into main distribution.
            The initial release of Struts EL is provided as an optional package.
            </li>

            <li>Struts 1.2.4 (complete) -
                Continued refactorings of the Struts 1.x product series.
                <ul>
                    <li>Removed deprecations created in the 1.0 to 1.1 timeframe, and prior</li>
                    <li>Added support for wildcard mappings.</li>
                    <li>Other minor enhancements, improvements, and refactorings</li>
                </ul>
            </li>

            <li>Struts 1.2.6 (complete) -
                Migrated repository to Subversion; update website.</li>

            <li>Struts 1.2.x (pending) -
                Minor enhancements, improvements, and refactorings only, as needed.
                New features should be added to the 1.3.x series.</li>

            <li>Struts 1.3.x (pending) -
            Enhancements to product base, based on existing features or codebases.
                <ul>
                    <li>Divide distribution into subprojects
                    <ul><li>core, apps, el, faces, site, taglibs</li>
                        <li><a href="http://struts.sourceforge.net/struts-flow/index.html">flow</a>, <a href="http://struts.sf.net/struts-bsf/">scripting</a> (new)</li>
                    </ul>
                    </li>
                    <li>Complete support for Maven builds (pending)</li>
                    <li>Move core to "Struts Chain" Request Processor (now in Contrib)</li>
                    <li>Move to Commons Resources (if available)</li>
                    <li>Enhance all configs to extend one configuration element from another,
                        as is done with Tiles Definitions</li>
                </ul>
            </li>

            <li>Struts 1.4.x -
            Enhancements to product base, based on undeveloped code.
                <ul>
                    <li>Consider adding support for an Action context
                        (which also might be based on the Commons Chain of Responsibility package).</li>
                    <li>Consider adding support for Porlets by specifying an alternate Request Processor catalog.</li>
                </ul>
            </li>

            <li>Other potential enhancements for the 1.x.x series
                <ul>
                    <li>Consider <a href="http://struts.sf.net/struts-cocoon/">Cocoon Plugin</a></li>
                    <li>Consider <a href="http://struts.sourceforge.net/struts-spring/index.html">Spring Plugin</a></li>
                    <li>Consider adopting several popular extensions, including:
                        <ul>
                            <li><a href="http://struts.application-servers.com/">Layout</a></li>
                            <li><a href="http://sslext.sourceforge.net/">SSL Ext</a></li>
                            <li><a href="http://stxx.sourceforge.net">Stxx</a> (XLST)</li>
                            <li><a href="http://strutstestcase.sourceforge.net/">TestCase</a></li>
                            <li><a href="http://www.livinglogic.de/Struts/">Workflow</a></li>
                        </ul>
                    </li>
                </ul>
            </li>

        </ul>

  <!--
    <p>
    Features under discussion include:
    </p>

    <ul>

        <li>
        Proposing ActionError/ActionErrors as generic Commons "message" components
        </li>

        <li>
        "Nested" or "hierarchical" and locale-sensitive modules
        </li>

        <li>
        Extending one configuration element from another, as is done with Tiles
        Definitions
        </li>

        <li>
        Enhanced interoperability with JSTL and JSF
        </li>

        <li>
        Making Tiles JSTL-aware and available to other presentation systems (XLST,
        Velocity)
        </li>

        <li>
        Encouraging the use of <a href="http://sourceforge.net/projects/xdoclet/">XDoclet</a> and other code generation technologies to streamline development.
        </li>

        <li>Moving to <a href="http://jakarta.apache.org/turbine/maven/index.html">
        Maven</a> for project management
        </li>

        <li>Regardless of whether a move to Maven happens or not, we need to
        refactor the source repositories and build scripts for less complexity
        and easier maintenance.</li>

    </ul>
    <p>
    More detail on work-in-progress may be found in
    <a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=RESOLVED&amp;resolution=LATER&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Struts&amp;version=Unknown&amp;version=1.0+Beta+2&amp;version=1.0+Beta+1&amp;version=0.5+Final&amp;version=1.0.2+Final&amp;version=1.0.1+Final&amp;version=1.0+Final&amp;version=1.0+Beta+3&amp;version=1.1+Beta+2&amp;version=1.1+Beta+1&amp;version=Nightly+Build&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit&amp;order=Bug+Number">Bugzilla</a>.
    If any of these features are important to you, please don't hesitate to
    <a href="./faqs/helping.html">help with the development effort</a>.
    </p>
-->

</section>

<section href="Struts_2_0" name="Struts 2.0.x">

    <p>
    Struts 2.x (aka Struts "Next Generation") will include broader enhancements.
    We anticipate that the implementation will utilize the Servlet 2.4 / JSP 2.0
    platform, and perhaps Java 1.5, but may optionally support earlier platforms.
    </p>

    <p>
    We anticipate that Struts 2.x will rely on JSTL and the JavaServer Faces
    API as supporting technologies.
    However, the focus of the Struts framework will remain on the Controller
    aspect of a Model 2/MVC architecture.
    The core framework will continue to be both Model and View independent.
    </p>

    <p>
    Development of Struts 2.x will include taking a completely fresh look at
    the internal architecture.
    The goal for 2.x will be to incorporate everything we've learned in the past
    years of Struts usage, and create something even better.
    Development will follow current best practices, like Test Driven Development,
    and rely on technologies like Maven for project management.
    </p>

    <p>
    Of course, it is anticipated that the Struts team will continue to support
    the 1.x codebase for a long time with bugfixes and incremental enhancements.
    (Mainly because many of us will still be using it on our production sites!)
    Accordingly, it is anticipated that the development of the 2.x and 1.x
    series will occur in tandem.
    At some point, 2.x milestones may appear alongside new 1.x releases.
    </p>

    <p>
    As Struts 1.x evolves, some (or all) target features may overlap.
    Target features for Struts 2.x include:
    </p>

    <ul>

        <li>
        Comprehensive unit test coverage for all core features
        </li>

        <li>
        Enhanced support for using Struts in large team environments.
        </li>

        <li>
        Transparent support for a portlet environment (JSR 168), with
        minimal-to-no changes in your business logic and pages.
        </li>

        <li>
        Direct support for JSTL/JSF taglibs and the JSF API
        </li>

        <li>
        Enhanced support for other presentation layers, such as XLST
        </li>

        <li>
        Enhanced support for scriptable Actions, using technologies like BSF or Jelly
        </li>

        <li>
        Refactoring for new technologies available on the Servlet 2.4/ JSP 2.0 platform
        </li>

    </ul>

    <p>
        An early proposal for one possible implementation of Struts 2.x, "Struts Jericho",
        is available in the <a href="http://svn.apache.org/viewcvs.cgi/struts/core/trunk/contrib/struts-jericho/?root=Apache-SVN">contrib folder</a>.
    </p>

</section>

<section href="Portlets" name="Portlet (JSR-168) Whiteboard">
    <p>
        There are three major issues with supporting JSR-168 (and I'm sure a bunch of smaller ones as well):
    </p>

    <ul>

        <li>
            Struts APIs assume servlet API objects (ServletContext, ServletRequest, ServletResponse), whereas JSR-168
            talks aboutPortletContext, PortletRequest, and PortletResponse.
            We'd either need to change the calling sequence for Action.execute() -- problematic for backwards
            compatibility -- or fake it somehow in a portlet environment.
        </li>

        <li>
            The lifecycle of a portlet request is actually divided into two chunks -- processing and then rendering.
            From a Struts perspective, that means making sure that the first part of the request processor pipeline
            need to happen in the "process" part, and the forwarding to the resulting page needs to happen in the
            "render" part.
        </li>

        <li>
            Today, Struts owns the process of calculating URLs for pages and actions.
            Because it's in a webapp, it knows exactly what to do for the developer.
            However, in a portlet container it's actually the portal server that manages URLs, so a Struts-based
            portlet would need to interact with the portlet APIs for this purpose.
        </li>

    </ul>

    <p>
        A strong goal should be that a Struts application should be usable either as a webapp or as a portlet, with
        little (ideally no) changes.
        Therefore, we should build whatever it takes to support this into the standard Struts distribution, which would
        then be used in both environments.
    </p>

</section>

    <section href="jsf" name="JavaServer Faces">

        <p>
            Struts is providing support for <a href="http://java.sun.com/j2ee/javaserverfaces/">JavaServer Faces</a>
            through the Struts Faces Integration Library. The Struts Faces tablib allows developers to migrate
            pages to JSF but retain use of their Actions. Pages can be migrated on a one-by-one basis. The
            Struts Faces taglib is still under development, and a 1.0.x release is forthcoming.
        </p>
        <p>
           As JSF comes into broader use, it is expected that
           Struts developers will continue to offer enhancements to make it even easier to use Struts with JSF.
        </p>

        <p>
            The SourceForge <a href="http://sf.net/projects/myfaces">MyFaces</a> team is in the process of
            joining the Apache Software Founcation. Once the Apache MyFaces team has access to the Apache TCK, it
            is expected to be recognized as a certified JSF implementation.
        </p>

        <p>
            For more about Struts and JavaServer faces, see:
       </p>

        <ul>
            <li>Craig McClanahan's <a href="http://blogs.sun.com/roller/page/craigmcc/20040927">blog entry</a></li>
            <li>Our <a href="faqs/kickstart.html#jsf">FAQ</a></li>
            <li><a href="http://www.jamesholmes.com/JavaServerFaces/">Java Server Faces Resources at JamesHomes.com</a></li>
         </ul>
    </section>

<section href="Proposals" name="Relevant Proposals">

    <ul>

        <li>
        <a href="http://cvs.apache.org/viewcvs/jakarta-commons-sandbox/chain/">Commons Chain of Responsiblity
        package</a>
        </li>

        <li>
        <a href="http://cvs.apache.org/viewcvs/jakarta-struts/contrib/struts-chain/">CoRe Request Processor</a>
        </li>


        <li>
        <a href="http://wiki.apache.org/struts/StrutsRelease127">Release Plan 1.2.7</a>
        </li>

        <li>
        <a href="proposals/struts-faces.html">struts-faces taglib</a>
        </li>

    </ul>

</section>

    <section>
      <p class="right">Next:
      <a href="http://svn.apache.org/viewcvs.cgi/struts/?root=Apache-SVN">Source Repository</a></p>
    </section>

<section>
    <p class="version">Website updated from repository: 2004 OCT 23 by husted.</p>
    <p class="version">Javadocs updated from repository: 2004 OCT 15 by husted.</p>
</section>
</chapter>
</body></document>
