blob: cd849eb4c63a0cdb432e11279857271250a2ce29 [file] [log] [blame]
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed 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.
*/
package javax.servlet.jsp.tagext;
/**
* The auxiliary interface of a Tag, IterationTag or BodyTag tag
* handler that wants additional hooks for managing resources.
*
* <p>This interface provides two new methods: doCatch(Throwable)
* and doFinally(). The prototypical invocation is as follows:
*
* <pre>
* h = get a Tag(); // get a tag handler, perhaps from pool
*
* h.setPageContext(pc); // initialize as desired
* h.setParent(null);
* h.setFoo("foo");
*
* // tag invocation protocol; see Tag.java
* try {
* doStartTag()...
* ....
* doEndTag()...
* } catch (Throwable t) {
* // react to exceptional condition
* h.doCatch(t);
* } finally {
* // restore data invariants and release per-invocation resources
* h.doFinally();
* }
*
* ... other invocations perhaps with some new setters
* ...
* h.release(); // release long-term resources
* </pre>
*/
public interface TryCatchFinally {
/**
* Invoked if a Throwable occurs while evaluating the BODY
* inside a tag or in any of the following methods:
* Tag.doStartTag(), Tag.doEndTag(),
* IterationTag.doAfterBody() and BodyTag.doInitBody().
*
* <p>This method is not invoked if the Throwable occurs during
* one of the setter methods.
*
* <p>This method may throw an exception (the same or a new one)
* that will be propagated further up the nest chain. If an exception
* is thrown, doFinally() will be invoked.
*
* <p>This method is intended to be used to respond to an exceptional
* condition.
*
* @param t The throwable exception navigating through this tag.
* @throws Throwable if the exception is to be rethrown further up
* the nest chain.
*/
void doCatch(Throwable t) throws Throwable;
/**
* Invoked in all cases after doEndTag() for any class implementing
* Tag, IterationTag or BodyTag. This method is invoked even if
* an exception has occurred in the BODY of the tag,
* or in any of the following methods:
* Tag.doStartTag(), Tag.doEndTag(),
* IterationTag.doAfterBody() and BodyTag.doInitBody().
*
* <p>This method is not invoked if the Throwable occurs during
* one of the setter methods.
*
* <p>This method should not throw an Exception.
*
* <p>This method is intended to maintain per-invocation data
* integrity and resource management actions.
*/
void doFinally();
}