X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsamples%2Fclustersession%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fclustersession%2FClusterSession.java;fp=opendaylight%2Fsamples%2Fclustersession%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fclustersession%2FClusterSession.java;h=dc93700c0d1e338c0045334936be6166e0fc2c37;hb=bb8e483729cee2950c8394751e21f87812aec48d;hp=0000000000000000000000000000000000000000;hpb=f2a95080b262418d109d7f1151cf3d9d3aae6237;p=controller.git diff --git a/opendaylight/samples/clustersession/src/main/java/org/opendaylight/controller/clustersession/ClusterSession.java b/opendaylight/samples/clustersession/src/main/java/org/opendaylight/controller/clustersession/ClusterSession.java new file mode 100644 index 0000000000..dc93700c0d --- /dev/null +++ b/opendaylight/samples/clustersession/src/main/java/org/opendaylight/controller/clustersession/ClusterSession.java @@ -0,0 +1,162 @@ +package org.opendaylight.controller.clustersession; + +import java.beans.PropertyChangeSupport; +import java.io.Serializable; +import java.security.Principal; +import java.util.ArrayList; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.catalina.Manager; +import org.apache.catalina.SessionListener; +import org.apache.catalina.session.StandardSession; +import org.opendaylight.controller.clustersession.service.ClusterSessionService; + +public class ClusterSession extends StandardSession implements Serializable { + + private static final long serialVersionUID = 1L; + + private transient ClusterSessionService sessionService; + + public ClusterSession(Manager manager, ClusterSessionService sessionService) { + super(manager); + this.sessionService = sessionService; + } + + public void setSessionService(ClusterSessionService sessionService){ + this.sessionService = sessionService; + } + + @Override + public void setAuthType(String authType) { + super.setAuthType(authType); + sessionService.updateSession(this); + } + + @Override + public void setCreationTime(long time) { + super.setCreationTime(time); + sessionService.updateSession(this); + } + + @Override + public void setMaxInactiveInterval(int interval) { + super.setMaxInactiveInterval(interval); + sessionService.updateSession(this); + } + + @Override + public void setNew(boolean isNew) { + super.setNew(isNew); + sessionService.updateSession(this); + } + + @Override + public void setPrincipal(Principal principal) { + super.setPrincipal(principal); + sessionService.updateSession(this); + } + + @Override + public void setValid(boolean isValid) { + super.setValid(isValid); + sessionService.updateSession(this); + } + + @Override + public void access() { + super.access(); + sessionService.updateSession(this); + } + + @Override + public void endAccess() { + super.endAccess(); + sessionService.updateSession(this); + } + + @Override + public void removeAttribute(String name, boolean notify) { + super.removeAttribute(name, notify); + sessionService.updateSession(this); + } + + @Override + public void setAttribute(String name, Object value, boolean notify) { + super.setAttribute(name, value, notify); + sessionService.updateSession(this); + } + + @Override + public void recycle() { + super.recycle(); + sessionService.updateSession(this); + } + + @Override + public void removeNote(String name) { + super.removeNote(name); + sessionService.updateSession(this); + } + + @Override + public void addSessionListener(SessionListener listener) { + super.addSessionListener(listener); + sessionService.updateSession(this); + } + + @Override + public void removeSessionListener(SessionListener listener) { + super.removeSessionListener(listener); + sessionService.updateSession(this); + } + + @Override + public void setNote(String name, Object value) { + super.setNote(name, value); + sessionService.updateSession(this); + } + + /* + * Certain fields inside Standard session are not serialized, We need to process them here + */ + public void afterDeserialization(){ + if (listeners == null){ + listeners = new ArrayList(); + } + if (notes == null){ + notes = new ConcurrentHashMap(); + } + if(support == null){ + support = new PropertyChangeSupport(this); + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("ClusterSession["); + sb.append(id); + sb.append(", isNew : "); + sb.append(isNew); + sb.append(", isValid : "); + sb.append(isValid); + sb.append("]"); + return sb.toString(); + } + + /* + * These methods are added for deserialization purpose + */ + + public void setAuthTypeInternal(String authType){ + this.authType = authType; + } + + public void setPrincipalInternal(Principal principal){ + this.principal = principal; + } + + public void setNoteInternal(String name, Object value) { + notes.put(name, value); + } +}