<?xml version="1.0"?>
<document url="./helping.xml">
<properties>
<author>Ted Husted</author>
<author>Craig R. McClanahan</author>
<title>How to Help FAQ - Apache Struts</title>
</properties>

<body>

<section href="faq" name="How to Help FAQ"/>

<section href="contents" name="Index">

<p>

"You can't always get what you want / 
but if you try real hard / 
you might just find /
that you get what you need". 
<br/>
[Rolling Stones]
</p>

<ul>
    <li><a href="#corp">
    What can my company do to help support Struts?
    </a></li>
    <li><a href="#bugs">
    How can I report bugs or make feature requests?
    </a></li>
    <li><a href="#contribute">
    How can I contribute to Struts source code?
    </a></li>
    <li><a href="#documentation">
    How can I contribute to the documentation?
    </a></li>
    <li><a href="#release">
    So when is the next release coming out?
    </a></li>
    <li><a href="#release_help">
    How can I help the next release along?
    </a></li>
</ul>

</section>

<section href="corp" name="What can my company do to help support Struts?">

<p>
Struts is an all volunteer product. 
Our customers are the volunteers who donate their time and energy to 
supporting the product. 
If you want to support Struts, and become one of our customers, 
then you need to 
<a href="http://jakarta.apache.org/site/getinvolved.html">get involved</a>
and become a volunteer.
</p>

<p>
Our challenge to any team using Struts is to donate the time of one team member 
one afternoon a week (or more if you can spare the resources). 
Have your team member browse 
<a href="http://jakarta.apache.org/site/bugs.html">Bugzilla</a> for any issues 
without a patch or unit test, 
and add the patch or test.
If the patch is written on company time, 
and you want to give your company an author's credit, that's fine with us.
</p>

<p>
If Struts doesn't do what <em>you</em> want, it's up to <strong>you</strong> to step up 
and propose the patch.
If Struts doesn't ship as often as you would like, it's up to you to step up 
with the tests and fixes that get a release out the door.
</p>

<p>
If Struts does do what you want, help others become involved by turning your 
war stories into FAQs and how-tos that we can make part of the 
<a href="#documentation">documentation</a>. 
The mailing list is very active and trundling through the archives is no 
picnic. 
We can always use people who can reduce the best threads to coherent articles 
that we can put in the User Guide.
</p>

<p>
Some Apache products like you to submit your patch to the mailing list. 
We would prefer that you create a 
<a href="http://jakarta.apache.org/site/bugs.html">Bugzilla</a>
Bugzilla report and then attach the patch to the report. 
To do this, you must first create the report, 
and then modify the report to add your patch. 
We realize this is a bit clumsy, but it keeps us from losing things, 
and helps to ensure that your patch will be attended.
</p>

<p>
We don't sell Struts for money, but anyone who wants to be our customer 
can pay us back by donating the time and energy that money represents.
</p>

</section>

<section href="bugs" name="How can I report bugs or make feature requests?">

<p>
You can research and report outstanding fixes and feature requests using
<a href="http://jakarta.apache.org/site/bugs.html">Jakarta Bugzilla</a>. 
If you are unsure if this is an actual problem, feel free to bring it up the 
list first. 
But to be sure that an issue is resolved, read 
<a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html">
How to Report Bugs Effectively</a> and report it to
<a href="http://jakarta.apache.org/site/bugs.html"><strong>Bugzilla</strong></a>.
</p>

<p>
Feature requests are also maintained in the Bugzilla database. 
</p>

<p>
<a href="http://jakarta.apache.org/site/source.html">Patches</a> are always
welcome. 
If you can't write a patch to fix your bug, a <a href="kickstart.html#tests">unit test</a>
that demonstrates the problem is also welcome.
(And, of course, unit tests that prove your patch works are equally welcome.)
</p>

<p>
If your bug or feature is already in Bugzilla, <strong>you can vote</strong>
for the issue and call more attention to it. 
Each user can cast up to six votes at a time.
</p>

<p>
If there is a patch attached to the issue, you can also try applying
to your local copy of Struts, and report whether it worked for you.
Feedback from developers regarding a proposed patch is really quite
helpful. 
Don't hesitate to "me too" if you've tried the patch yourself.
</p>

</section>

<section href="contribute" 
    name="How can I contribute to the Struts source code?">

