You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kf...@apache.org on 2013/02/14 09:57:43 UTC
svn commit: r1446072 - in /tomcat/trunk/java/org/apache/catalina:
Manager.java Session.java ha/session/DeltaManager.java
session/ManagerBase.java session/StandardSession.java
Author: kfujino
Date: Thu Feb 14 08:57:43 2013
New Revision: 1446072
URL: http://svn.apache.org/r1446072
Log:
Remove duplicate code on ManagerBase and DeltaManager.
Introduce following interfaces.
Manager#changeSessionId(Session, String)
Session#tellChangedSessionId(String, String, boolean, boolean)
Modified:
tomcat/trunk/java/org/apache/catalina/Manager.java
tomcat/trunk/java/org/apache/catalina/Session.java
tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
tomcat/trunk/java/org/apache/catalina/session/StandardSession.java
Modified: tomcat/trunk/java/org/apache/catalina/Manager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Manager.java?rev=1446072&r1=1446071&r2=1446072&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Manager.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Manager.java Thu Feb 14 08:57:43 2013
@@ -280,6 +280,15 @@ public interface Manager {
/**
+ * Change the session ID of the current session to a specified session ID.
+ *
+ * @param session The session to change the session ID for
+ * @param newId new session ID
+ */
+ public void changeSessionId(Session session, String newId);
+
+
+ /**
* 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.
Modified: tomcat/trunk/java/org/apache/catalina/Session.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Session.java?rev=1446072&r1=1446071&r2=1446072&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Session.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Session.java Thu Feb 14 08:57:43 2013
@@ -327,4 +327,18 @@ public interface Session {
public void setNote(String name, Object value);
+ /**
+ * Inform the listeners about the change session ID.
+ *
+ * @param newId new session ID
+ * @param oldId old session ID
+ * @param notifySessionListeners Should any associated sessionListeners be
+ * notified that session ID has been changed?
+ * @param notifyContainerListeners Should any associated ContainerListeners
+ * be notified that session ID has been changed?
+ */
+ public void tellChangedSessionId(String newId, String oldId,
+ boolean notifySessionListeners, boolean notifyContainerListeners);
+
+
}
Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1446072&r1=1446071&r2=1446072&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Thu Feb 14 08:57:43 2013
@@ -526,13 +526,31 @@ public class DeltaManager extends Cluste
changeSessionId(session, true);
}
- public void changeSessionId(Session session, boolean notify) {
- // original sessionID
+ /**
+ * Change the session ID of the current session to a specified session ID.
+ *
+ * @param session The session to change the session ID for
+ * @param newId new session ID
+ */
+ @Override
+ public void changeSessionId(Session session, String newId) {
+ changeSessionId(session, newId, true);
+ }
+
+ protected void changeSessionId(Session session, boolean notify) {
String orgSessionID = session.getId();
super.changeSessionId(session);
- if (notify && cluster.getMembers().length > 0) {
- // changed sessionID
- String newSessionID = session.getId();
+ if (notify) sendChangeSessionId(session.getId(), orgSessionID);
+ }
+
+ protected void changeSessionId(Session session, String newId, boolean notify) {
+ String orgSessionID = session.getId();
+ super.changeSessionId(session, newId);
+ if (notify) sendChangeSessionId(session.getId(), orgSessionID);
+ }
+
+ protected void sendChangeSessionId(String newSessionID, String orgSessionID) {
+ if (cluster.getMembers().length > 0) {
try {
// serialize sessionID
byte[] data = serializeSessionId(newSessionID);
@@ -1469,35 +1487,8 @@ public class DeltaManager extends Cluste
if (session != null) {
String newSessionID = deserializeSessionId(msg.getSession());
session.setPrimarySession(false);
- session.setId(newSessionID, false);
- if (notifyContainerListenersOnReplication) {
- getContext().fireContainerEvent(Context.CHANGE_SESSION_ID_EVENT,
- new String[] {msg.getSessionID(), newSessionID});
- }
-
- if (notifySessionListenersOnReplication) {
- Object listeners[] = getContext().
- getApplicationEventListeners();
- if (listeners != null && listeners.length > 0) {
- HttpSessionEvent event =
- new HttpSessionEvent(session.getSession());
-
- for(Object listener : listeners) {
- if (!(listener instanceof HttpSessionIdListener))
- continue;
-
- HttpSessionIdListener idListener =
- (HttpSessionIdListener)listener;
- try {
- idListener.
- sessionIdChanged(event, msg.getSessionID());
- } catch (Throwable t) {
- log.error(sm.getString(
- "standardSession.sessionEvent"), t);
- }
- }
- }
- }
+ // change session id
+ changeSessionId(session, newSessionID, notifySessionListenersOnReplication, notifyContainerListenersOnReplication);
}
}
Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java?rev=1446072&r1=1446071&r2=1446072&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Thu Feb 14 08:57:43 2013
@@ -760,30 +760,27 @@ public abstract class ManagerBase extend
*/
@Override
public void changeSessionId(Session session) {
+ String newId = generateSessionId();
+ changeSessionId(session, newId, true, true);
+ }
+
+ /**
+ * Change the session ID of the current session to a specified session ID.
+ *
+ * @param session The session to change the session ID for
+ * @param newId new session ID
+ */
+ @Override
+ public void changeSessionId(Session session, String newId) {
+ changeSessionId(session, newId, true, true);
+ }
+
+ protected void changeSessionId(Session session, String newId,
+ boolean notifySessionListeners, boolean notifyContainerListeners) {
String oldId = session.getIdInternal();
- session.setId(generateSessionId(), false);
- String newId = session.getIdInternal();
- context.fireContainerEvent(Context.CHANGE_SESSION_ID_EVENT,
- new String[] {oldId, newId});
-
- Object listeners[] = context.getApplicationEventListeners();
- if (listeners != null && listeners.length > 0) {
- HttpSessionEvent event =
- new HttpSessionEvent(session.getSession());
-
- for(Object listener : listeners) {
- if (!(listener instanceof HttpSessionIdListener))
- continue;
-
- HttpSessionIdListener idListener =
- (HttpSessionIdListener)listener;
- try {
- idListener.sessionIdChanged(event, oldId);
- } catch (Throwable t) {
- log.error(sm.getString("standardSession.sessionEvent"), t);
- }
- }
- }
+ session.setId(newId, false);
+ session.tellChangedSessionId(newId, oldId,
+ notifySessionListeners, notifyContainerListeners);
}
Modified: tomcat/trunk/java/org/apache/catalina/session/StandardSession.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/StandardSession.java?rev=1446072&r1=1446071&r2=1446072&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/StandardSession.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/StandardSession.java Thu Feb 14 08:57:43 2013
@@ -44,6 +44,7 @@ import javax.servlet.http.HttpSessionAtt
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionIdListener;
import javax.servlet.http.HttpSessionListener;
import org.apache.catalina.Context;
@@ -430,6 +431,50 @@ public class StandardSession implements
}
+ /**
+ * Inform the listeners about the change session ID.
+ *
+ * @param newId new session ID
+ * @param oldId old session ID
+ * @param notifySessionListeners Should any associated sessionListeners be
+ * notified that session ID has been changed?
+ * @param notifyContainerListeners Should any associated ContainerListeners
+ * be notified that session ID has been changed?
+ */
+ @Override
+ public void tellChangedSessionId(String newId, String oldId,
+ boolean notifySessionListeners, boolean notifyContainerListeners) {
+ Context context = manager.getContext();
+ // notify ContainerListeners
+ if (notifyContainerListeners) {
+ context.fireContainerEvent(Context.CHANGE_SESSION_ID_EVENT,
+ new String[] {oldId, newId});
+ }
+
+ // notify HttpSessionIdListener
+ if (notifySessionListeners) {
+ Object listeners[] = context.getApplicationEventListeners();
+ if (listeners != null && listeners.length > 0) {
+ HttpSessionEvent event =
+ new HttpSessionEvent(getSession());
+
+ for(Object listener : listeners) {
+ if (!(listener instanceof HttpSessionIdListener))
+ continue;
+
+ HttpSessionIdListener idListener =
+ (HttpSessionIdListener)listener;
+ try {
+ idListener.sessionIdChanged(event, oldId);
+ } catch (Throwable t) {
+ manager.getContext().getLogger().error
+ (sm.getString("standardSession.sessionEvent"), t);
+ }
+ }
+ }
+ }
+ }
+
/**
* Return the last time the client sent a request associated with this
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1446072 - in /tomcat/trunk/java/org/apache/catalina: Manager.java Session.java ha/session/DeltaManager.java session/ManagerBase.java session/StandardSession.java
Posted by Nick Williams <ni...@nicholaswilliams.net>.
On Feb 14, 2013, at 2:57 AM, kfujino@apache.org wrote:
> Author: kfujino
> Date: Thu Feb 14 08:57:43 2013
> New Revision: 1446072
>
> URL: http://svn.apache.org/r1446072
> Log:
> Remove duplicate code on ManagerBase and DeltaManager.
> Introduce following interfaces.
> Manager#changeSessionId(Session, String)
> Session#tellChangedSessionId(String, String, boolean, boolean)
>
> Modified:
> tomcat/trunk/java/org/apache/catalina/Manager.java
> tomcat/trunk/java/org/apache/catalina/Session.java
> tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
> tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
> tomcat/trunk/java/org/apache/catalina/session/StandardSession.java
> <snip />
I like this. Looks good. Definitely an improvement and easier to maintain.