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/08/25 20:36:48 UTC

[tomcat] branch main updated: Add available flag for UserDatabase

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 459cbf6  Add available flag for UserDatabase
459cbf6 is described below

commit 459cbf6bd96a0488f205f090efba34520186066e
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 c13b706..477be7f 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