<p>
Struts is distributed by <a href="http://apache.org/">
The Apache Software Foundation</a>.
These are the same people who distribute the Apache Web server. 
Like all ASF projects, Struts is managed as a &quot;meritocracy&quot;, 
where everyone's contribution is welcome. 
Users can help other users the 
<a href="http://jakarta.apache.org/site/mail.html">mailing lists</a>,
<a href="http://jakarta.apache.org/site/bugs.html">report bugs</a>, and
<a href="http://jakarta.apache.org/site/bugs.html">request new features</a>. 
Developers can
contribute patches, new code, and documentation. 
The most active Developers may become
<a href="http://jakarta.apache.org/site/roles.html">Committers</a>, 
who make the actual decisions about Strut's codebase.
</p>

<p>
If you are new to open source development, see the
<a href="http://jakarta.apache.org/site/getinvolved.html">
How to get involved</a> page the main Jakarta site.
</p>

<p>
A very good place to start is by <strong>reviewing the list of open issues</strong> and 
pending feature requests (<a href="#bugs">Bugzilla</a>). 
If you see an issue that needs a patch you can write, 
feel free to annex your patch. 
If you seen an issue that needs a unit test to prove its fixed, 
feel free to annex your test case. 
If someone has posted a patch to an issue you'd like to see resolved, 
apply the patch to your local development copy of Struts. 
Then let us know if it works for you, and if it does, 
cast your vote for the issue and its patch.
</p>

<p>
If none of the pending issues scratch your itch, 
another good place to start is by <strong>contributing unit tests</strong> 
for existing features (even those that still work).
</p>

<p>
Our current approach to <a href="kickstart.html#tests">unit testing</a>
works fairly well for exercising most method-level stuff, but does
not really address situations of dynamic behavior -- most particularly the
execution of custom tags for Struts.  
You can try to fake what a JSP container does, but a much more reliable 
testing regime would actually execute the tag in a real container.  
For that purpose, we use the 
<a href="http://jakarta.apache.org/cactus">Cactus</a> testing framework, 
which re-executes the JUnit-based tests as well to make sure that nothing 
bad happens when you switch environments.  
Right now, there are very few dynamic tests; ideally, we will have tests 
for every tag, that cover every reasonable combination of tag attribute 
values (yes, that's a tall order -- the totally lines of test source code 
will undoubtedly exceed the totally lines of code in the framework itself 
if we achieve this).
</p>

</section>

<section href="documentation" 
    name="How can I contribute to the documentation?">

<p>
The only difference is that the documentation is kept in XML rather than Java
source code. 
Otherwise, all the same precepts and procedures pertain.
</p>

<p>
The trick to getting started is to download the nightly build and try building 
the documentation WAR. 
Then try adding your own XML page under doc/ to see if the build succeeds. 
If it doesn't, it will report where the bad element is, much like it reports 
where a bad programming expression is. 
If it does, then your page should be available under target/documentation/.
</p>

<p>
The website portion of the package is the root directory of doc/. 
The User Guide portion is under the userGuide/ folder. 
If the material you'd to add doesn't fit right in with what's there, 
the best thing may to start a new section after the existing material. 
The navigation column can be found in the project.xml document.
</p>

<p>
To display markup, substitute &amp;lt; for &lt;. 
The unmatched trailing > will be ignored. 
Since it is XML, all elements also need to closed. 
So elements like &lt;br> and &lt;hr> need to set out as &lt;br/> and &lt;hr/>.
</p>

<p>
Also watch for the length of code samples - 
these do not wrap. 
If a line is too long, it will force the right margin out past the edge of the 
screen or printed page.
</p>

<p>
The stylesheets we use are adequate, but could certainly be improved by an XML
guru, if you happen to one of those.
</p>

</section>

<section href="release" name="So when is the next release coming out?">

<p>
Here is the truth regarding releases:
</p>

<p>
Jakarta products are released on the basis of merit, and ~not~ according
to a strict timetable. 
The volunteers devote whatever time they can to work on the product. 
But all volunteers have real jobs and real lives, that do take precedence. 
Since Struts does not have paid personnel working on the project, 
we simply cannot make date-oriented commitments.
</p>

<p>
All Jakarta products must circulate a public beta before release. 
If a beta is not in circulation, 
then it's a good bet that a release is not forthcoming any time soon. 
Products sometimes go through several betas before final release. 
So if this is beta 1, then it still may not be released any time soon.
</p>

<p>
The bottom line is that Jakarta takes releases very seriously. 
We do not compromise the quality of our software by watching the calendar 
(and then ship something ready or not). 
A release is ready when it is ready.
</p>

