You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2021/09/01 11:47:49 UTC

[tomcat] 03/16: Add available flag for UserDatabase

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

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

commit 1e50c19b5f5164d4fbb38616af4c5548e44700f8
Author: remm <re...@apache.org>
AuthorDate: Wed Aug 25 22:36:17 2021 +0200

    Add available flag for UserDatabase
    
    Also avoid loading the whole database as MBeans, the behavior is fancy
    but only makes sense for a memory user database.
---
 java/org/apache/catalina/UserDatabase.java         | 22 ++++++++++++++++++++++
 .../mbeans/GlobalResourcesLifecycleListener.java   |  5 +++++
 .../apache/catalina/realm/UserDatabaseRealm.java   |  6 ++++++
 3 files changed, 33 insertions(+)

diff --git a/java/org/apache/catalina/UserDatabase.java b/java/org/apache/catalina/UserDatabase.java
index 9242170..713cc1d 100644
--- a/java/org/apache/catalina/UserDatabase.java
+++ b/java/org/apache/catalina/UserDatabase.java
@@ -198,4 +198,26 @@ public interface UserDatabase {
     public default void backgroundProcess() {
         // NO-OP by default
     }
+
+
+    /**
+     * Is the database available.
+     *
+     * @return true
+     */
+    public default boolean isAvailable() {
+        return true;
+    }
+
+
+    /**
+     * Is the database data loaded on demand. This is used to avoid eager
+     * loading of the full database data, for example for JMX registration of
+     * all objects.
+     *
+     * @return false
+     */
+    public default boolean isSparse() {
+        return false;
+    }
 }
diff --git a/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java b/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
index a86b486..bca1ed7 100644
--- a/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
+++ b/java/org/apache/catalina/mbeans/GlobalResourcesLifecycleListener.java
@@ -168,6 +168,11 @@ public class GlobalResourcesLifecycleListener implements LifecycleListener {
             throw new IllegalArgumentException(sm.getString("globalResources.createError.userDatabase", name), e);
         }
 
+        if (database.isSparse()) {
+            // Avoid loading all the database as mbeans
+            return;
+        }
+
         // Create the MBeans for each defined Role
         Iterator<Role> roles = database.getRoles();
         while (roles.hasNext()) {
diff --git a/java/org/apache/catalina/realm/UserDatabaseRealm.java b/java/org/apache/catalina/realm/UserDatabaseRealm.java
index e76adbd..d98115f 100644
--- a/java/org/apache/catalina/realm/UserDatabaseRealm.java
+++ b/java/org/apache/catalina/realm/UserDatabaseRealm.java
@@ -231,6 +231,12 @@ public class UserDatabaseRealm extends RealmBase {
     }
 
 
+    @Override
+    public boolean isAvailable() {
+        return (database == null) ? false : database.isAvailable();
+    }
+
+
     public static final class UserDatabasePrincipal extends GenericPrincipal {
         private static final long serialVersionUID = 1L;
         private final transient User user;

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