private void setData(NoSqlSession session, Map<String, Object> data) { for (Map.Entry<String, Object> col : data.entrySet()) { String name = col.getKey(); Object value = col.getValue(); session.doPutOrRemove(name, value); session.bindValue(name, value); } }
private void handleSessionBindings(NoSqlSession session, HazelcastSessionData o) { Map<String, Object> attrs = o.getAttributeMap(); if (attrs != null) { for (String name : attrs.keySet()) { String attr = name; Object value = attrs.get(name); if (attrs.keySet().contains(name)) { session.doPutOrRemove(attr, value); session.bindValue(attr, value); } else { session.doPutOrRemove(attr, value); } } // cleanup, remove values from session, that don't exist in data anymore: for (String name : session.getNames()) { if (!attrs.keySet().contains(name)) { session.doPutOrRemove(name, null); session.unbindValue(name, session.getAttribute(name)); } } } }
/** * Overridden to change the attribute (which sets the "dirty" state) only if the new attribute value * is not equal to the old attribute value. */ @Override public Object doPutOrRemove(String name, Object value) { Object oldValue = doGet(name); return (valueEquals(oldValue, value)) ? value : super.doPutOrRemove(name, value); }
/** * Overridden to update the session state prior to saving if any attribute value has a different * hash code than it used to. This allows us to detect changes when a mutable object is used as * an attribute value. */ @Override protected void complete() { for (Map.Entry<String, Object> a: getAttributeMap().entrySet()) { Integer oldHash = attributeHashes.get(a.getKey()); if (oldHash == null || oldHash.intValue() != safeHash(a.getValue())) { // super.doPutOrRemove always sets the dirty state super.doPutOrRemove(a.getKey(), a.getValue()); } } super.complete(); }
@Override protected synchronized NoSqlSession loadSession(String clusterId) { LOG.info("HazelcastSessionManager:loadSession: " + clusterId); HazelcastSessionData o = sessions.get(clusterId); if (o == null) { return null; } Boolean valid = o.isValid(); if (valid == null || !valid) { return null; } Object version = o.getVersion(); Long created = o.getCreationTime(); Long accessed = o.getAccessed(); NoSqlSession session = new NoSqlSession(this, created, accessed, clusterId, version); // get the attributes for the context Map<String, Object> attrs = o.getAttributeMap(); if (attrs != null) { for (String name : attrs.keySet()) { String attr = name; Object value = attrs.get(name); session.doPutOrRemove(attr, value); session.bindValue(attr, value); } } session.didActivate(); return session; }
session.doPutOrRemove(name, value); session.bindValue(name, value); session.doPutOrRemove(name, value); session.doPutOrRemove(name, null); session.unbindValue(name, session.getAttribute(name));