package com.hwlcn.security.session.mgt.eis; import com.hwlcn.security.session.Session; import com.hwlcn.security.session.mgt.SimpleSession; import com.hwlcn.security.session.UnknownSessionException; import java.io.Serializable; public abstract class AbstractSessionDAO implements SessionDAO { private SessionIdGenerator sessionIdGenerator; public AbstractSessionDAO() { this.sessionIdGenerator = new JavaUuidSessionIdGenerator(); } public SessionIdGenerator getSessionIdGenerator() { return sessionIdGenerator; } public void setSessionIdGenerator(SessionIdGenerator sessionIdGenerator) { this.sessionIdGenerator = sessionIdGenerator; } protected Serializable generateSessionId(Session session) { if (this.sessionIdGenerator == null) { String msg = "sessionIdGenerator attribute has not been configured."; throw new IllegalStateException(msg); } return this.sessionIdGenerator.generateId(session); } public Serializable create(Session session) { Serializable sessionId = doCreate(session); verifySessionId(sessionId); return sessionId; } private void verifySessionId(Serializable sessionId) { if (sessionId == null) { String msg = "sessionId returned from doCreate implementation is null. Please verify the implementation."; throw new IllegalStateException(msg); } } protected void assignSessionId(Session session, Serializable sessionId) { ((SimpleSession) session).setId(sessionId); } protected abstract Serializable doCreate(Session session); public Session readSession(Serializable sessionId) throws UnknownSessionException { Session s = doReadSession(sessionId); if (s == null) { throw new UnknownSessionException("There is no session with id [" + sessionId + "]"); } return s; } protected abstract Session doReadSession(Serializable sessionId); }