This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new ae9f1d6  Log warning if a listener is incorrectly placed
ae9f1d6 is described below

commit ae9f1d6821c5c3364b86a140d962f1504f243ccd
Author: Michael Osipov <micha...@apache.org>
AuthorDate: Mon Nov 8 20:39:09 2021 +0100

    Log warning if a listener is incorrectly placed
    
    Some listeners are intented to be nested inside a Server element only.
    If a listener is misplaced a warning message is logged.
---
 java/org/apache/catalina/core/AprLifecycleListener.java           | 4 ++++
 .../org/apache/catalina/core/JreMemoryLeakPreventionListener.java | 4 ++++
 java/org/apache/catalina/core/LocalStrings.properties             | 2 ++
 .../apache/catalina/mbeans/GlobalResourcesLifecycleListener.java  | 4 ++++
 java/org/apache/catalina/mbeans/LocalStrings.properties           | 3 +++
 java/org/apache/catalina/security/LocalStrings.properties         | 2 ++
 java/org/apache/catalina/security/SecurityListener.java           | 4 ++++
 java/org/apache/catalina/startup/LocalStrings.properties          | 1 +
 java/org/apache/catalina/startup/VersionLoggerListener.java       | 4 ++++
 java/org/apache/catalina/storeconfig/LocalStrings.properties      | 2 +-
 .../apache/catalina/storeconfig/StoreConfigLifecycleListener.java | 8 +++++---
 webapps/docs/changelog.xml                                        | 4 ++++
 12 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/java/org/apache/catalina/core/AprLifecycleListener.java 
