You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2019/12/07 22:30:44 UTC

[tomcat] 12/14: Align with 8.5.x to aid back-ports

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

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

commit 11ed237be6c27e035c00cd38c55e398789f2c7ac
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Sat Dec 7 20:58:03 2019 +0000

    Align with 8.5.x to aid back-ports
---
 java/org/apache/catalina/Manager.java              |  43 +++---
 .../catalina/session/LocalStrings.properties       |   1 +
 .../catalina/session/LocalStrings_fr.properties    |   1 +
 .../catalina/session/LocalStrings_ja.properties    |   1 +
 .../catalina/session/LocalStrings_ko.properties    |   1 +
 .../catalina/session/LocalStrings_zh_CN.properties |   1 +
 java/org/apache/catalina/session/ManagerBase.java  | 169 ++++++++++-----------
 7 files changed, 114 insertions(+), 103 deletions(-)

diff --git a/java/org/apache/catalina/Manager.java b/java/org/apache/catalina/Manager.java
index 8322f25..3f02f6e 100644
--- a/java/org/apache/catalina/Manager.java
+++ b/java/org/apache/catalina/Manager.java
@@ -14,15 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
 package org.apache.catalina;
 
-
 import java.beans.PropertyChangeListener;
 import java.io.IOException;
 
-
 /**
  * A <b>Manager</b> manages the pool of Sessions that are associated with a
  * particular Container.  Different Manager implementations may support
@@ -43,12 +39,12 @@ import java.io.IOException;
  */
 public interface Manager {
 
-
     // ------------------------------------------------------------- Properties
 
-
     /**
-     * Return the Container with which this Manager is associated.
+     * Get the Container with which this Manager is associated.
+     *
+     * @return The associated Container
      */
     public Container getContainer();
 
@@ -71,7 +67,7 @@ public interface Manager {
      * this Manager.
      *
      * @deprecated Ignored. {@link Context#getDistributable()} always takes
-     *             precedence. Will be removed in Tomcat 9.0.x.
+     *             precedence. Will be removed in Tomcat 8.5.x.
      */
     @Deprecated
     public boolean getDistributable();
@@ -85,7 +81,7 @@ public interface Manager {
      * @param distributable The new distributable flag
      *
      * @deprecated Ignored. {@link Context#getDistributable()} always takes
-     *             precedence. Will be removed in Tomcat 9.0.x.
+     *             precedence. Will be removed in Tomcat 8.5.x.
      */
     @Deprecated
     public void setDistributable(boolean distributable);
@@ -104,7 +100,7 @@ public interface Manager {
      * for Sessions created by this Manager.
      *
      * @deprecated Ignored. {@link Context#getSessionTimeout()} always takes
-     *             precedence. Will be removed in Tomcat 9.0.x.
+     *             precedence. Will be removed in Tomcat 8.5.x.
      */
     @Deprecated
     public int getMaxInactiveInterval();
@@ -117,7 +113,7 @@ public interface Manager {
      * @param interval The new default value
      *
      * @deprecated Ignored. {@link Context#getSessionTimeout()} always takes
-     *             precedence. Will be removed in Tomcat 9.0.x.
+     *             precedence. Will be removed in Tomcat 8.5.x.
      */
     @Deprecated
     public void setMaxInactiveInterval(int interval);
@@ -256,9 +252,10 @@ public interface Manager {
      * @return  The current rate (in sessions per minute) of session expiration
      */
     public int getSessionExpireRate();
-    // --------------------------------------------------------- Public Methods
 
 
+    // --------------------------------------------------------- Public Methods
+
     /**
      * Add this Session to the set of active Sessions for this Manager.
      *
@@ -288,6 +285,8 @@ public interface Manager {
      * Get a session from the recycled ones or create a new empty one.
      * The PersistentManager manager does not need to create session data
      * because it reads it from the Store.
+     *
+     * @return An empty Session object
      */
     public Session createEmptySession();
 
@@ -305,6 +304,9 @@ public interface Manager {
      *  method of the returned session.
      * @exception IllegalStateException if a new session cannot be
      *  instantiated for any reason
+     *
+     * @return An empty Session object with the given ID or a newly created
+     *         session ID if none was specified
      */
     public Session createSession(String sessionId);
 
@@ -319,6 +321,9 @@ public interface Manager {
      *  instantiated for any reason
      * @exception IOException if an input/output error occurs while
      *  processing this request
+     *
+     * @return the request session or {@code null} if a session with the
+     *         requested ID could not be found
      */
     public Session findSession(String id) throws IOException;
 
@@ -326,6 +331,8 @@ public interface Manager {
     /**
      * Return the set of active Sessions associated with this Manager.
      * If this Manager has no active Sessions, a zero-length array is returned.
+     *
+     * @return All the currently active sessions managed by this manager
      */
     public Session[] findSessions();
 
@@ -376,13 +383,13 @@ public interface Manager {
      */
     public void unload() throws IOException;
 
-     /**
-      * This method will be invoked by the context/container on a periodic
-      * basis and allows the manager to implement
-      * a method that executes periodic tasks, such as expiring sessions etc.
-      */
-     public void backgroundProcess();
 
+    /**
+     * This method will be invoked by the context/container on a periodic
+     * basis and allows the manager to implement
+     * a method that executes periodic tasks, such as expiring sessions etc.
+     */
+    public void backgroundProcess();
 
 
     /**
diff --git a/java/org/apache/catalina/session/LocalStrings.properties b/java/org/apache/catalina/session/LocalStrings.properties
index 1b55ca9..2429627 100644
--- a/java/org/apache/catalina/session/LocalStrings.properties
+++ b/java/org/apache/catalina/session/LocalStrings.properties
@@ -41,6 +41,7 @@ managerBase.createRandom=Created random number generator for session ID generati
 managerBase.createSession.ise=createSession: Too many active sessions
 managerBase.sessionAttributeNameFilter=Skipped session attribute named [{0}] because it did not match the name filter [{1}]
 managerBase.sessionAttributeValueClassNameFilter=Skipped session attribute named [{0}] because the value type [{1}] did not match the filter [{2}]
+managerBase.sessionNotFound=The session [{0}] was not found
 managerBase.sessionTimeout=Invalid session timeout setting [{0}]
 managerBase.setContextNotNew=It is illegal to call setContext() to change the Context associated with a Manager if the Manager is not in the NEW state
 managerBase.setMaxInactiveIntervalUnused=Manager.setMaxInactiveInterval() is deprecated and calls to this method are ignored. Session timeouts should be configured in web.xml or via Context.setSessionTimeout(int timeoutInMinutes)
diff --git a/java/org/apache/catalina/session/LocalStrings_fr.properties b/java/org/apache/catalina/session/LocalStrings_fr.properties
index eed03cd..066360b 100644
--- a/java/org/apache/catalina/session/LocalStrings_fr.properties
+++ b/java/org/apache/catalina/session/LocalStrings_fr.properties
@@ -39,6 +39,7 @@ fileStore.saving=Sauvegarde de la Session [{0}] vers le fichier [{1}]
 managerBase.createSession.ise="createSession": Trop de sessions actives
 managerBase.sessionAttributeNameFilter=L''attribut de session nommé [{0}] sera sauté car il ne correspond pas au filtre sur les noms [{1}]
 managerBase.sessionAttributeValueClassNameFilter=L''attribut de session nommé [{0}] a été passé parce que le type [{1}] de la valeur ne correspond pas au filtre [{2}]
+managerBase.sessionNotFound=La session [{0}] n''a pas été trouvée
 managerBase.sessionTimeout=Réglage du délai d''inactivité (timeout) de session invalide [{0}]
 managerBase.setContextNotNew=Il est illégal d'appeler setContext() pour changer le contexte associé avec un gestionnaire (Manager) si le genstionnaire n'est pas dans l'état nouveau
 
diff --git a/java/org/apache/catalina/session/LocalStrings_ja.properties b/java/org/apache/catalina/session/LocalStrings_ja.properties
index 8f008b7..0cfbbd1 100644
--- a/java/org/apache/catalina/session/LocalStrings_ja.properties
+++ b/java/org/apache/catalina/session/LocalStrings_ja.properties
@@ -39,6 +39,7 @@ fileStore.saving=セッション [{0}] をファイル [{1}] に保存します
 managerBase.createSession.ise=createSession: アクティブセッションが多すぎます
 managerBase.sessionAttributeNameFilter=名前フィルタ[{1}]と一致しなかったため、[{0}]というセッション属性をスキップしました。
 managerBase.sessionAttributeValueClassNameFilter=値タイプ[{1}]がフィルタ[{2}]と一致しなかったため、[{0}]という名前のセッション属性をスキップしました。
+managerBase.sessionNotFound=セッション [{0}] が見つかりません。
 managerBase.sessionTimeout=無効なセッションタイムアウト設定です [{0}]
 managerBase.setContextNotNew=NEW 状態ではないマネージャーに関連付けられた Context を変更するために setContext() を呼び出すことは禁止されています。
 
diff --git a/java/org/apache/catalina/session/LocalStrings_ko.properties b/java/org/apache/catalina/session/LocalStrings_ko.properties
index e8057d5..2d0bacc 100644
--- a/java/org/apache/catalina/session/LocalStrings_ko.properties
+++ b/java/org/apache/catalina/session/LocalStrings_ko.properties
@@ -36,6 +36,7 @@ fileStore.saving=세션 [{0}]을(를) 파일 [{1}]에 저장합니다.
 managerBase.createSession.ise=createSession: 활성화된 세션이 너무 많습니다.
 managerBase.sessionAttributeNameFilter=이름 필터 [{1}]와(과) 부합되지 않기 때문에, [{0}](이)라는 이름의 세션 속성을 건너뛰었습니다.
 managerBase.sessionAttributeValueClassNameFilter=값의 타입 [{1}]이(가) 필터 [{2}]와(과) 부합하지 않기 때문에, [{0}](이)라는 이름의 세션 속성을 건너뛰었습니다.
+managerBase.sessionNotFound=세션 [{0}]을(를) 찾을 수 없었습니다.
 managerBase.sessionTimeout=유효하지 않은, 세션 제한 시간 초과 설정입니다: [{0}]
 managerBase.setContextNotNew=만일 매니저가 NEW 상태에 있지 않다면, 매니저와 연관된 컨텍스트를 변경하기 위해 setContext()를 호출하는 것은 불허됩니다.
 
diff --git a/java/org/apache/catalina/session/LocalStrings_zh_CN.properties b/java/org/apache/catalina/session/LocalStrings_zh_CN.properties
index 30cda59..1b05442 100644
--- a/java/org/apache/catalina/session/LocalStrings_zh_CN.properties
+++ b/java/org/apache/catalina/session/LocalStrings_zh_CN.properties
@@ -26,6 +26,7 @@ fileStore.deleteFailed=无法删除阻止创建会话存储位置的文件 [{0}]
 fileStore.deleteSessionFailed=无法删除不再需要的文件[{0}]
 
 managerBase.createSession.ise=createSession:活跃session过多
+managerBase.sessionNotFound=找不到会话 [{0}]
 managerBase.setContextNotNew=如果Manager未处于NEW状态,则调用setContext()以更改与Manager关联的Context是非法的
 
 persistentManager.deserializeError=错误反序列化会话[{0}]: [{1}]
diff --git a/java/org/apache/catalina/session/ManagerBase.java b/java/org/apache/catalina/session/ManagerBase.java
index bcb94bf..e4121a6 100644
--- a/java/org/apache/catalina/session/ManagerBase.java
+++ b/java/org/apache/catalina/session/ManagerBase.java
@@ -14,20 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
 package org.apache.catalina.session;
 
 
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Deque;
 import java.util.Enumeration;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -80,7 +78,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      * session controlled by this Manager must be Serializable.
      *
      * @deprecated Ignored. {@link Context#getDistributable()} always takes
-     *             precedence. Will be removed in Tomcat 9.0.x.
+     *             precedence. Will be removed in Tomcat 8.5.x.
      */
     @Deprecated
     protected boolean distributable;
@@ -103,7 +101,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      * this Manager.
      *
      * @deprecated Ignored. {@link Context#getSessionTimeout()} always takes
-     *             precedence. Will be removed in Tomcat 9.0.x.
+     *             precedence. Will be removed in Tomcat 8.5.x.
      */
     @Deprecated
     protected int maxInactiveInterval = 30 * 60;
@@ -278,6 +276,13 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
     }
 
 
+    /**
+     * Provides {@link #getSessionAttributeNameFilter()} as a pre-compiled
+     * regular expression pattern.
+     *
+     * @return The pre-compiled pattern used to filter session attributes based
+     *         on attribute name. {@code null} means no filter is applied.
+     */
     protected Pattern getSessionAttributeNamePattern() {
         return sessionAttributeNamePattern;
     }
@@ -487,12 +492,20 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
             return sessionIdGenerator;
         } else if (sessionIdGeneratorClass != null) {
             try {
-                sessionIdGenerator = sessionIdGeneratorClass.newInstance();
+                sessionIdGenerator = sessionIdGeneratorClass.getConstructor().newInstance();
                 return sessionIdGenerator;
             } catch(IllegalAccessException ex) {
                 // Ignore
             } catch(InstantiationException ex) {
                 // Ignore
+            } catch (IllegalArgumentException e) {
+                // Ignore
+            } catch (SecurityException e) {
+                // Ignore
+            } catch (InvocationTargetException e) {
+                // Ignore
+            } catch (NoSuchMethodException e) {
+                // Ignore
             }
         }
         return null;
@@ -509,18 +522,14 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      * @return The descriptive short name of this Manager implementation.
      */
     public String getName() {
-
-        return (name);
-
+        return name;
     }
 
     /**
      * @return The secure random number generator class name.
      */
     public String getSecureRandomClass() {
-
-        return (this.secureRandomClass);
-
+        return this.secureRandomClass;
     }
 
 
@@ -608,9 +617,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      * @return The frequency of manager checks.
      */
     public int getProcessExpiresFrequency() {
-
-        return (this.processExpiresFrequency);
-
+        return this.processExpiresFrequency;
     }
 
     /**
@@ -782,14 +789,13 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
             sessionCreationTiming.add(timing);
             sessionCreationTiming.poll();
         }
-        return (session);
-
+        return session;
     }
 
 
     @Override
     public Session createEmptySession() {
-        return (getNewSession());
+        return getNewSession();
     }
 
 
@@ -905,6 +911,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
 
     /**
      * Get new session class to be used in the doLoad() method.
+     * @return a new session for use with this manager
      */
     protected StandardSession getNewSession() {
         return new StandardSession(this);
@@ -913,6 +920,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
 
     /**
      * Generate and return a new session identifier.
+     * @return a new session id
      */
     protected String generateSessionId() {
 
@@ -1019,9 +1027,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      *         limit.
      */
     public int getMaxActiveSessions() {
-
-        return (this.maxActiveSessions);
-
+        return this.maxActiveSessions;
     }
 
 
@@ -1090,11 +1096,9 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
         // Init
         int counter = 0;
         int result = 0;
-        Iterator<SessionTiming> iter = copy.iterator();
 
         // Calculate average
-        while (iter.hasNext()) {
-            SessionTiming timing = iter.next();
+        for (SessionTiming timing : copy) {
             if (timing != null) {
                 int timeAlive = timing.getDuration();
                 counter++;
@@ -1114,37 +1118,13 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      */
     @Override
     public int getSessionCreateRate() {
-        long now = System.currentTimeMillis();
         // Copy current stats
         List<SessionTiming> copy = new ArrayList<SessionTiming>();
         synchronized (sessionCreationTiming) {
             copy.addAll(sessionCreationTiming);
         }
 
-        // Init
-        long oldest = now;
-        int counter = 0;
-        int result = 0;
-        Iterator<SessionTiming> iter = copy.iterator();
-
-        // Calculate rate
-        while (iter.hasNext()) {
-            SessionTiming timing = iter.next();
-            if (timing != null) {
-                counter++;
-                if (timing.getTimestamp() < oldest) {
-                    oldest = timing.getTimestamp();
-                }
-            }
-        }
-        if (counter > 0) {
-            if (oldest < now) {
-                result = (1000*60*counter)/(int) (now - oldest);
-            } else {
-                result = Integer.MAX_VALUE;
-            }
-        }
-        return result;
+        return calculateRate(copy);
     }
 
 
@@ -1158,22 +1138,25 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      */
     @Override
     public int getSessionExpireRate() {
-        long now = System.currentTimeMillis();
         // Copy current stats
         List<SessionTiming> copy = new ArrayList<SessionTiming>();
         synchronized (sessionExpirationTiming) {
             copy.addAll(sessionExpirationTiming);
         }
 
+        return calculateRate(copy);
+    }
+
+
+    private static int calculateRate(List<SessionTiming> sessionTiming) {
         // Init
+        long now = System.currentTimeMillis();
         long oldest = now;
         int counter = 0;
         int result = 0;
-        Iterator<SessionTiming> iter = copy.iterator();
 
         // Calculate rate
-        while (iter.hasNext()) {
-            SessionTiming timing = iter.next();
+        for (SessionTiming timing : sessionTiming) {
             if (timing != null) {
                 counter++;
                 if (timing.getTimestamp() < oldest) {
@@ -1200,9 +1183,8 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      */
     public String listSessionIds() {
         StringBuilder sb = new StringBuilder();
-        Iterator<String> keys = sessions.keySet().iterator();
-        while (keys.hasNext()) {
-            sb.append(keys.next()).append(" ");
+        for (String s : sessions.keySet()) {
+            sb.append(s).append(" ");
         }
         return sb.toString();
     }
@@ -1219,9 +1201,10 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
      */
     public String getSessionAttribute( String sessionId, String key ) {
         Session s = sessions.get(sessionId);
-        if( s==null ) {
-            if(log.isInfoEnabled())
-                log.info("Session not found " + sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
             return null;
         }
         Object o=s.getSession().getAttribute(key);
@@ -1246,7 +1229,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
         Session s = sessions.get(sessionId);
         if (s == null) {
             if (log.isInfoEnabled()) {
-                log.info("Session not found " + sessionId);
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
             }
             return null;
         }
@@ -1267,63 +1250,79 @@ public abstract class ManagerBase extends LifecycleMBeanBase implements Manager
 
 
     public void expireSession( String sessionId ) {
-        Session s=sessions.get(sessionId);
-        if( s==null ) {
-            if(log.isInfoEnabled())
-                log.info("Session not found " + sessionId);
+        Session s = sessions.get(sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
             return;
         }
         s.expire();
     }
 
     public long getThisAccessedTimestamp( String sessionId ) {
-        Session s=sessions.get(sessionId);
-        if(s== null)
-            return -1 ;
+        Session s = sessions.get(sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
+            return -1;
+        }
         return s.getThisAccessedTime();
     }
 
     public String getThisAccessedTime( String sessionId ) {
-        Session s=sessions.get(sessionId);
-        if( s==null ) {
-            if(log.isInfoEnabled())
-                log.info("Session not found " + sessionId);
+        Session s = sessions.get(sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
             return "";
         }
         return new Date(s.getThisAccessedTime()).toString();
     }
 
     public long getLastAccessedTimestamp( String sessionId ) {
-        Session s=sessions.get(sessionId);
-        if(s== null)
-            return -1 ;
+        Session s = sessions.get(sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
+            return -1;
+        }
         return s.getLastAccessedTime();
     }
 
     public String getLastAccessedTime( String sessionId ) {
-        Session s=sessions.get(sessionId);
-        if( s==null ) {
-            if(log.isInfoEnabled())
-                log.info("Session not found " + sessionId);
+        Session s = sessions.get(sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
             return "";
         }
         return new Date(s.getLastAccessedTime()).toString();
     }
 
     public String getCreationTime( String sessionId ) {
-        Session s=sessions.get(sessionId);
-        if( s==null ) {
-            if(log.isInfoEnabled())
-                log.info("Session not found " + sessionId);
+        Session s = sessions.get(sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
             return "";
         }
         return new Date(s.getCreationTime()).toString();
     }
 
     public long getCreationTimestamp( String sessionId ) {
-        Session s=sessions.get(sessionId);
-        if(s== null)
-            return -1 ;
+        Session s = sessions.get(sessionId);
+        if (s == null) {
+            if (log.isInfoEnabled()) {
+                log.info(sm.getString("managerBase.sessionNotFound", sessionId));
+            }
+            return -1;
+        }
         return s.getCreationTime();
     }
 


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