sessionimpl.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,394 行 · 第 1/3 页
JAVA
1,394 行
} /** * Flush changes before the headers. */ public final void saveBeforeHeaders() { if (_manager == null || ! _manager.isSaveBeforeHeaders()) return; save(); } /** * Flush changes after a request completes. */ public final void saveAfterRequest() { if (_manager == null || ! _manager.isSaveAfterRequest()) return; save(); } /** * Saves changes to the session. */ public final void save() { if (! isValid()) return; try { ClusterObject clusterObject = _clusterObject; if (clusterObject != null) { clusterObject.objectStore(this); } } catch (Throwable e) { log.log(Level.WARNING, this + ": can't serialize session", e); } } /** * Store on shutdown. */ void saveOnShutdown() { try { ClusterObject clusterObject = _clusterObject; if (clusterObject != null) { clusterObject.objectModified(); clusterObject.objectStore(this); } } catch (Throwable e) { log.log(Level.WARNING, this + ": can't serialize session", e); } } /** * Returns true if the session is empty. */ public boolean isEmpty() { return _values == null || _values.size() == 0; } /** * Loads the object from the input stream. */ public void load(Hessian2Input in) throws IOException { HttpSessionEvent event = null; ArrayList<HttpSessionActivationListener> listeners = null; synchronized (this) { synchronized (_values) { // server/017u _values.clear(); // unbind(); try { int size = in.readInt(); //System.out.println("LOAD: " + size + " " + this + " " + _clusterObject + System.identityHashCode(this)); for (int i = 0; i < size; i++) { String key = in.readString(); Object value = in.readObject(); if (value != null) { _values.put(key, value); if (value instanceof HttpSessionActivationListener) { HttpSessionActivationListener listener = (HttpSessionActivationListener) value; if (event == null) event = new HttpSessionEvent(this); if (listeners == null) listeners = new ArrayList<HttpSessionActivationListener>(); listeners.add(listener); } } } } catch (Exception e) { throw IOExceptionWrapper.create(e); } } } for (int i = 0; listeners != null && i < listeners.size(); i++) { HttpSessionActivationListener listener = listeners.get(i); if (event == null) event = new HttpSessionEvent(this); listener.sessionDidActivate(event); } listeners = _manager.getActivationListeners(); for (int i = 0; listeners != null && i < listeners.size(); i++) { HttpSessionActivationListener listener = listeners.get(i); if (event == null) event = new HttpSessionEvent(this); listener.sessionDidActivate(event); } } /** * Saves the object to the input stream. */ public void store(Hessian2Output out) throws IOException { Set<Map.Entry<String,Object>> set = null; HttpSessionEvent event = null; ArrayList<HttpSessionActivationListener> listeners; synchronized (_values) { set = getEntrySet(); int size = set == null ? 0 : set.size(); if (size == 0) { out.writeInt(0); return; } listeners = new ArrayList<HttpSessionActivationListener>(); if (_manager.getActivationListeners() != null) listeners.addAll(_manager.getActivationListeners()); for (Map.Entry entry : set) { Object value = entry.getValue(); if (value instanceof HttpSessionActivationListener) { HttpSessionActivationListener listener = (HttpSessionActivationListener) value; if (event == null) event = new HttpSessionEvent(this); listeners.add(listener); } } } if (listeners != null && listeners.size() > 0) { if (event == null) event = new HttpSessionEvent(this); for (HttpSessionActivationListener listener : listeners) { listener.sessionWillPassivate(event); } } synchronized (this) { synchronized (_values) { set = getEntrySet(); int size = set == null ? 0 : set.size(); out.writeInt(size); if (size == 0) return; boolean ignoreNonSerializable = getManager().getIgnoreSerializationErrors(); Map.Entry []entries = new Map.Entry[set.size()]; Iterator iter = set.iterator(); int i = 0; while (iter.hasNext()) { entries[i++] = (Map.Entry) iter.next(); } Arrays.sort(entries, KEY_COMPARATOR); for (i = 0; i < entries.length; i++) { Map.Entry entry = entries[i]; Object value = entry.getValue(); out.writeString((String) entry.getKey()); if (ignoreNonSerializable && ! (value instanceof Serializable)) { out.writeObject(null); continue; } try { out.writeObject(value); } catch (NotSerializableException e) { log.warning(L.l("{0}: failed storing persistent session attribute '{1}'. Persistent session values must extend java.io.Serializable.\n{2}", this, entry.getKey(), String.valueOf(e))); throw e; } } } } } /** * Loads the object from the input stream. */ public void load(ObjectInput in) throws IOException { HttpSessionEvent event = null; ArrayList<HttpSessionActivationListener> listeners = null; synchronized (this) { synchronized (_values) { // server/017u, #1820 - loadImpl does not trigger callbacks _values.clear(); try { int size = in.readInt(); //System.out.println("LOAD: " + size + " " + this + " " + _clusterObject + System.identityHashCode(this)); for (int i = 0; i < size; i++) { String key = in.readUTF(); Object value = in.readObject(); if (value != null) { _values.put(key, value); if (value instanceof HttpSessionActivationListener) { if (listeners == null) listeners = new ArrayList<HttpSessionActivationListener>(); HttpSessionActivationListener listener = (HttpSessionActivationListener) value; listeners.add(listener); } } } } catch (Exception e) { throw IOExceptionWrapper.create(e); } } } for (int i = 0; listeners != null && i < listeners.size(); i++) { HttpSessionActivationListener listener = listeners.get(i); if (event == null) event = new HttpSessionEvent(this); listener.sessionDidActivate(event); } listeners = _manager.getActivationListeners(); for (int i = 0; listeners != null && i < listeners.size(); i++) { HttpSessionActivationListener listener = listeners.get(i); if (event == null) event = new HttpSessionEvent(this); listener.sessionDidActivate(event); } } /** * Saves the object to the input stream. */ public void store(ObjectOutput out) throws IOException { Set<Map.Entry<String,Object>> set = null; HttpSessionEvent event = null; ArrayList<HttpSessionActivationListener> listeners; synchronized (_values) { set = getEntrySet(); int size = set == null ? 0 : set.size(); if (size == 0) { out.writeInt(0); return; } listeners = new ArrayList<HttpSessionActivationListener>(); if (_manager.getActivationListeners() != null) listeners.addAll(_manager.getActivationListeners()); for (Map.Entry entry : set) { Object value = entry.getValue(); if (value instanceof HttpSessionActivationListener) { HttpSessionActivationListener listener = (HttpSessionActivationListener) value; if (event == null) event = new HttpSessionEvent(this); listeners.add(listener); } } } if (listeners != null && listeners.size() > 0) { if (event == null) event = new HttpSessionEvent(this); for (HttpSessionActivationListener listener : listeners) { listener.sessionWillPassivate(event); } } synchronized (this) { synchronized (_values) { set = getEntrySet(); int size = set == null ? 0 : set.size(); out.writeInt(size); if (size == 0) return; boolean ignoreNonSerializable = getManager().getIgnoreSerializationErrors(); Map.Entry []entries = new Map.Entry[set.size()]; Iterator iter = set.iterator(); int i = 0; while (iter.hasNext()) { entries[i++] = (Map.Entry) iter.next(); } Arrays.sort(entries, KEY_COMPARATOR); for (i = 0; i < entries.length; i++) { Map.Entry entry = entries[i]; Object value = entry.getValue(); out.writeUTF((String) entry.getKey()); if (ignoreNonSerializable && ! (value instanceof Serializable)) { out.writeObject(null); continue; } try { out.writeObject(value); } catch (NotSerializableException e) { log.warning(L.l("{0}: failed storing persistent session attribute '{1}'. Persistent session values must extend java.io.Serializable.\n{2}", this, entry.getKey(), String.valueOf(e))); throw e; } } } } } /** * Returns the set of values in the session */ Set<Map.Entry<String,Object>> getEntrySet() { synchronized (_values) { if (! _isValid) throw new IllegalStateException(L.l("{0}: can't call getEntrySet() when session is no longer valid.", this)); return _values.entrySet(); } } public boolean canLog() { return log.isLoggable(Level.FINE); } public void log(String value) { log.fine(value); } @Override public String toString() { String contextPath = ""; SessionManager manager = _manager; if (manager != null) { WebApp webApp = manager.getWebApp(); if (webApp != null) contextPath = "," + webApp.getContextPath(); } return "SessionImpl[" + getId() + contextPath + "]"; } enum Logout { INVALIDATE, LRU, TIMEOUT }; static class LoginPrincipal implements java.io.Serializable { private transient Principal _user; LoginPrincipal(Principal user) { _user = user; } public Principal getUser() { return _user; } } private static Comparator KEY_COMPARATOR = new Comparator() { public int compare(Object aObj, Object bObj) { Map.Entry a = (Map.Entry) aObj; Map.Entry b = (Map.Entry) bObj; String aStr = (String) a.getKey(); String bStr = (String) b.getKey(); return aStr.compareTo(bStr); } };}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?