b/java/org/apache/catalina/core/AprLifecycleListener.java
index a3bd1db..1c72b30 100644
--- a/java/org/apache/catalina/core/AprLifecycleListener.java
+++ b/java/org/apache/catalina/core/AprLifecycleListener.java
@@ -121,6 +121,10 @@ public class AprLifecycleListener implements 
LifecycleListener {
 
         if (Lifecycle.BEFORE_INIT_EVENT.equals(event.getType())) {
             synchronized (lock) {
+                if (!(event.getLifecycle() instanceof Server)) {
+                    log.warn(sm.getString("listener.notServer",
+                            event.getLifecycle().getClass().getSimpleName()));
+                }
                 init();
                 for (String msg : initInfoLogMessages) {
                     log.info(msg);
diff --git a/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java 
b/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
index 5163623..baa34c2 100644
--- a/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
+++ b/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
@@ -209,6 +209,10 @@ public class JreMemoryLeakPreventionListener implements 
LifecycleListener {
     public void lifecycleEvent(LifecycleEvent event) {
         // Initialise these classes when Tomcat starts
         if (Lifecycle.BEFORE_INIT_EVENT.equals(event.getType())) {
+            if (!(event.getLifecycle() instanceof Server)) {
+                log.warn(sm.getString("listener.notServer",
+                        event.getLifecycle().getClass().getSimpleName()));
+            }
 
             /*
              * First call to this loads all drivers visible to the current 
class
diff --git a/java/org/apache/catalina/core/LocalStrings.properties 
b/java/org/apache/catalina/core/LocalStrings.properties
index 03e9351..2ad9cc5 100644
--- a/java/org/apache/catalina/core/LocalStrings.properties
+++ b/java/org/apache/catalina/core/LocalStrings.properties
@@ -147,6 +147,8 @@ jreLeakListener.jarUrlConnCacheFail=Failed to disable Jar 
URL connection caching
 jreLeakListener.ldapPoolManagerFail=Failed to trigger creation of the 
com.sun.jndi.ldap.LdapPoolManager class during Tomcat start to prevent possible 
memory leaks. This is expected on non-Sun JVMs.
 jreLeakListener.xmlParseFail=Error whilst attempting to prevent memory leaks 
during XML parsing
 
+listener.notServer=This listener must only be nested within Server elements, 
but is in [{0}].
+
 naming.addEnvEntry=Adding environment entry [{0}]
 naming.addResourceEnvRef=Adding resource env ref [{0}]
 naming.bindFailed=Failed to bind object: [{0}]
diff --git 
a/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java 
b/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
index d6d7506..4f2f2dc 100644
--- a/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
+++ b/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
@@ -74,6 +74,10 @@ public class GlobalResourcesLifecycleListener implements 
LifecycleListener {
     public void lifecycleEvent(LifecycleEvent event) {
 
         if (Lifecycle.START_EVENT.equals(event.getType())) {
+            if (!(event.getLifecycle() instanceof Server)) {
+                log.warn(sm.getString("listener.notServer",
+                        event.getLifecycle().getClass().getSimpleName()));
+            }
             component = event.getLifecycle();
             createMBeans();
         } else if (Lifecycle.STOP_EVENT.equals(event.getType())) {
diff --git a/java/org/apache/catalina/mbeans/LocalStrings.properties 
b/java/org/apache/catalina/mbeans/LocalStrings.properties
index 3a844a0..529a941 100644
--- a/java/org/apache/catalina/mbeans/LocalStrings.properties
+++ b/java/org/apache/catalina/mbeans/LocalStrings.properties
@@ -20,6 +20,7 @@ globalResources.createError.userDatabase=Cannot create 
UserDatabase MBean for re
 globalResources.createError.userDatabase.group=Cannot create Group MBean for 
group [{0}]
 globalResources.createError.userDatabase.role=Cannot create Role MBean for 
role [{0}]
 globalResources.createError.userDatabase.user=Cannot create User MBean for 
user [{0}]
+globalResources.notServer=This listener must only be nested within Server 
elements, but is in [{0}].
 globalResources.noNamingContext=No global naming context defined for server
 globalResources.userDatabaseCreateError=Exception creating UserDatabase MBeans 
for [{0}]
 
@@ -32,6 +33,8 @@ jmxRemoteLifecycleListener.invalidSSLConfiguration=SSL 
configuration error
 jmxRemoteLifecycleListener.invalidURL=The JMX Service URL requested for the 
[{0}] server, [{1}], was invalid
 jmxRemoteLifecycleListener.start=The JMX Remote Listener has configured the 
registry on port [{0}] and the server on port [{1}] for the [{2}] server
 
+listener.notServer=This listener must only be nested within Server elements, 
but is in [{0}].
+
 mBean.attributeNotFound=Cannot find attribute [{0}]
 mBean.nullAttribute=Attribute is null
 mBean.nullName=Attribute name is null
diff --git a/java/org/apache/catalina/security/LocalStrings.properties 
b/java/org/apache/catalina/security/LocalStrings.properties
index b97a018..1c604fd 100644
--- a/java/org/apache/catalina/security/LocalStrings.properties
+++ b/java/org/apache/catalina/security/LocalStrings.properties
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+listener.notServer=This listener must only be nested within Server elements, 
but is in [{0}].
+
 SecurityListener.checkUmaskFail=Start attempted with umask setting of [{0}]. 
Running Tomcat without a umask at least as restrictive as [{1}] has been 
blocked by the Lifecycle listener org.apache.catalina.security.SecurityListener 
(usually configured in CATALINA_BASE/conf/server.xml)
 SecurityListener.checkUmaskNone=No umask setting was found in system property 
[{0}]. However, it appears Tomcat is running on a platform that supports umask. 
The system property is typically set in CATALINA_HOME/bin/catalina.sh. The 
Lifecycle listener org.apache.catalina.security.SecurityListener (usually 
configured in CATALINA_BASE/conf/server.xml) expects a umask at least as 
restrictive as [{1}]
 SecurityListener.checkUmaskParseFail=Failed to parse value [{0}] as a valid 
umask.
diff --git a/java/org/apache/catalina/security/SecurityListener.java 
b/java/org/apache/catalina/security/SecurityListener.java
index cee5ae0..6df8412 100644
--- a/java/org/apache/catalina/security/SecurityListener.java
+++ b/java/org/apache/catalina/security/SecurityListener.java
@@ -65,6 +65,10 @@ public class SecurityListener implements LifecycleListener {
     public void lifecycleEvent(LifecycleEvent event) {
         // This is the earliest event in Lifecycle
         if (event.getType().equals(Lifecycle.BEFORE_INIT_EVENT)) {
+            if (!(event.getLifecycle() instanceof Server)) {
+                log.warn(sm.getString("listener.notServer",
+                        event.getLifecycle().getClass().getSimpleName()));
+            }
             doChecks();
         }
     }
diff --git a/java/org/apache/catalina/startup/LocalStrings.properties 
b/java/org/apache/catalina/startup/LocalStrings.properties
index 27c7c9b..2f3cbde 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -144,6 +144,7 @@ hostConfig.undeploy=Undeploying context [{0}]
 hostConfig.undeployVersion=Undeploying old version of context [{0}] which has 
no active session
 
 listener.createFailed=Optional listener [{0}] is not enabled
+listener.notServer=This listener must only be nested within Server elements, 
but is in [{0}].
 
 passwdUserDatabase.readFail=Failed to obtain a complete set of users from 
/etc/passwd
 
diff --git a/java/org/apache/catalina/startup/VersionLoggerListener.java 
b/java/org/apache/catalina/startup/VersionLoggerListener.java
index 6ca2ea8..472cd46 100644
--- a/java/org/apache/catalina/startup/VersionLoggerListener.java
+++ b/java/org/apache/catalina/startup/VersionLoggerListener.java
@@ -84,6 +84,10 @@ public class VersionLoggerListener implements 
LifecycleListener {
     @Override
     public void lifecycleEvent(LifecycleEvent event) {
         if (Lifecycle.BEFORE_INIT_EVENT.equals(event.getType())) {
+            if (!(event.getLifecycle() instanceof Server)) {
+                log.warn(sm.getString("listener.notServer",
+                        event.getLifecycle().getClass().getSimpleName()));
+            }
             log();
         }
     }
diff --git a/java/org/apache/catalina/storeconfig/LocalStrings.properties 
b/java/org/apache/catalina/storeconfig/LocalStrings.properties
index fdf160c..4067b86 100644
--- a/java/org/apache/catalina/storeconfig/LocalStrings.properties
+++ b/java/org/apache/catalina/storeconfig/LocalStrings.properties
@@ -34,7 +34,7 @@ standardContextSF.storeContext=Store context [{0}] 
configuration separately at p
 standardContextSF.storeContextWithBackup=Store context [{0}] configuration 
separately with backup at path [{1}]
 
 storeConfigListener.loadError=Error loading StoreConfig
-storeConfigListener.notServer=The listener was added to component other than 
the Server and will therefore be ignored
+storeConfigListener.notServer=This listener must only be nested within Server 
elements, but is in [{0}], ignoring it.
 storeConfigListener.registerError=Error registering StoreConfig MBean
 
 storeFactory.noDescriptor=Descriptor for element [{0}].[{1}] not configured
diff --git 
a/java/org/apache/catalina/storeconfig/StoreConfigLifecycleListener.java 
b/java/org/apache/catalina/storeconfig/StoreConfigLifecycleListener.java
index a3c7e6d..a55c8c9 100644
--- a/java/org/apache/catalina/storeconfig/StoreConfigLifecycleListener.java
+++ b/java/org/apache/catalina/storeconfig/StoreConfigLifecycleListener.java
@@ -32,8 +32,9 @@ import org.apache.tomcat.util.res.StringManager;
 
 /**
  * Loads and registers a StoreConfig MBean with the name
- * <i>Catalina:type=StoreConfig</i>. This listener should only be used with a
- * {@link Server}.
+ * <i>Catalina:type=StoreConfig</i>.
+ * <p>
+ * This listener must only be nested within {@link Server} elements.
  */
 public class StoreConfigLifecycleListener implements LifecycleListener {
 
@@ -64,7 +65,8 @@ public class StoreConfigLifecycleListener implements 
LifecycleListener {
             if (event.getSource() instanceof Server) {
                 createMBean((Server) event.getSource());
             } else {
-                log.warn(sm.getString("storeConfigListener.notServer"));
+                log.warn(sm.getString("storeConfigListener.notServer",
+                        event.getLifecycle().getClass().getSimpleName()));
             }
         } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) {
             if (oname != null) {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index a271d97..cf41f56 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -121,6 +121,10 @@
         This initial implementation allows control over whether or not a
         resource is cached. (markt)
       </add>
+      <update>
+        Log warning if a listener is not nested inside a Server element
+        although it must have been. (michaelo)
+      </update>
     </changelog>
   </subsection>
   <subsection name="Coyote">

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to