<?xml version="1.0"?>

<!--

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

<document>

  <properties>
    <author email="">Conor MacNeill</author>
    <author email="chuck@topsail.org">Chuck Murcko</author>
    <title>Having Problems?</title>
  </properties>

  <body>
    <section name="Having Problems?">
        <p>
           This page details some steps you can take to try and resolve
           any problems you may be having with BSF. If you find you can't
           resolve the problem, then this page will help you collect some of
           the relevant information to provide in a bug report. This information
           will help the BSF developers understand and resolve the problem.
           Of course, not all the steps here will make sense for every problem
           you may encounter - these are just some suggestions to point
           you in the right direction.
        </p>

      <subsection name="Read the Manual">
         <p>
            The first step to take when you have a problem with BSF is to read
            the <a href="manual.html">manual</a> entry for the task or
            concept that is giving you trouble. In particular, check the
            meaning of a task's attributes and nested elements. Perhaps an
            attribute is available that would provide the behavior you require.
            If you have problems with the manual itself, you can submit a
            documentation bug report (see below) to help us improve the BSF
            documentation.
         </p>
      </subsection>
      <subsection name="Examine Trace Output">
           <p>
            If you're still having a problem, the next step is to try and
            gather additional information about what BSF is doing.
           </p>
           <p>
           The trace output from a BSF run is helpful in determining
           causes of failure, and is useful in bug reports.
           </p>
      </subsection>

      <subsection name="Has It Been Fixed?">
         <p>
            After examining the debug output, if you still believe that the
            problem you are having is caused by BSF, chances are that someone
            else may have already encountered this problem, and perhaps it has
            been fixed. The next step, therefore, may be to try a nightly build
            of BSF to see if the problem has been fixed. Nightly builds for BSF
            are available from the
            <a href="http://www.apache.org/dist/jakarta/jakarta-bsf/nightly/">
            Jakarta web site</a>. While BSF nightly builds are typically quite
            stable and are used by
            <a href="http://www.apache.org/dist/jakarta/gump/latest/">Gump</a>
            to build many other Jakarta projects, these builds should
            nonetheless be treated as experimental. Note that nightly builds
            do not build many of the optional tasks the come with BSF.
            A snapshot of these optional tasks is occasionally uploaded to
            the nightly download
            <a href="http://www.apache.org/dist/jakarta/jakarta-bsf/nightly/optional/">
            area</a>. However, even this snapshot does not contain every
            optional task.
        </p>
      </subsection>

      <subsection name="Has It Been Reported?">
         <p>
            If the current nightly build doesn't resolve your problem, it is
            possible that someone else has reported the issue. It is time to
	    look at the 

	    <!-- (old: http://issues.apache.org/bugzilla/) -->

	    <a href="http://issues.apache.org/jira/browse/BSF">
            Apache Bug Database (jira)</a>.  This system is easy to use, and it will 
            let you search the <a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?mode=hide&amp;requestId=12312131">
    
            <!--    <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=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=BSF&amp;short_desc=&amp;short_desc_type=substring&amp;long_desc=&amp;long_desc_type=substring&amp;bug_file_loc=&amp;bug_file_loc_type=substring&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;order=bugs.bug_id"> -->

            currently open</a> and resolved bugs to see if your problem has
            already been reported. If your problem has been reported, you can
            see whether any of the developers have commented, suggesting
            workarounds, or the reason for the bug, etc. Or you may have
            information to add (see about creating and modifying bug reports
            below), in which case, go right ahead and add the information.
            If you don't have any additional information, you may just want
            to vote for this bug, and perhaps
            add yourself to the <code>CC</code> list to follow the progress
            of this bug.
         </p>
      </subsection>

      <subsection name="Filing a Bug Report">
         <p>
            By this time, you may have decided that there is an unreported
            bug in BSF. You have a few choices at this point. You can send
            an email to the <nobr><code>bsf-user</code></nobr> mailing list
            to see if
            others have encountered your issue and find out how they may
            have worked around it. If after some discussion, you feel it
            is time to create
            a bug report, this is a simple operation in the bug database.
            Please try to provide as much information as possible in order
            to assist the developers in resolving the bug. Please try to enter
            correct values for the various inputs when creating the bug, such
            as which version of BSF you are running, and on which platform,
            etc. Once the bug is created, you can also add attachments to
            the bug report.
         </p>
         <p>
            What information should you include in your bug report? The
            easiest bugs to fix are those that are most easily reproducible,
            so it is really helpful if you can produce a small test case that
            exhibits the problem. In this case, you would attach the build file
            and any other files necessary to reproduce the problem, probably
            packed together in an archive. If you can't produce a test case,
            you should try to include a snippet from your build file and the
            relevant sections from the verbose or debug output from BSF. Try
            to include the header information where BSF states the version,
            the OS and VM information, etc. As debug output is likely to be
            very large, it's best to remove any output that is not
            relevant. Once the bug is entered into the bug database, you
            will be kept informed by email about progress on the bug. If
            you receive email asking for further information, please try to
            respond, as it will aid in the resolution of your bug.
         </p>
      </subsection>

      <subsection name="Asking for an Enhancement">
         <p>
            Sometimes, you may find that BSF just doesn't do what you need it
            to. It isn't a bug, as such, since BSF is working the way it is
            supposed to work. Perhaps it is some additional functionality for
            a task that hasn't been thought of yet, or maybe a completely new
            task. For these situations, you will
            want to raise an <i>enhancement request</i>. Enhancement requests
            are managed using the same Apache Bug Database described above.
            These are just a different type of bug report. If you look in the
            bug database, you will see that one of the severity settings for
            a bug is &quot;Enhancement&quot;. Just fill the bug report in,
            set the severity of the bug to &quot;Enhancement&quot;, and
            state in the description how you would like to have BSF enhanced.
            Again, you should first check whether there are any existing
            enhancment requests that cover your needs. If so, just add your
            vote to these.
         </p>
      </subsection>

      <subsection name="Fixing the Bug">
         <p>
            If you aren't satisfied with just filing a bug report, you can
            try to find the cause of the problem and provide a fix yourself.
            The best way to do that is by working with the latest code from CVS.
            Alternatively, you can work with the source code available from the
            <a href="http://jakarta.apache.org/builds/jakarta-bsf/release/v2.4/src/">
            source distributions</a>. If you
            are going to tackle the problem at this level, you may want to
            discuss some details first on the <nobr><code>bsf-dev</code></nobr>
            mailing list. Once you have a fix for the problem, you may submit
            the fix as a <i>patch</i> to either the
            <nobr><code>bsf-dev</code></nobr> mailing
            list, or enter the bug database as described above and attach the
            patch to the bug report. Using the bug database has the advantage
            of being able to track the progress of your patch.
         </p>
         <p>
            If you have a patch to submit and are sending it to the
            <nobr><code>bsf-dev</code></nobr> mailing list,
            prefix &quot;[PATCH]&quot;
            to your message subject. Please include any relevant bug numbers.
            Patch files should be created with the <nobr><code>-u</code></nobr>
            option of the
            <code>diff</code> or <code>cvs diff</code> command. For
            example:<br></br><br></br>
            <font face="verdana" size="-1">
            diff -u Javac.java.orig Javac.java &gt; javac.diffs<br></br><br></br>
            </font>
            or, if you have source from CVS:<br></br><br></br>
            <font face="verdana" size="-1">
            cvs diff -u Javac.java &gt; javac.diffs<br></br><br></br>
            </font>

           Note: You should give your patch files meaningful names.
           This makes it easier for developers who need to apply a number
           of different patch files.
        </p>
      </subsection>


    </section>

  </body>
</document>
