Commit 7a55deee authored by Emmanuel Bourg's avatar Emmanuel Bourg

Imported Upstream version 8.0.33

parent 0da256a7
......@@ -130,14 +130,9 @@ ${tomcat.source}.
directory outside of the source tree, so that you do not waste your
time re-downloading the libraries.
* WARNING: The default value of base.path property makes the build script
to download libraries required to build Tomcat to the /usr/share/java
directory. On a typical Linux or MacOX system an ordinary user will not
have access to write to this directory. Even if you do have access to
that directory, it is likely not appropriate for you to write there.
On Windows this usually corresponds to the "C:\usr\share\java"
directory, unless Cygwin is used.
* NOTE: The default value of the base.path property configures the build script
to download the libraries required to build Tomcat to the
${user.home}/tomcat-build-libs directory.
* NOTE: Users accessing the Internet through a proxy must use the properties
file to indicate to Ant the proxy configuration.
......
......@@ -127,20 +127,6 @@ PRGDIR=`dirname "$PRG"`
# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
# Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a colon
# as this is used as the separator in the classpath and Java provides no
# mechanism for escaping if the same character appears in the path.
case $CATALINA_HOME in
*:*) echo "Using CATALINA_HOME: $CATALINA_HOME";
echo "Unable to start as CATALINA_HOME contains a colon (:) character";
exit 1;
esac
case $CATALINA_BASE in
*:*) echo "Using CATALINA_BASE: $CATALINA_BASE";
echo "Unable to start as CATALINA_BASE contains a colon (:) character";
exit 1;
esac
# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=
......@@ -160,6 +146,20 @@ if $cygwin; then
[ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a colon
# as this is used as the separator in the classpath and Java provides no
# mechanism for escaping if the same character appears in the path.
case $CATALINA_HOME in
*:*) echo "Using CATALINA_HOME: $CATALINA_HOME";
echo "Unable to start as CATALINA_HOME contains a colon (:) character";
exit 1;
esac
case $CATALINA_BASE in
*:*) echo "Using CATALINA_BASE: $CATALINA_BASE";
echo "Unable to start as CATALINA_BASE contains a colon (:) character";
exit 1;
esac
# For OS400
if $os400; then
# Set job priority to standard for interactive (interactive - 6) by using
......
......@@ -25,7 +25,7 @@
# ----- Version Control Flags -----
version.major=8
version.minor=0
version.build=32
version.build=33
version.patch=0
version.suffix=
......@@ -75,9 +75,7 @@ trydownload.httpusecaches=true
# Please note this path must be absolute, not relative,
# as it is referenced with different working directory
# contexts by the various build scripts.
base.path=/usr/share/java
#base.path=C:/path/to/the/repository
#base.path=/usr/local
base.path=${user.home}/tomcat-build-libs
compile.source=1.7
compile.target=1.7
......@@ -148,10 +146,10 @@ wsdl4j-lib.home=${base.path}/wsdl4j-${wsdl4j-lib.version}
wsdl4j-lib.loc=${base-maven.loc}/wsdl4j/wsdl4j/${wsdl4j-lib.version}/wsdl4j-${wsdl4j-lib.version}.jar
wsdl4j-lib.jar=${wsdl4j-lib.home}/wsdl4j-${wsdl4j-lib.version}.jar
# ----- Eclipse JDT, version 4.4 or later -----#
# ----- Eclipse JDT, version 4.5 or later -----#
# See https://wiki.apache.org/tomcat/JDTCoreBatchCompiler before updating
jdt.version=4.4.2
jdt.release=R-4.4.2-201502041700
jdt.version=4.5
jdt.release=R-4.5-201506032000
jdt.home=${base.path}/ecj-${jdt.version}
jdt.jar=${jdt.home}/ecj-${jdt.version}.jar
# The download will be moved to the archive area eventually. We are taking care of that in advance.
......@@ -159,7 +157,7 @@ jdt.loc.1=http://archive.eclipse.org/eclipse/downloads/drops4/${jdt.release}/ecj
jdt.loc.2=http://download.eclipse.org/eclipse/downloads/drops4/${jdt.release}/ecj-${jdt.version}.jar
# ----- Tomcat native library -----
tomcat-native.version=1.2.4
tomcat-native.version=1.2.5
tomcat-native.home=${base.path}/tomcat-native-${tomcat-native.version}
tomcat-native.tar.gz=${tomcat-native.home}/tomcat-native.tar.gz
tomcat-native.loc.1=${base-tomcat.loc.1}/tomcat-connectors/native/${tomcat-native.version}/source/tomcat-native-${tomcat-native.version}-src.tar.gz
......
......@@ -22,18 +22,23 @@
<!--
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary.
you must define such a user - the username and password are arbitrary. It is
strongly recommended that you do NOT use one of the users in the commented out
section below since they are intended for use with the examples web
application.
-->
<!--
NOTE: The sample user and role entries below are wrapped in a comment
and thus are ignored when reading this file. Do not forget to remove
<!.. ..> that surrounds them.
NOTE: The sample user and role entries below are intended for use with the
examples web application. They are wrapped in a comment and thus are ignored
when reading this file. If you wish to configure these users for use with the
examples web application, do not forget to remove the <!.. ..> that surrounds
them. You will also need to set the passwords to something appropriate.
-->
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
-->
</tomcat-users>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
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.
-->
<xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://tomcat.apache.org/xml"
xmlns:users="http://tomcat.apache.org/xml"
......
......@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.el;
import java.beans.FeatureDescriptor;
......@@ -27,8 +26,7 @@ public class CompositeELResolver extends ELResolver {
static {
Class<?> clazz = null;
try {
clazz =
Class.forName("javax.servlet.jsp.el.ScopedAttributeELResolver");
clazz = Class.forName("javax.servlet.jsp.el.ScopedAttributeELResolver");
} catch (ClassNotFoundException e) {
// Ignore. This is expected if using the EL stand-alone
}
......@@ -61,9 +59,8 @@ public class CompositeELResolver extends ELResolver {
public Object getValue(ELContext context, Object base, Object property) {
context.setPropertyResolved(false);
int sz = this.size;
Object result = null;
for (int i = 0; i < sz; i++) {
result = this.resolvers[i].getValue(context, base, property);
Object result = this.resolvers[i].getValue(context, base, property);
if (context.isPropertyResolved()) {
return result;
}
......@@ -79,10 +76,8 @@ public class CompositeELResolver extends ELResolver {
Class<?>[] paramTypes, Object[] params) {
context.setPropertyResolved(false);
int sz = this.size;
Object obj;
for (int i = 0; i < sz; i++) {
obj = this.resolvers[i].invoke(context, base, method, paramTypes,
params);
Object obj = this.resolvers[i].invoke(context, base, method, paramTypes, params);
if (context.isPropertyResolved()) {
return obj;
}
......@@ -94,18 +89,15 @@ public class CompositeELResolver extends ELResolver {
public Class<?> getType(ELContext context, Object base, Object property) {
context.setPropertyResolved(false);
int sz = this.size;
Class<?> type;
for (int i = 0; i < sz; i++) {
type = this.resolvers[i].getType(context, base, property);
Class<?> type = this.resolvers[i].getType(context, base, property);
if (context.isPropertyResolved()) {
if (SCOPED_ATTRIBUTE_EL_RESOLVER != null &&
SCOPED_ATTRIBUTE_EL_RESOLVER.isAssignableFrom(
resolvers[i].getClass())) {
SCOPED_ATTRIBUTE_EL_RESOLVER.isAssignableFrom(resolvers[i].getClass())) {
// Special case since
// javax.servlet.jsp.el.ScopedAttributeELResolver will
// always return Object.class for type
Object value =
resolvers[i].getValue(context, base, property);
Object value = resolvers[i].getValue(context, base, property);
if (value != null) {
return value.getClass();
}
......@@ -117,8 +109,7 @@ public class CompositeELResolver extends ELResolver {
}
@Override
public void setValue(ELContext context, Object base, Object property,
Object value) {
public void setValue(ELContext context, Object base, Object property, Object value) {
context.setPropertyResolved(false);
int sz = this.size;
for (int i = 0; i < sz; i++) {
......@@ -133,9 +124,8 @@ public class CompositeELResolver extends ELResolver {
public boolean isReadOnly(ELContext context, Object base, Object property) {
context.setPropertyResolved(false);
int sz = this.size;
boolean readOnly = false;
for (int i = 0; i < sz; i++) {
readOnly = this.resolvers[i].isReadOnly(context, base, property);
boolean readOnly = this.resolvers[i].isReadOnly(context, base, property);
if (context.isPropertyResolved()) {
return readOnly;
}
......@@ -150,12 +140,11 @@ public class CompositeELResolver extends ELResolver {
@Override
public Class<?> getCommonPropertyType(ELContext context, Object base) {
Class<?> commonType = null;
int sz = this.size;
Class<?> commonType = null, type = null;
for (int i = 0; i < sz; i++) {
type = this.resolvers[i].getCommonPropertyType(context, base);
if (type != null &&
(commonType == null || commonType.isAssignableFrom(type))) {
Class<?> type = this.resolvers[i].getCommonPropertyType(context, base);
if (type != null && (commonType == null || commonType.isAssignableFrom(type))) {
commonType = type;
}
}
......@@ -166,9 +155,8 @@ public class CompositeELResolver extends ELResolver {
public Object convertToType(ELContext context, Object obj, Class<?> type) {
context.setPropertyResolved(false);
int sz = this.size;
Object result = null;
for (int i = 0; i < sz; i++) {
result = this.resolvers[i].convertToType(context, obj, type);
Object result = this.resolvers[i].convertToType(context, obj, type);
if (context.isPropertyResolved()) {
return result;
}
......@@ -192,8 +180,7 @@ public class CompositeELResolver extends ELResolver {
private FeatureDescriptor next;
public FeatureIterator(ELContext context, Object base,
ELResolver[] resolvers, int size) {
public FeatureIterator(ELContext context, Object base, ELResolver[] resolvers, int size) {
this.context = context;
this.base = base;
this.resolvers = resolvers;
......@@ -205,8 +192,7 @@ public class CompositeELResolver extends ELResolver {
private void guaranteeIterator() {
while (this.itr == null && this.idx < this.size) {
this.itr = this.resolvers[this.idx].getFeatureDescriptors(
this.context, this.base);
this.itr = this.resolvers[this.idx].getFeatureDescriptors(this.context, this.base);
this.idx++;
}
}
......@@ -231,8 +217,9 @@ public class CompositeELResolver extends ELResolver {
@Override
public FeatureDescriptor next() {
if (!hasNext())
if (!hasNext()) {
throw new NoSuchElementException();
}
FeatureDescriptor result = this.next;
this.next = null;
return result;
......@@ -244,5 +231,4 @@ public class CompositeELResolver extends ELResolver {
throw new UnsupportedOperationException();
}
}
}
......@@ -191,8 +191,23 @@ public class ImportHandler {
private Class<?> findClass(String name, boolean throwException) {
Class<?> clazz;
ClassLoader cl = Thread.currentThread().getContextClassLoader();
String path = name.replace('.', '/') + ".class";
try {
clazz = cl.loadClass(name);
/* Given that findClass() has to be called for every imported
* package and that getResource() is a lot faster then loadClass()
* for resources that don't exist, the overhead of the getResource()
* for the case where the class does exist is a lot less than the
* overhead we save by not calling loadClass().
*/
if (cl.getResource(path) == null) {
return null;
}
} catch (ClassCircularityError cce) {
// May happen under a security manager. Ignore it and try loading
// the class normally.
}
try {
clazz = cl.loadClass(name);
} catch (ClassNotFoundException e) {
return null;
}
......
......@@ -58,6 +58,13 @@ public interface ServletContext {
*/
public static final String ORDERED_LIBS = "javax.servlet.context.orderedLibs";
/**
* Return the main path associated with this context.
*
* @return The main context path
*
* @since Servlet 2.5
*/
public String getContextPath();
/**
......@@ -560,8 +567,7 @@ public interface ServletContext {
* use this method.
* @since Servlet 3.0
*/
public ServletRegistration.Dynamic addServlet(String servletName,
String className);
public ServletRegistration.Dynamic addServlet(String servletName, String className);
/**
* Register a servlet instance for use in this ServletContext.
......@@ -579,14 +585,15 @@ public interface ServletContext {
* use this method.
* @since Servlet 3.0
*/
public ServletRegistration.Dynamic addServlet(String servletName,
Servlet servlet);
public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet);
/**
* TODO SERVLET3 - Add comments
* @param servletName TODO
* @param servletClass TODO
* @return TODO
* Add servlet to context.
* @param servletName Name of servlet to add
* @param servletClass Class of servlet to add
* @return <code>null</code> if the servlet has already been fully defined,
* else a {@link javax.servlet.ServletRegistration.Dynamic} object
* that can be used to further configure the servlet
* @throws IllegalStateException
* If the context has already been initialised
* @throws UnsupportedOperationException If called from a
......@@ -655,10 +662,12 @@ public interface ServletContext {
public Map<String, ? extends ServletRegistration> getServletRegistrations();
/**
* TODO SERVLET3 - Add comments
* @param filterName TODO
* @param className TODO
* @return TODO
* Add filter to context.
* @param filterName Name of filter to add
* @param className Name of filter class
* @return <code>null</code> if the filter has already been fully defined,
* else a {@link javax.servlet.FilterRegistration.Dynamic} object
* that can be used to further configure the filter
* @throws UnsupportedOperationException If called from a
* {@link ServletContextListener#contextInitialized(ServletContextEvent)}
* method of a {@link ServletContextListener} that was not defined in a
......@@ -670,14 +679,15 @@ public interface ServletContext {
* If the context has already been initialised
* @since Servlet 3.0
*/
public FilterRegistration.Dynamic addFilter(String filterName,
String className);
public FilterRegistration.Dynamic addFilter(String filterName, String className);
/**
* TODO SERVLET3 - Add comments
* @param filterName TODO
* @param filter TODO
* @return TODO
* Add filter to context.
* @param filterName Name of filter to add
* @param filter Filter to add
* @return <code>null</code> if the filter has already been fully defined,
* else a {@link javax.servlet.FilterRegistration.Dynamic} object
* that can be used to further configure the filter
* @throws UnsupportedOperationException If called from a
* {@link ServletContextListener#contextInitialized(ServletContextEvent)}
* method of a {@link ServletContextListener} that was not defined in a
......@@ -692,10 +702,12 @@ public interface ServletContext {
public FilterRegistration.Dynamic addFilter(String filterName, Filter filter);
/**
* TODO SERVLET3 - Add comments
* @param filterName TODO
* @param filterClass TODO
* @return TODO
* Add filter to context.
* @param filterName Name of filter to add
* @param filterClass Class of filter to add
* @return <code>null</code> if the filter has already been fully defined,
* else a {@link javax.servlet.FilterRegistration.Dynamic} object
* that can be used to further configure the filter
* @throws UnsupportedOperationException If called from a
* {@link ServletContextListener#contextInitialized(ServletContextEvent)}
* method of a {@link ServletContextListener} that was not defined in a
......@@ -725,8 +737,7 @@ public interface ServletContext {
* @throws ServletException TODO
* @since Servlet 3.
*/
public <T extends Filter> T createFilter(Class<T> c)
throws ServletException;
public <T extends Filter> T createFilter(Class<T> c) throws ServletException;
/**
* TODO SERVLET3 - Add comments
......@@ -770,8 +781,9 @@ public interface ServletContext {
public SessionCookieConfig getSessionCookieConfig();
/**
* TODO SERVLET3 - Add comments
* @param sessionTrackingModes TODO
* Configures the available session tracking modes for this web application.
* @param sessionTrackingModes The session tracking modes to use for this
* web application
* @throws IllegalArgumentException
* If sessionTrackingModes specifies
* {@link SessionTrackingMode#SSL} in combination with any other
......@@ -791,8 +803,15 @@ public interface ServletContext {
Set<SessionTrackingMode> sessionTrackingModes);
/**
* TODO SERVLET3 - Add comments
* @return TODO
* Obtains the default session tracking modes for this web application.
* By default {@link SessionTrackingMode#URL} is always supported, {@link
* SessionTrackingMode#COOKIE} is supported unless the <code>cookies</code>
* attribute has been set to <code>false</code> for the context and {@link
* SessionTrackingMode#SSL} is supported if at least one of the connectors
* used by this context has the attribute <code>secure</code> set to
* <code>true</code>.
* @return The set of default session tracking modes for this web
* application
* @throws UnsupportedOperationException If called from a
* {@link ServletContextListener#contextInitialized(ServletContextEvent)}
* method of a {@link ServletContextListener} that was not defined in a
......@@ -805,8 +824,10 @@ public interface ServletContext {
public Set<SessionTrackingMode> getDefaultSessionTrackingModes();
/**
* TODO SERVLET3 - Add comments
* @return TODO
* Obtains the currently enabled session tracking modes for this web
* application.
* @return The value supplied via {@link #setSessionTrackingModes(Set)} if
* one was previously set, else return the defaults
* @throws UnsupportedOperationException If called from a
* {@link ServletContextListener#contextInitialized(ServletContextEvent)}
* method of a {@link ServletContextListener} that was not defined in a
......
......@@ -35,8 +35,18 @@ import javax.servlet.jsp.PageContext;
*/
public class ScopedAttributeELResolver extends ELResolver {
public ScopedAttributeELResolver() {
super();
// Indicates if a performance short-cut is available
private static final Class<?> AST_IDENTIFIER_KEY;
static {
Class<?> key = null;
try {
key = Class.forName("org.apache.el.parser.AstIdentifier");
} catch (Exception e) {
// Ignore: Expected if not running on Tomcat. Not a problem since
// this just allows a short-cut.
}
AST_IDENTIFIER_KEY = key;
}
@Override
......@@ -51,15 +61,30 @@ public class ScopedAttributeELResolver extends ELResolver {
context.setPropertyResolved(base, property);
if (property != null) {
String key = property.toString();
PageContext page = (PageContext) context
.getContext(JspContext.class);
PageContext page = (PageContext) context.getContext(JspContext.class);
result = page.findAttribute(key);
if (result == null) {
boolean resolveClass = true;
// Performance short-cut available when running on Tomcat
if (AST_IDENTIFIER_KEY != null) {
// Tomcat will set this key to Boolean.TRUE if the
// identifier is a stand-alone identifier (i.e.
// identifier) rather than part of an AstValue (i.e.
// identifier.something). Imports do not need to be
// checked if this is a stand-alone identifier
Boolean value = (Boolean) context.getContext(AST_IDENTIFIER_KEY);
if (value != null && value.booleanValue()) {
resolveClass = false;
}
}
// This might be the name of an imported class
ImportHandler importHandler = context.getImportHandler();
if (importHandler != null) {
Class<?> clazz = importHandler.resolveClass(key);
Class<?> clazz = null;
if (resolveClass) {
clazz = importHandler.resolveClass(key);
}
if (clazz != null) {
result = new ELClass(clazz);
}
......@@ -86,8 +111,7 @@ public class ScopedAttributeELResolver extends ELResolver {
}
@Override
public Class<Object> getType(ELContext context, Object base,
Object property) {
public Class<Object> getType(ELContext context, Object base, Object property) {
if (context == null) {
throw new NullPointerException();
}
......@@ -101,8 +125,7 @@ public class ScopedAttributeELResolver extends ELResolver {
}
@Override
public void setValue(ELContext context, Object base, Object property,
Object value) {
public void setValue(ELContext context, Object base, Object property, Object value) {
if (context == null) {
throw new NullPointerException();
}
......@@ -111,8 +134,7 @@ public class ScopedAttributeELResolver extends ELResolver {
context.setPropertyResolved(base, property);
if (property != null) {
String key = property.toString();
PageContext page = (PageContext) context
.getContext(JspContext.class);
PageContext page = (PageContext) context.getContext(JspContext.class);
int scope = page.getAttributesScope(key);
if (scope != 0) {
page.setAttribute(key, value, scope);
......@@ -137,8 +159,7 @@ public class ScopedAttributeELResolver extends ELResolver {
}
@Override
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
Object base) {
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
PageContext ctxt = (PageContext) context.getContext(JspContext.class);
List<FeatureDescriptor> list = new ArrayList<>();
......
......@@ -17,16 +17,16 @@
package javax.websocket;
public final class SendResult {
private Throwable exception;
private boolean ok = true;
private final Throwable exception;
private final boolean ok;
public SendResult(Throwable exception) {
this.exception = exception;
this.ok = false;
this.ok = (exception == null);
}
public SendResult() {
// NO-OP
this (null);
}
public Throwable getException() {
......
......@@ -801,7 +801,7 @@ public interface Context extends Container, ContextBind {
*
* @param listener Java class name of an InstanceListener class
*
* @deprecated Will be removed in 9.0.x onwards
* @deprecated Will be removed in 8.5.x onwards
*/
@Deprecated
public void addInstanceListener(String listener);
......@@ -991,7 +991,7 @@ public interface Context extends Container, ContextBind {
* Return the set of InstanceListener classes that will be added to
* newly created Wrappers automatically.
*
* @deprecated Will be removed in 9.0.x onwards
* @deprecated Will be removed in 8.5.x onwards
*/
@Deprecated
public String[] findInstanceListeners();
......@@ -1221,7 +1221,7 @@ public interface Context extends Container, ContextBind {
*
* @param listener Class name of an InstanceListener class to be removed
*
* @deprecated Will be removed in 9.0.x onwards
* @deprecated Will be removed in 8.5.x onwards
*/
@Deprecated
public void removeInstanceListener(String listener);
......
......@@ -309,9 +309,9 @@ public final class Globals {
public static final String JASPER_XML_BLOCK_EXTERNAL_INIT_PARAM =
"org.apache.jasper.XML_BLOCK_EXTERNAL";
@Deprecated // Will be removed in Tomcat 9.0.x
@Deprecated // Will be removed in Tomcat 8.5.x
public static final boolean IS_ORACLE_JVM = JreVendor.IS_ORACLE_JVM;
@Deprecated // Will be removed in Tomcat 9.0.x
@Deprecated // Will be removed in Tomcat 8.5.x
public static final boolean IS_IBM_JVM = JreVendor.IS_IBM_JVM;
}
......@@ -34,7 +34,7 @@ import javax.servlet.ServletResponse;
*
* @author Craig R. McClanahan
*
* @deprecated Will be removed in 9.0.x onwards
* @deprecated Will be removed in 8.5.x onwards
*/
@Deprecated
public final class InstanceEvent extends EventObject {
......
......@@ -26,7 +26,7 @@ package org.apache.catalina;
*
* @author Craig R. McClanahan
*
* @deprecated Will be removed in 9.0.x onwards
* @deprecated Will be removed in 8.5.x onwards
*/
@Deprecated
public interface InstanceListener {
......
......@@ -35,7 +35,7 @@ public enum LifecycleState {
DESTROYED(false, Lifecycle.AFTER_DESTROY_EVENT),
FAILED(false, null),
/**
* @deprecated Unused. Will be removed in Tomcat 9.0.x. The state transition
* @deprecated Unused. Will be removed in Tomcat 8.5.x. The state transition
* checking in {@link org.apache.catalina.util.LifecycleBase}
* makes it impossible to use this state. The intended behaviour
* can be obtained by setting the state to
......@@ -45,7 +45,7 @@ public enum LifecycleState {
@Deprecated
MUST_STOP(true, null),
/**
* @deprecated Unused. Will be removed in Tomcat 9.0.x. The state transition
* @deprecated Unused. Will be removed in Tomcat 8.5.x. The state transition
* checking in {@link org.apache.catalina.util.LifecycleBase}
* makes it impossible to use this state. The intended behaviour
* can be obtained by implementing {@link Lifecycle.SingleUse}.
......