<p>
That may sound flip, but it ~is~ the truth. 
The delivery of production-quality, leading-edge software is not something 
anyone can prognosticate. 
If anyone tries, they are lying to you. 
That, we won't do ;-)
</p>

<p>
What we ~will~ do is release all of our development software as soon as it is 
developed. 
This way you can judge for yourself how quickly the development is proceeding, 
and whether what is being developed will meet your needs. 
If you need a feature right now, you can use the nightly build, or roll your 
own patch. 
There are no private Subversion repositories or private development lists. 
What you see is what we got. 
If you are following the DEV list, then you know everything the developers 
know. 
Really, you do.
</p>

<p>
<em>So, what do you tell your team?</em> 
If you can ship your application based on the nightly build of your choice, 
then consider that an option. 
You can still ship yours, even if we don't ship ours, 
and you will have access to all the latest patches or enhancements. 
(Just like we were working down the hall.) 
If you can only ship your application based on a release build of Struts, 
then you should base your development on the release build of Struts,
and keep an eye on what is coming down the pipeline. 
This way you are at least forewarned and forearmed.
</p>

</section>

<section href="release_help" 
    name="What can I do to help the next release along?">

<ul>

<li>
  Most importantly, <strong>download the latest beta</strong> or release-candidate and 
  test it against your own applications. 
  Report any and all issues or suspected issues to 
  <a href="http://jakarta.apache.org/site/bugs.html">Bugzilla</a>. 
  The sooner we resolve any problems, the fewer betas or release candidates 
  we will have to distribute before we are done. 
  (How do we know when we're done? -- When we run out of issues =:o) 
  The sooner we find them, the sooner we are done.)
</li>

<li>
  <strong>Contribute <a href="kickstart.html#tests">unit tests</a></strong>. 
  The closer we get to a release, the more we worry about breaking something. 
  The more tests we have, the more confident we can be when applying patches. 
  Tests that prove that a pending issue is actually a bug are the most 
  welcome ones. 
  But we are eager for any and all tests for any and all features, 
  even those that still work =:0).
</li>

<li>
  <strong>Review the list of issues</strong> at <a href="#bugs">Bugzilla</a>. 
  If there are any to which you can respond, please do. 
  If there any patches posted, feel free to test them your system, 
  report the results, and cast your vote if they work.
</li>

<li>
  <strong>Confirm an issue's category and status</strong>. 
  Newbies often post feature requests or help-desk questions as "bugs". 
  This bloats the list of fixes we (apparently) need to apply before the next 
  beta, making it hard to see the forest for the trees. 
  If an issue doesn't seem to be categorized correctly, exercise your best 
  judgment and change it.
  If one ticket seems like a duplicate of another, go ahead and enter the 
  change. 
  Every modification to the ticket is echoed to the DEV list and 
  automatically subjected to peer review. 
  Err on the side of doing.
</li>

<li>
  Use Bugzilla to <strong>vote for issues</strong> you feel should be handled
  first. 
  If an issue on your ballot doesn't include a patch, feel free to try coding 
  one yourself. 
  (At Jakarta, patches are the only votes that truly count.) 
  Well over <a href="../volunteers.html">thirty developers</a> have contributed 
  code or documentation to the product. 
  You can too =:0)
</li>

<li>
  <strong>Answer questions on the user list.</strong> 
  The Committers only have a limited amount of time to volunteer. 
  If Developers are supporting each other on the lists, 
  the Committers have more time to spend on the next release.
</li>

</ul>

</section>

<section href="decisions" 
    name="Who makes the final decisions regarding Struts">

<p>
The management of the Jakarta site, and the Struts product, is based on 
principles and practices used by creators of the Apache HTTPD server. 
Struts follows the 
<a href="http://jakarta.apache.org/site/guidelines.html">Project Guidelines</a>
on the main Jakarta site.
</p>

<p>If you are new to this style of development, 
the Apache HTTPD Dev list is available in a 
<a href="mailto:dev-digest-subscribe@httpd.apache.org">digest form</a>. 
Even if you are not working on the HTTPD server yourself, 
it is interesting to watch how the HTTPD team works on the server.
</p>

<p>
The Struts project has its own <a href="../using.html#Lists">Dev list</a>, 
where all of the decisions regarding Struts are made. 
Most development takes place via
<a href="http://jakarta.apache.org/site/proposal.html#decisions/voting/items">
Lazy Consensus</a>.
Committers post most changes to the product unilaterally, using their own best 
judgment, and only discuss or vote upon controversial matters. 
Another Committer can veto any change in an unreleased product with cause.
</p>

</section>
</body>
</document>
