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