You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2015/12/29 22:10:56 UTC
[02/24] incubator-geode git commit: GEODE-14: Move GemFire Sessions
module and relocate all packages to 'internal'
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/PeerToPeerSessionCache.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/PeerToPeerSessionCache.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/PeerToPeerSessionCache.java
deleted file mode 100644
index d727f83..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/PeerToPeerSessionCache.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.common;
-
-import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.cache.GemFireCache;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.RegionFactory;
-import com.gemstone.gemfire.cache.RegionShortcut;
-import com.gemstone.gemfire.cache.execute.FunctionService;
-import com.gemstone.gemfire.modules.session.catalina.callback.LocalSessionCacheLoader;
-import com.gemstone.gemfire.modules.session.catalina.callback.LocalSessionCacheWriter;
-import com.gemstone.gemfire.modules.util.RegionConfiguration;
-import com.gemstone.gemfire.modules.util.RegionHelper;
-import com.gemstone.gemfire.modules.util.TouchPartitionedRegionEntriesFunction;
-import com.gemstone.gemfire.modules.util.TouchReplicatedRegionEntriesFunction;
-
-import java.util.Map;
-import javax.servlet.http.HttpSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class which defines a peer-to-peer cache
- */
-public class PeerToPeerSessionCache extends AbstractSessionCache {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(PeerToPeerSessionCache.class.getName());
-
- private Cache cache;
-
- private static final String DEFAULT_REGION_ATTRIBUTES_ID =
- RegionShortcut.REPLICATE.toString();
-
- private static final Boolean DEFAULT_ENABLE_LOCAL_CACHE = false;
-
- /**
- * Constructor
- *
- * @param cache
- * @param properties
- */
- public PeerToPeerSessionCache(Cache cache,
- Map<CacheProperty, Object> properties) {
- super();
- this.cache = cache;
-
- /**
- * Set some default properties for this cache if they haven't already
- * been set
- */
- this.properties.put(CacheProperty.REGION_ATTRIBUTES_ID,
- DEFAULT_REGION_ATTRIBUTES_ID);
- this.properties.put(CacheProperty.ENABLE_LOCAL_CACHE,
- DEFAULT_ENABLE_LOCAL_CACHE);
- this.properties.putAll(properties);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void initialize() {
- // Register Functions
- registerFunctions();
-
- // Create or retrieve the region
- createOrRetrieveRegion();
-
- /**
- * If local cache is enabled, create the local region fronting the
- * session region and set it as the operating region; otherwise, use
- * the session region directly as the operating region.
- */
- boolean enableLocalCache =
- (Boolean) properties.get(CacheProperty.ENABLE_LOCAL_CACHE);
- operatingRegion = enableLocalCache
- ? createOrRetrieveLocalRegion()
- : this.sessionRegion;
-
- // Create or retrieve the statistics
- createStatistics();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public GemFireCache getCache() {
- return cache;
- }
-
- @Override
- public boolean isClientServer() {
- return false;
- }
-
- private void registerFunctions() {
- // Register the touch partitioned region entries function if it is not already registered
- if (!FunctionService.isRegistered(
- TouchPartitionedRegionEntriesFunction.ID)) {
- FunctionService.registerFunction(
- new TouchPartitionedRegionEntriesFunction());
- }
-
- // Register the touch replicated region entries function if it is not already registered
- if (!FunctionService.isRegistered(
- TouchReplicatedRegionEntriesFunction.ID)) {
- FunctionService.registerFunction(
- new TouchReplicatedRegionEntriesFunction());
- }
- }
-
- private void createOrRetrieveRegion() {
- // Create the RegionConfiguration
- RegionConfiguration configuration = createRegionConfiguration();
-
- // Attempt to retrieve the region
- // If it already exists, validate it
- // If it doesn't already exist, create it
- Region region = this.cache.getRegion(
- (String) properties.get(CacheProperty.REGION_NAME));
- if (region == null) {
- // Create the region
- region = RegionHelper.createRegion(cache, configuration);
- LOG.info("Created new session region: " + region);
- } else {
- // Validate the existing region
- LOG.info("Retrieved existing session region: " + region);
- RegionHelper.validateRegion(cache, configuration, region);
- }
-
- // Set the session region
- this.sessionRegion = region;
- }
-
- /**
- * Create a local region fronting the main region.
- *
- * @return
- */
- private Region<String, HttpSession> createOrRetrieveLocalRegion() {
- // Attempt to retrieve the fronting region
- String frontingRegionName = this.sessionRegion.getName() + "_local";
- Region<String, HttpSession> frontingRegion =
- this.cache.getRegion(frontingRegionName);
-
- if (frontingRegion == null) {
- // Create the region factory
- RegionFactory<String, HttpSession> factory =
- this.cache.createRegionFactory(RegionShortcut.LOCAL_HEAP_LRU);
-
- // Add the cache loader and writer
- factory.setCacheLoader(new LocalSessionCacheLoader(this.sessionRegion));
- factory.setCacheWriter(new LocalSessionCacheWriter(this.sessionRegion));
-
- // Create the region
- frontingRegion = factory.create(frontingRegionName);
- LOG.info("Created new local session region: {}", frontingRegion);
- } else {
- LOG.info("Retrieved existing local session region: {}",
- frontingRegion);
- }
-
- return frontingRegion;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionCache.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionCache.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionCache.java
deleted file mode 100644
index 7a5f034..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionCache.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-
-package com.gemstone.gemfire.modules.session.common;
-
-import com.gemstone.gemfire.cache.GemFireCache;
-import com.gemstone.gemfire.cache.Region;
-
-import javax.servlet.http.HttpSession;
-
-/**
- * Interface to basic cache operations.
- */
-public interface SessionCache {
-
- /**
- * Initialize the cache and create the appropriate region.
- */
- public void initialize();
-
- /**
- * Stop the cache.
- */
- public void stop();
-
- /**
- * Retrieve the cache reference.
- *
- * @return a {@code GemFireCache} reference
- */
- public GemFireCache getCache();
-
- /**
- * Get the {@code Region} being used by client code to put attributes.
- *
- * @return a {@code Region<String, HttpSession>} reference
- */
- public Region<String, HttpSession> getOperatingRegion();
-
- /**
- * Get the backing {@code Region} being used. This may not be the same as the
- * region being used by client code to put attributes.
- *
- * @return a {@code Region<String, HttpSession>} reference
- */
- public Region<String, HttpSession> getSessionRegion();
-
- /**
- * Is this cache client-server? The only other alternative is peer-to-peer.
- *
- * @return true if this cache is client-server.
- */
- public boolean isClientServer();
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionExpirationCacheListener.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionExpirationCacheListener.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionExpirationCacheListener.java
deleted file mode 100644
index 164102d..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/common/SessionExpirationCacheListener.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.common;
-
-import com.gemstone.gemfire.cache.Declarable;
-import com.gemstone.gemfire.cache.EntryEvent;
-import com.gemstone.gemfire.cache.Operation;
-import com.gemstone.gemfire.cache.util.CacheListenerAdapter;
-
-import java.util.Properties;
-import javax.servlet.http.HttpSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SessionExpirationCacheListener extends
- CacheListenerAdapter<String, HttpSession> implements Declarable {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(SessionExpirationCacheListener.class.getName());
-
- @Override
- public void afterDestroy(EntryEvent<String, HttpSession> event) {
- /**
- * A Session expired. If it was destroyed by GemFire expiration,
- * process it. If it was destroyed via Session.invalidate, ignore it
- * since it has already been processed.
- */
- if (event.getOperation() == Operation.EXPIRE_DESTROY) {
- HttpSession session = (HttpSession) event.getOldValue();
- session.invalidate();
- }
- }
-
- @Override
- public void init(Properties p) {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/Constants.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/Constants.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/Constants.java
deleted file mode 100644
index a8bb852..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/Constants.java
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package com.gemstone.gemfire.modules.session.filter;
-
-/**
- * Various constant values used through the app
- */
-public class Constants {
-
- public static String GEMFIRE_SESSION_REQUEST = "_gemfire_session_request_";
-
- public static String SESSION_STATISTICS_MBEAN_NAME =
- "com.gemstone:type=SessionStatistics,name=sessionStatistics";
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ContextManager.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ContextManager.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ContextManager.java
deleted file mode 100644
index 2837659..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ContextManager.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package com.gemstone.gemfire.modules.session.filter;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import javax.servlet.ServletContext;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class is a singleton and manages the mapping of context paths to
- * original ServletContext objects as well as a mapping of paths to Cache
- * reference handles.
- */
-public class ContextManager {
-
- /**
- * Logger object
- */
- private static final Logger LOG =
- LoggerFactory.getLogger(ContextManager.class.getName());
-
- /**
- * Mapping of context path to ServletContext object
- */
- private final ConcurrentMap<String, ServletContext> contextMap =
- new ConcurrentHashMap<String, ServletContext>(16);
-
- /**
- * Our singleton reference
- */
- private static final ContextManager manager = new ContextManager();
-
- private ContextManager() {
- // This is a singleton
- LOG.info("Initializing ContextManager");
- }
-
- /**
- * Return our singleton instance
- *
- * @return
- */
- public static ContextManager getInstance() {
- return manager;
- }
-
- /**
- * Add a context to our collection
- *
- * @param context the {@code ServletContext} to add
- */
- public void putContext(ServletContext context) {
- String path = context.getContextPath();
- contextMap.put(path, context);
- LOG.info("Adding context '{}' {}", path, context);
- }
-
- /**
- * Remove a context from our collection
- *
- * @param context the context to remove
- */
- public void removeContext(ServletContext context) {
- String path = context.getContextPath();
- contextMap.remove(path);
- LOG.info("Removing context '{}'", path);
- }
-
- /**
- * Retrieve the context for a given path
- *
- * @param path
- * @return the GemfireServletContext object or null if the path is not found
- */
- public ServletContext getContext(String path) {
- ServletContext ctx = contextMap.get(path);
- if (ctx == null) {
- LOG.warn("No context for requested contextPath '{}'", path);
- }
- return ctx;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/DummySessionManager.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/DummySessionManager.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/DummySessionManager.java
deleted file mode 100644
index 34d0978..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/DummySessionManager.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package com.gemstone.gemfire.modules.session.filter;
-
-import com.gemstone.gemfire.modules.session.filter.attributes.AbstractSessionAttributes;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import javax.servlet.http.HttpSession;
-
-/**
- * Class which fakes an in-memory basic session manager for testing purposes.
- */
-public class DummySessionManager implements SessionManager {
-
- /**
- * Map of sessions
- */
- private final Map<String, HttpSession> sessions =
- new HashMap<String, HttpSession>();
-
- private class Attributes extends AbstractSessionAttributes {
-
- @Override
- public Object putAttribute(String attr, Object value) {
- return attributes.put(attr, value);
- }
-
- @Override
- public Object removeAttribute(String attr) {
- return attributes.remove(attr);
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void start(Object config, ClassLoader loader) {
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void stop() {
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public HttpSession getSession(String id) {
- return sessions.get(id);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public HttpSession wrapSession(HttpSession nativeSession) {
- String id = generateId();
- AbstractSessionAttributes attributes = new Attributes();
- GemfireHttpSession session = new GemfireHttpSession(id, nativeSession);
- session.setManager(this);
- session.setAttributes(attributes);
- sessions.put(id, session);
-
- return session;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public HttpSession getWrappingSession(String nativeId) {
- return sessions.get(nativeId);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void putSession(HttpSession session) {
- // shouldn't ever get called
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void destroySession(String id) {
- sessions.remove(id);
- }
-
- @Override
- public String destroyNativeSession(String id) {
- return null;
- }
-
- public String getSessionCookieName() {
- return "JSESSIONID";
- }
-
- public String getJvmId() {
- return "jvm-id";
- }
-
- /**
- * Generate an ID string
- */
- private String generateId() {
- return UUID.randomUUID().toString().toUpperCase() + "-GF";
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireHttpSession.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireHttpSession.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireHttpSession.java
deleted file mode 100644
index 2406ce7..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireHttpSession.java
+++ /dev/null
@@ -1,517 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-
-package com.gemstone.gemfire.modules.session.filter;
-
-import com.gemstone.gemfire.DataSerializable;
-import com.gemstone.gemfire.DataSerializer;
-import com.gemstone.gemfire.Delta;
-import com.gemstone.gemfire.Instantiator;
-import com.gemstone.gemfire.InvalidDeltaException;
-import com.gemstone.gemfire.modules.session.filter.attributes.AbstractSessionAttributes;
-import com.gemstone.gemfire.modules.session.filter.attributes.SessionAttributes;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.concurrent.atomic.AtomicBoolean;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionContext;
-
-import com.gemstone.gemfire.modules.util.ClassLoaderObjectInputStream;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class which implements a Gemfire persisted {@code HttpSession}
- */
-public class GemfireHttpSession implements
- HttpSession, DataSerializable, Delta {
-
- private static transient final Logger LOG =
- LoggerFactory.getLogger(GemfireHttpSession.class.getName());
-
- /**
- * Serial id
- */
- private static final long serialVersionUID = 238915238964017823L;
-
- /**
- * Id for the session
- */
- private String id;
-
- /**
- * Attributes really hold the essence of persistence.
- */
- private SessionAttributes attributes;
-
- private transient SessionManager manager;
-
- private HttpSession nativeSession = null;
-
- /**
- * A session becomes invalid if it is explicitly invalidated or if it
- * expires.
- */
- private boolean isValid = true;
-
- private boolean isNew = true;
-
- private boolean isDirty = false;
-
- /**
- * This is set during serialization and then reset by the SessionManager when
- * it is retrieved from the attributes.
- */
- private AtomicBoolean serialized = new AtomicBoolean(false);
-
- /**
- * Register ourselves for de-serialization
- */
- static {
- Instantiator.register(new Instantiator(GemfireHttpSession.class, 27315) {
- @Override
- public DataSerializable newInstance() {
- return new GemfireHttpSession();
- }
- });
- }
-
- /**
- * Constructor used for de-serialization
- */
- private GemfireHttpSession() {
- }
-
- /**
- * Constructor
- */
- public GemfireHttpSession(String id, HttpSession nativeSession) {
- this();
- this.id = id;
- this.nativeSession = nativeSession;
- if (nativeSession != null) {
- attributes.setMaxInactiveInterval(nativeSession.getMaxInactiveInterval());
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Object getAttribute(String name) {
- if (!isValid) {
- throw new IllegalStateException("Session is already invalidated");
- }
- Object obj = attributes.getAttribute(name);
-
- if (obj != null) {
- Object tmpObj = null;
- ClassLoader loader = ((GemfireSessionManager) manager).getReferenceClassLoader();
-
- if (obj.getClass().getClassLoader() != loader) {
- LOG.debug(
- "Attribute '{}' needs to be reconstructed with a new classloader",
- name);
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try {
- ObjectOutputStream oos = new ObjectOutputStream(baos);
- oos.writeObject(obj);
- oos.close();
-
- ObjectInputStream ois = new ClassLoaderObjectInputStream(
- new ByteArrayInputStream(baos.toByteArray()),
- loader);
- tmpObj = ois.readObject();
- } catch (IOException e) {
- LOG.error("Exception while recreating attribute '" + name +
- "'", e);
- } catch (ClassNotFoundException e) {
- LOG.error("Exception while recreating attribute '" + name +
- "'", e);
- }
- if (tmpObj != null) {
- setAttribute(name, tmpObj);
- obj = tmpObj;
- }
- }
- }
-
- return obj;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Enumeration getAttributeNames() {
- if (!isValid) {
- throw new IllegalStateException("Session is already invalidated");
- }
- return Collections.enumeration(attributes.getAttributeNames());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public long getCreationTime() {
- if (nativeSession != null) {
- return nativeSession.getCreationTime();
- } else {
- return 0;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getId() {
- return id;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public long getLastAccessedTime() {
- if (!isValid) {
- throw new IllegalStateException("Session is already invalidated");
- }
- return attributes.getLastAccessedTime();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ServletContext getServletContext() {
- if (nativeSession != null) {
- return nativeSession.getServletContext();
- } else {
- return null;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public HttpSessionContext getSessionContext() {
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Object getValue(String name) {
- return getAttribute(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String[] getValueNames() {
- return attributes.getAttributeNames().toArray(new String[0]);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void invalidate() {
- nativeSession.invalidate();
- manager.destroySession(id);
- isValid = false;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean isNew() {
- if (!isValid) {
- throw new IllegalStateException("Session is already invalidated");
- }
- return isNew;
- }
-
- public void setIsNew(boolean isNew) {
- this.isNew = isNew;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setMaxInactiveInterval(int interval) {
- if (nativeSession != null) {
- nativeSession.setMaxInactiveInterval(interval);
- }
- attributes.setMaxInactiveInterval(interval);
- isDirty = true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int getMaxInactiveInterval() {
- if (nativeSession != null) {
- return nativeSession.getMaxInactiveInterval();
- } else {
- return attributes.getMaxIntactiveInterval();
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void putValue(String name, Object value) {
- setAttribute(name, value);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeAttribute(final String name) {
- LOG.debug("Session {} removing attribute {}", getId(), name);
- nativeSession.removeAttribute(name);
- attributes.removeAttribute(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeValue(String name) {
- removeAttribute(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setAttribute(final String name, final Object value) {
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("Session {} setting attribute {} = '{}'",
- new Object[]{id, name, value});
- }
-
- isDirty = true;
- nativeSession.setAttribute(name, value);
- if (value == null) {
- removeAttribute(name);
- } else {
- attributes.putAttribute(name, value);
- }
- }
-
- /**
- * Gemfire serialization {@inheritDoc}
- */
- @Override
- public void toData(DataOutput out) throws IOException {
- DataSerializer.writeString(id, out);
- DataSerializer.writeObject(attributes, out);
- }
-
- /**
- * Gemfire de-serialization {@inheritDoc}
- */
- @Override
- public void fromData(DataInput in) throws IOException,
- ClassNotFoundException {
- id = DataSerializer.readString(in);
- attributes = DataSerializer.readObject(in);
- if (getNativeSession() != null) {
- for (String s : attributes.getAttributeNames()) {
- getNativeSession().setAttribute(s, attributes.getAttribute(s));
- }
- }
-
- // Explicit sets
- serialized.set(true);
- attributes.setSession(this);
- }
-
- /**
- * These three methods handle delta propagation and are deferred to the
- * attribute object.
- */
- @Override
- public boolean hasDelta() {
- return isDirty;
- }
-
- @Override
- public void toDelta(DataOutput out) throws IOException {
- if (attributes instanceof Delta) {
- ((Delta) attributes).toDelta(out);
- } else {
- toData(out);
- }
- }
-
- @Override
- public void fromDelta(DataInput in) throws IOException,
- InvalidDeltaException {
- if (attributes instanceof Delta) {
- ((Delta) attributes).fromDelta(in);
- } else {
- try {
- fromData(in);
- } catch (ClassNotFoundException cex) {
- throw new IOException("Unable to forward fromDelta() call "
- + "to fromData()", cex);
- }
- }
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("[id=").append(id)
- .append(", isNew=").append(isNew)
- .append(", isValid=").append(isValid)
- .append(", hasDelta=").append(hasDelta())
- .append(", lastAccessedTime=").append(attributes.getLastAccessedTime())
- .append(", jvmOwnerId=").append(attributes.getJvmOwnerId());
- builder.append("]");
- return builder.toString();
- }
-
- /**
- * Flush the session object to the region
- */
- public void putInRegion() {
-
- manager.putSession(this);
- isDirty = false;
- }
-
- /**
- * Determine whether the session is still valid or whether it has expired.
- *
- * @return true or false
- */
- public boolean isValid() {
- if (!isValid) {
- return false;
- }
- if (getMaxInactiveInterval() >= 0) {
- long now = System.currentTimeMillis();
- if (now - attributes.getLastAccessedTime() >= getMaxInactiveInterval() * 1000) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Is this session dirty and should it be written to cache
- */
- public boolean isDirty() {
- return isDirty;
- }
-
- public void setManager(SessionManager manager) {
- this.manager = manager;
- }
-
- /**
- * For testing allow retrieval of the wrapped, native session.
- */
- public HttpSession getNativeSession() {
- return nativeSession;
- }
-
-
- public void setNativeSession(HttpSession session) {
- this.nativeSession = session;
- }
-
- /**
- * Handle the process of failing over the session to a new native session
- * object.
- *
- * @param session
- */
- public void failoverSession(HttpSession session) {
- LOG.debug("Failing over session {} to {}", getId(), session.getId());
- setNativeSession(session);
- for (String name : attributes.getAttributeNames()) {
- LOG.debug("Copying '{}' => {}", name, attributes.getAttribute(name));
- session.setAttribute(name, attributes.getAttribute(name));
- }
- session.setMaxInactiveInterval(attributes.getMaxIntactiveInterval());
- manager.putSession(this);
- }
-
-
- /**
- * Update the last accessed time
- */
- public void updateAccessTime() {
- attributes.setLastAccessedTime(System.currentTimeMillis());
- }
-
- /**
- * The {@code SessionManager} injects this when creating a new session.
- *
- * @param attributes
- */
- public void setAttributes(AbstractSessionAttributes attributes) {
- this.attributes = attributes;
- }
-
- /**
- * This is called on deserialization. You can only call it once to get a
- * meaningful value as it resets the serialized state. In other words, this
- * call is not idempotent.
- *
- * @return whether this object has just been serialized
- */
- public boolean justSerialized() {
- return serialized.getAndSet(false);
- }
-
- /**
- * Called when the session is about to go out of scope. If the session has
- * been defined to use async queued attributes then they will be written out
- * at this point.
- */
- public void commit() {
- attributes.setJvmOwnerId(manager.getJvmId());
- attributes.flush();
- }
-
- public String getJvmOwnerId() {
- if (attributes != null) {
- return attributes.getJvmOwnerId();
- }
-
- return null;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionException.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionException.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionException.java
deleted file mode 100644
index 1f58779..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package com.gemstone.gemfire.modules.session.filter;
-
-/**
- * Exception class for Gemfire Session Cache specific exceptions.
- */
-public class GemfireSessionException extends Exception {
-
- public GemfireSessionException() {
- super();
- }
-
- public GemfireSessionException(String message) {
- super(message);
- }
-
- public GemfireSessionException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public GemfireSessionException(Throwable cause) {
- super(cause);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionManager.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionManager.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionManager.java
deleted file mode 100644
index 0d44385..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/GemfireSessionManager.java
+++ /dev/null
@@ -1,503 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-
-package com.gemstone.gemfire.modules.session.filter;
-
-import com.gemstone.gemfire.cache.CacheClosedException;
-import com.gemstone.gemfire.cache.CacheFactory;
-import com.gemstone.gemfire.cache.EntryNotFoundException;
-import com.gemstone.gemfire.cache.control.ResourceManager;
-import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
-import com.gemstone.gemfire.modules.session.bootstrap.AbstractCache;
-import com.gemstone.gemfire.modules.session.bootstrap.ClientServerCache;
-import com.gemstone.gemfire.modules.session.bootstrap.LifecycleTypeAdapter;
-import com.gemstone.gemfire.modules.session.bootstrap.PeerToPeerCache;
-import com.gemstone.gemfire.modules.session.common.CacheProperty;
-import com.gemstone.gemfire.modules.session.common.ClientServerSessionCache;
-import com.gemstone.gemfire.modules.session.common.PeerToPeerSessionCache;
-import com.gemstone.gemfire.modules.session.common.SessionCache;
-import com.gemstone.gemfire.modules.session.filter.attributes.AbstractSessionAttributes;
-import com.gemstone.gemfire.modules.session.filter.attributes.DeltaQueuedSessionAttributes;
-import com.gemstone.gemfire.modules.session.filter.attributes.DeltaSessionAttributes;
-import com.gemstone.gemfire.modules.session.filter.attributes.ImmediateSessionAttributes;
-import com.gemstone.gemfire.modules.session.filter.util.TypeAwareMap;
-import com.gemstone.gemfire.modules.session.jmx.SessionStatistics;
-import com.gemstone.gemfire.modules.util.RegionHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.naming.InitialContext;
-import javax.servlet.FilterConfig;
-import javax.servlet.http.HttpSession;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * This class implements the session management using a Gemfire distributedCache
- * as a persistent store for the session objects
- */
-public class GemfireSessionManager implements SessionManager {
-
- private final Logger LOG;
-
- /**
- * Prefix of init param string used to set gemfire properties
- */
- private static final String GEMFIRE_PROPERTY = "gemfire.property.";
-
- /**
- * Prefix of init param string used to set gemfire distributedCache setting
- */
- private static final String GEMFIRE_CACHE = "gemfire.cache.";
-
- private static final String INIT_PARAM_CACHE_TYPE = "cache-type";
- private static final String CACHE_TYPE_CLIENT_SERVER = "client-server";
- private static final String CACHE_TYPE_PEER_TO_PEER = "peer-to-peer";
- private static final String INIT_PARAM_SESSION_COOKIE_NAME = "session-cookie-name";
- private static final String INIT_PARAM_JVM_ID = "jvm-id";
- private static final String DEFAULT_JVM_ID = "default";
-
- private SessionCache sessionCache = null;
-
- /**
- * Reference to the distributed system
- */
- private AbstractCache distributedCache = null;
-
- /**
- * Boolean indicating whether the manager is shutting down
- */
- private boolean isStopping = false;
-
- /**
- * Boolean indicating whether this manager is defined in the same context (war
- * / classloader) as the filter.
- */
- private boolean isolated = false;
-
- /**
- * Map of wrapping GemFire session id to native session id
- */
- private Map<String, String> nativeSessionMap =
- new HashMap<String, String>();
-
- /**
- * MBean for statistics
- */
- private SessionStatistics mbean;
-
- /**
- * This CL is used to compare against the class loader of attributes getting
- * pulled out of the cache. This variable should be set to the CL of the
- * filter running everything.
- */
- private ClassLoader referenceClassLoader;
-
- private String sessionCookieName = "JSESSIONID";
-
- /**
- * Give this JVM a unique identifier.
- */
- private String jvmId = "default";
-
- /**
- * Set up properties with default values
- */
- private TypeAwareMap<CacheProperty, Object> properties =
- new TypeAwareMap<CacheProperty, Object>(CacheProperty.class) {{
- put(CacheProperty.REGION_NAME, RegionHelper.NAME + "_sessions");
- put(CacheProperty.ENABLE_GATEWAY_DELTA_REPLICATION, Boolean.FALSE);
- put(CacheProperty.ENABLE_GATEWAY_REPLICATION, Boolean.FALSE);
- put(CacheProperty.ENABLE_DEBUG_LISTENER, Boolean.FALSE);
- put(CacheProperty.STATISTICS_NAME, "gemfire_statistics");
- put(CacheProperty.SESSION_DELTA_POLICY, "delta_queued");
- put(CacheProperty.REPLICATION_TRIGGER, "set");
- /**
- * For REGION_ATTRIBUTES_ID and ENABLE_LOCAL_CACHE the default
- * is different for ClientServerCache and PeerToPeerCache
- * so those values are set in the relevant constructors when
- * these properties are passed in to them.
- */
- }};
-
- public GemfireSessionManager() {
- LOG = LoggerFactory.getLogger(GemfireSessionManager.class.getName());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void start(Object conf, ClassLoader loader) {
- this.referenceClassLoader = loader;
- FilterConfig config = (FilterConfig) conf;
-
- startDistributedSystem(config);
- initializeSessionCache(config);
-
- // Register MBean
- registerMBean();
-
- if (distributedCache.getClass().getClassLoader() == loader) {
- isolated = true;
- }
-
- String sessionCookieName = config.getInitParameter(
- INIT_PARAM_SESSION_COOKIE_NAME);
- if (sessionCookieName != null && !sessionCookieName.isEmpty()) {
- this.sessionCookieName = sessionCookieName;
- LOG.info("Session cookie name set to: {}", this.sessionCookieName);
- }
-
- jvmId = config.getInitParameter(INIT_PARAM_JVM_ID);
- if (jvmId == null || jvmId.isEmpty()) {
- jvmId = DEFAULT_JVM_ID;
- }
-
- LOG.info("Started GemfireSessionManager (isolated={}, jvmId={})",
- isolated, jvmId);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void stop() {
- isStopping = true;
-
- if (isolated) {
- if (distributedCache != null) {
- LOG.info("Closing distributed cache - assuming isolated cache");
- distributedCache.close();
- }
- } else {
- LOG.info("Not closing distributed cache - assuming common cache");
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public HttpSession getSession(String id) {
- GemfireHttpSession session = (GemfireHttpSession) sessionCache.getOperatingRegion().get(
- id);
-
- if (session != null) {
- if (session.justSerialized()) {
- session.setManager(this);
- LOG.debug("Recovered serialized session {} (jvmId={})", id,
- session.getJvmOwnerId());
- }
- LOG.debug("Retrieved session id {}", id);
- } else {
- LOG.debug("Session id {} not found", id);
- }
- return session;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public HttpSession wrapSession(HttpSession nativeSession) {
- String id = generateId();
- GemfireHttpSession session =
- new GemfireHttpSession(id, nativeSession);
-
- /**
- * Set up the attribute container depending on how things are configured
- */
- AbstractSessionAttributes attributes;
- if ("delta_queued".equals(
- properties.get(CacheProperty.SESSION_DELTA_POLICY))) {
- attributes = new DeltaQueuedSessionAttributes();
- ((DeltaQueuedSessionAttributes) attributes).setReplicationTrigger(
- (String) properties.get(CacheProperty.REPLICATION_TRIGGER));
- } else if ("delta_immediate".equals(
- properties.get(CacheProperty.SESSION_DELTA_POLICY))) {
- attributes = new DeltaSessionAttributes();
- } else if ("immediate".equals(
- properties.get(CacheProperty.SESSION_DELTA_POLICY))) {
- attributes = new ImmediateSessionAttributes();
- } else {
- attributes = new DeltaSessionAttributes();
- LOG.warn(
- "No session delta policy specified - using default of 'delta_immediate'");
- }
-
- attributes.setSession(session);
- attributes.setJvmOwnerId(jvmId);
-
- session.setManager(this);
- session.setAttributes(attributes);
-
- LOG.debug("Creating new session {}", id);
- sessionCache.getOperatingRegion().put(id, session);
-
- mbean.incActiveSessions();
-
- return session;
- }
-
- /**
- * {@inheritDoc}
- */
- public HttpSession getWrappingSession(String nativeId) {
- HttpSession session = null;
- String gemfireId = getGemfireSessionIdFromNativeId(nativeId);
-
- if (gemfireId != null) {
- session = getSession(gemfireId);
- }
- return session;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void destroySession(String id) {
- if (!isStopping) {
- try {
- GemfireHttpSession session = (GemfireHttpSession) sessionCache.getOperatingRegion().get(
- id);
- if (session != null && session.getJvmOwnerId().equals(jvmId)) {
- LOG.debug("Destroying session {}", id);
- sessionCache.getOperatingRegion().destroy(id);
- mbean.decActiveSessions();
- }
- } catch (EntryNotFoundException nex) {
- }
- } else {
- if (sessionCache.isClientServer()) {
- LOG.debug("Destroying session {}", id);
- try {
- sessionCache.getOperatingRegion().localDestroy(id);
- } catch (EntryNotFoundException nex) {
- // Ignored
- } catch (CacheClosedException ccex) {
- // Ignored
- }
- } else {
- GemfireHttpSession session = (GemfireHttpSession) sessionCache.getOperatingRegion().get(
- id);
- if (session != null) {
- session.setNativeSession(null);
- }
- }
- }
-
- synchronized (nativeSessionMap) {
- String nativeId = nativeSessionMap.remove(id);
- LOG.debug("destroySession called for {} wrapping {}", id, nativeId);
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void putSession(HttpSession session) {
- sessionCache.getOperatingRegion().put(session.getId(), session);
- mbean.incRegionUpdates();
- nativeSessionMap.put(session.getId(),
- ((GemfireHttpSession) session).getNativeSession().getId());
- }
-
- @Override
- public String destroyNativeSession(String nativeId) {
- String gemfireSessionId = getGemfireSessionIdFromNativeId(nativeId);
- if (gemfireSessionId != null) {
- destroySession(gemfireSessionId);
- }
- return gemfireSessionId;
- }
-
- public ClassLoader getReferenceClassLoader() {
- return referenceClassLoader;
- }
-
- /**
- * This method is called when a native session gets destroyed. It will check
- * if the GemFire session is actually still valid/not expired and will then
- * attach a new, native session.
- *
- * @param nativeId the id of the native session
- * @return the id of the newly attached native session or null if the GemFire
- * session was already invalid
- */
- public String refreshSession(String nativeId) {
- String gemfireId = getGemfireSessionIdFromNativeId(nativeId);
- if (gemfireId == null) {
- return null;
- }
-
- GemfireHttpSession session = (GemfireHttpSession) sessionCache.getOperatingRegion().get(
- gemfireId);
- if (session.isValid()) {
-
- }
-
- return null;
- }
-
- public String getSessionCookieName() {
- return sessionCookieName;
- }
-
- public String getJvmId() {
- return jvmId;
- }
-
-
- ///////////////////////////////////////////////////////////////////////
- // Private methods
-
- private String getGemfireSessionIdFromNativeId(String nativeId) {
- if (nativeId == null) {
- return null;
- }
-
- for (Map.Entry<String, String> e : nativeSessionMap.entrySet()) {
- if (nativeId.equals(e.getValue())) {
- return e.getKey();
- }
- }
- return null;
- }
-
- /**
- * Start the underlying distributed system
- *
- * @param config
- */
- private void startDistributedSystem(FilterConfig config) {
- // Get the distributedCache type
- final String cacheType = config.getInitParameter(INIT_PARAM_CACHE_TYPE);
- if (CACHE_TYPE_CLIENT_SERVER.equals(cacheType)) {
- distributedCache = ClientServerCache.getInstance();
- } else if (CACHE_TYPE_PEER_TO_PEER.equals(cacheType)) {
- distributedCache = PeerToPeerCache.getInstance();
- } else {
- LOG.error("No 'cache-type' initialization param set. "
- + "Cache will not be started");
- return;
- }
-
- if (!distributedCache.isStarted()) {
- /**
- * Process all the init params and see if any apply to the
- * distributed system.
- */
- for (Enumeration<String> e = config.getInitParameterNames(); e.hasMoreElements(); ) {
- String param = e.nextElement();
- if (!param.startsWith(GEMFIRE_PROPERTY)) {
- continue;
- }
-
- String gemfireProperty = param.substring(GEMFIRE_PROPERTY.length());
- LOG.info("Setting gemfire property: {} = {}",
- gemfireProperty, config.getInitParameter(param));
- distributedCache.setProperty(gemfireProperty,
- config.getInitParameter(param));
- }
-
- distributedCache.lifecycleEvent(LifecycleTypeAdapter.START);
- }
- }
-
- /**
- * Initialize the distributedCache
- */
- private void initializeSessionCache(FilterConfig config) {
- // Retrieve the distributedCache
- GemFireCacheImpl cache = (GemFireCacheImpl) CacheFactory.getAnyInstance();
- if (cache == null) {
- throw new IllegalStateException("No cache exists. Please configure "
- + "either a PeerToPeerCacheLifecycleListener or "
- + "ClientServerCacheLifecycleListener in the "
- + "server.xml file.");
- }
-
- /**
- * Process all the init params and see if any apply to the distributedCache
- */
- ResourceManager rm = cache.getResourceManager();
- for (Enumeration<String> e = config.getInitParameterNames(); e.hasMoreElements(); ) {
- String param = e.nextElement();
-
- // Uggh - don't like this non-generic stuff
- if (param.equalsIgnoreCase("criticalHeapPercentage")) {
- float val = Float.parseFloat(config.getInitParameter(param));
- rm.setCriticalHeapPercentage(val);
- }
-
- if (param.equalsIgnoreCase("evictionHeapPercentage")) {
- float val = Float.parseFloat(config.getInitParameter(param));
- rm.setEvictionHeapPercentage(val);
- }
-
-
- if (!param.startsWith(GEMFIRE_CACHE)) {
- continue;
- }
-
- String gemfireWebParam = param.substring(GEMFIRE_CACHE.length());
- LOG.info("Setting cache parameter: {} = {}",
- gemfireWebParam, config.getInitParameter(param));
- properties.put(CacheProperty.valueOf(gemfireWebParam.toUpperCase()),
- config.getInitParameter(param));
- }
-
- // Create the appropriate session distributedCache
- sessionCache = cache.isClient()
- ? new ClientServerSessionCache(cache, properties)
- : new PeerToPeerSessionCache(cache, properties);
-
- // Initialize the session distributedCache
- sessionCache.initialize();
- }
-
- /**
- * Register a bean for statistic gathering purposes
- */
- private void registerMBean() {
- mbean = new SessionStatistics();
-
- try {
- InitialContext ctx = new InitialContext();
- MBeanServer mbs = MBeanServer.class.cast(
- ctx.lookup("java:comp/env/jmx/runtime"));
- ObjectName oname = new ObjectName(
- Constants.SESSION_STATISTICS_MBEAN_NAME);
-
- mbs.registerMBean(mbean, oname);
- } catch (Exception ex) {
- LOG.warn("Unable to register statistics MBean. Error: {}",
- ex.getMessage());
- }
- }
-
-
- /**
- * Generate an ID string
- */
- private String generateId() {
- return UUID.randomUUID().toString().toUpperCase() + "-GF";
- }
-
- AbstractCache getCache() {
- return distributedCache;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ListenerEventType.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ListenerEventType.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ListenerEventType.java
deleted file mode 100644
index 3b5f468..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/ListenerEventType.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package com.gemstone.gemfire.modules.session.filter;
-
-/**
- * Enumeration of all possible event types which can be listened for.
- */
-public enum ListenerEventType {
-
- /**
- * HttpSessionAttributeListener
- */
- SESSION_ATTRIBUTE_ADDED,
- SESSION_ATTRIBUTE_REMOVED,
- SESSION_ATTRIBUTE_REPLACED,
-
- /**
- * HttpSessionBindingListener
- */
- SESSION_VALUE_BOUND,
- SESSION_VALUE_UNBOUND,
-
- /**
- * HttpSessionListener
- */
- SESSION_CREATED,
- SESSION_DESTROYED,
-
- /**
- * HttpSessionActivationListener
- */
- SESSION_WILL_ACTIVATE,
- SESSION_DID_PASSIVATE,
-
- /**
- * ServletContextListener
- */
- SERVLET_CONTEXT_INITIALIZED,
- SERVLET_CONTEXT_DESTROYED,
-
- /**
- * ServletContextAttributeListener
- */
- SERVLET_CONTEXT_ATTRIBUTE_ADDED,
- SERVLET_CONTEXT_ATTRIBUTE_REMOVED,
- SERVLET_CONTEXT_ATTRIBUTE_REPLACED,
-
- /**
- * ServletRequestListener
- */
- SERVLET_REQUEST_DESTROYED,
- SERVLET_REQUEST_INITIALIZED,
-
- /**
- * ServletRequestAttributeListener
- */
- SERVLET_REQUEST_ATTRIBUTE_ADDED,
- SERVLET_REQUEST_ATTRIBUTE_REMOVED,
- SERVLET_REQUEST_ATTRIBUTE_REPLACED;
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/SessionManager.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/SessionManager.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/SessionManager.java
deleted file mode 100644
index bd39a75..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/SessionManager.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-
-package com.gemstone.gemfire.modules.session.filter;
-
-import javax.servlet.http.HttpSession;
-
-/**
- * Interface to session management. This class would be responsible for creating
- * new sessions.
- */
-public interface SessionManager {
-
- /**
- * Start the manager possibly using the config passed in.
- *
- * @param config Config object specific to individual implementations.
- * @param loader This is a hack. When the manager is started it wants to be
- * able to determine if the cache, which it would create, and
- * the filter which starts everything, are defined by the same
- * classloader. This is so that during shutdown, the manager can
- * decide whether or not to also stop the cache. This option
- * allows the filter's classloader to be passed in.
- */
- public void start(Object config, ClassLoader loader);
-
- /**
- * Stop the session manager and free up any resources.
- */
- public void stop();
-
- /**
- * Write the session to the region
- *
- * @param session the session to write
- */
- public void putSession(HttpSession session);
-
- /**
- * Return a session if it exists or null otherwise
- *
- * @param id The session id to attempt to retrieve
- * @return a HttpSession object if a session was found otherwise null.
- */
- public HttpSession getSession(String id);
-
- /**
- * Create a new session, wrapping a container session.
- *
- * @param nativeSession
- * @return the HttpSession object
- */
- public HttpSession wrapSession(HttpSession nativeSession);
-
- /**
- * Get the wrapped (GemFire) session from a native session id. This method
- * would typically be used from within session/http event listeners which
- * receive the original session id.
- *
- * @param nativeId
- * @return the wrapped GemFire session which maps the native session
- */
- public HttpSession getWrappingSession(String nativeId);
-
- /**
- * Destroy the session associated with the given id.
- *
- * @param id The id of the session to destroy.
- */
- public void destroySession(String id);
-
- /**
- * Destroy the session associated with a given native session
- *
- * @param id the id of the native session
- * @return the corresponding Gemfire session which wrapped the native session
- * and was destroyed.
- */
- public String destroyNativeSession(String id);
-
- /**
- * Returns the cookie name used to hold the session id. By default this is
- * JSESSIONID.
- *
- * @return the name of the cookie which contains the session id
- */
- public String getSessionCookieName();
-
- /**
- * Get the JVM Id - this is a unique string used internally to identify who
- * last touched a session.
- *
- * @return the jvm id
- */
- public String getJvmId();
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractDeltaSessionAttributes.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractDeltaSessionAttributes.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractDeltaSessionAttributes.java
deleted file mode 100644
index 68341a5..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractDeltaSessionAttributes.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializer;
-import com.gemstone.gemfire.Delta;
-import com.gemstone.gemfire.InvalidDeltaException;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This abstract class contains the structures and methods to handle delta
- * updates to attributes.
- */
-public abstract class AbstractDeltaSessionAttributes
- extends AbstractSessionAttributes implements Delta {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(AbstractDeltaSessionAttributes.class.getName());
-
- /**
- * This map holds the updates to attributes
- */
- protected transient Map<String, DeltaEvent> deltas =
- Collections.synchronizedMap(new HashMap<String, DeltaEvent>());
-
- @Override
- public boolean hasDelta() {
- return true;
- }
-
- @Override
- public void toDelta(DataOutput out) throws IOException {
- out.writeInt(maxInactiveInterval);
- out.writeLong(lastAccessedTime);
-
- synchronized (deltas) {
- DataSerializer.writeInteger(deltas.size(), out);
- for (Map.Entry<String, DeltaEvent> e : deltas.entrySet()) {
- DataSerializer.writeString(e.getKey(), out);
- DataSerializer.writeObject(e.getValue(), out);
- }
- deltas.clear();
- }
-
- out.writeUTF(jvmOwnerId);
- }
-
- @Override
- public void fromDelta(DataInput in)
- throws IOException, InvalidDeltaException {
- maxInactiveInterval = in.readInt();
- lastAccessedTime = in.readLong();
- Map<String, DeltaEvent> localDeltas = new HashMap<String, DeltaEvent>();
- try {
- int size = DataSerializer.readInteger(in);
- for (int i = 0; i < size; i++) {
- String key = DataSerializer.readString(in);
- DeltaEvent evt = DataSerializer.readObject(in);
- localDeltas.put(key, evt);
- }
- } catch (ClassNotFoundException ex) {
- LOG.error("Unable to de-serialize delta events", ex);
- return;
- }
-
- LOG.debug("Processing {} delta events for {}",
- localDeltas.size(), session);
- for (DeltaEvent e : localDeltas.values()) {
- if (e.isUpdate()) {
- attributes.put(e.getName(), e.getValue());
- if (session.getNativeSession() != null) {
- session.getNativeSession().setAttribute(e.getName(), e.getValue());
- }
- } else {
- attributes.remove(e.getName());
- if (session.getNativeSession() != null) {
- session.getNativeSession().setAttribute(e.getName(), null);
- }
- }
- }
- jvmOwnerId = in.readUTF();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractSessionAttributes.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractSessionAttributes.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractSessionAttributes.java
deleted file mode 100644
index d76fb93..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/AbstractSessionAttributes.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializer;
-import com.gemstone.gemfire.internal.util.BlobHelper;
-import com.gemstone.gemfire.modules.session.filter.GemfireHttpSession;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Abstract implementation for attributes. Should be sub-classed to provide
- * differing implementations for synchronous or delta propagation. The backing
- * store used is defined by the session manager.
- */
-public abstract class AbstractSessionAttributes implements SessionAttributes {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(AbstractSessionAttributes.class.getName());
-
- /**
- * Internal attribute store.
- */
- protected Map<String, Object> attributes =
- Collections.synchronizedMap(new HashMap<String, Object>());
-
- /**
- * The session to which these attributes belong
- */
- protected transient GemfireHttpSession session;
-
- /**
- * The last accessed time
- */
- protected long lastAccessedTime;
-
- /**
- * The maximum inactive interval. Default is 1800 seconds.
- */
- protected int maxInactiveInterval = 60 * 30;
-
- /**
- * The JVM Id who last committed these attributes
- */
- protected String jvmOwnerId;
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setSession(GemfireHttpSession session) {
- this.session = session;
- }
-
- /**
- * {@inheritDoc} The actual de-serialization of any domain objects is deferred
- * until the point at which they are actually retrieved by the application
- * layer.
- */
- @Override
- public Object getAttribute(String name) {
- Object value = attributes.get(name);
-
- // If the value is a byte[] (meaning it came from the server),
- // deserialize it and re-add it to attributes map before returning it.
- if (value instanceof byte[]) {
- try {
- value = BlobHelper.deserializeBlob((byte[]) value);
- attributes.put(name, value);
- } catch (Exception iox) {
- LOG.error("Attribute '" + name +
- " contains a byte[] that cannot be deserialized due "
- + "to the following exception", iox);
- }
- }
-
- return value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Set<String> getAttributeNames() {
- return attributes.keySet();
- }
-
- /**
- * {@inheritDoc} +
- */
- @Override
- public void setMaxInactiveInterval(int interval) {
- maxInactiveInterval = interval;
- }
-
- @Override
- public int getMaxIntactiveInterval() {
- return maxInactiveInterval;
- }
-
- @Override
- public void setLastAccessedTime(long time) {
- lastAccessedTime = time;
- }
-
- @Override
- public long getLastAccessedTime() {
- return lastAccessedTime;
- }
-
- /**
- * {@inheritDoc} This method calls back into the session to flush the whole
- * session including its attributes.
- */
- @Override
- public void flush() {
- session.putInRegion();
- }
-
- /**
- * Use DeltaEvents to propagate the actual attribute data - DeltaEvents turn
- * the values into byte arrays which means that the actual domain classes are
- * not required on the server.
- */
- @Override
- public void toData(DataOutput out) throws IOException {
- out.writeInt(maxInactiveInterval);
- out.writeLong(lastAccessedTime);
-
- synchronized (attributes) {
- out.writeInt(attributes.size());
- for (Map.Entry<String, Object> entry : attributes.entrySet()) {
- DeltaEvent delta = new DeltaEvent(true, entry.getKey(),
- entry.getValue());
- DataSerializer.writeObject(delta, out);
- }
- }
-
- out.writeUTF(jvmOwnerId);
- }
-
- @Override
- public void fromData(
- DataInput in) throws IOException, ClassNotFoundException {
- maxInactiveInterval = in.readInt();
- lastAccessedTime = in.readLong();
- int size = in.readInt();
- while (size-- > 0) {
- DeltaEvent event = DataSerializer.readObject(in);
- attributes.put(event.getName(), event.getValue());
- }
- jvmOwnerId = in.readUTF();
- }
-
- @Override
- public void setJvmOwnerId(String jvmId) {
- this.jvmOwnerId = jvmId;
- }
-
- @Override
- public String getJvmOwnerId() {
- return jvmOwnerId;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaEvent.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaEvent.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaEvent.java
deleted file mode 100644
index 61258ea..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaEvent.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializable;
-import com.gemstone.gemfire.DataSerializer;
-import com.gemstone.gemfire.internal.util.BlobHelper;
-import com.gemstone.gemfire.modules.session.filter.GemfireHttpSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-/**
- * Capture the update to a particular name
- */
-public class DeltaEvent implements DataSerializable {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(DeltaEvent.class.getName());
- /**
- * The event is either an update (true) or a remove (false)
- */
- private boolean update;
-
- private String name;
-
- private Object value = null;
-
- private GemfireHttpSession session = null;
-
- /**
- * Constructor for de-serialization only
- */
- public DeltaEvent() {
- }
-
- /**
- * Constructor which creates a 'deferred' event. This is used when the value
- * should only be applied when the object is serialized.
- *
- * @param session the session from which the value ultimately will be
- * retrieved
- * @param attribute the name of the attribute
- */
- public DeltaEvent(GemfireHttpSession session, String attribute) {
- this.session = session;
- this.name = attribute;
- this.update = true;
- }
-
- public DeltaEvent(boolean update, String attribute, Object value) {
- this.update = update;
- this.name = attribute;
- this.value = value;
- blobifyValue();
- }
-
- private void blobifyValue() {
- if (value instanceof byte[]) {
- LOG.warn("Session attribute is already a byte[] - problems may "
- + "occur transmitting this delta.");
- }
- try {
- value = BlobHelper.serializeToBlob(value);
- } catch (IOException iox) {
- LOG.error("Attribute '" + name + "' value: " + value
- + " cannot be serialized due to the following exception", iox);
- }
- }
-
- public boolean isUpdate() {
- return update;
- }
-
- public String getName() {
- return name;
- }
-
- public Object getValue() {
- return value;
- }
-
- @Override
- public void toData(DataOutput out) throws IOException {
- if (session != null) {
- value = session.getNativeSession().getAttribute(name);
- blobifyValue();
- }
- out.writeBoolean(update);
- DataSerializer.writeString(name, out);
- DataSerializer.writeObject(value, out);
- }
-
- @Override
- public void fromData(
- DataInput in) throws IOException, ClassNotFoundException {
- update = in.readBoolean();
- name = DataSerializer.readString(in);
- value = DataSerializer.readObject(in);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaQueuedSessionAttributes.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaQueuedSessionAttributes.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaQueuedSessionAttributes.java
deleted file mode 100644
index 678141f..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaQueuedSessionAttributes.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializable;
-import com.gemstone.gemfire.Instantiator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class implements delayed attribute delta propagation. Updates to
- * attributes are only propagated once the session goes out of scope - i.e. as
- * the request is done being processed.
- */
-public class DeltaQueuedSessionAttributes extends AbstractDeltaSessionAttributes {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(DeltaQueuedSessionAttributes.class.getName());
-
- private Trigger trigger = Trigger.SET;
-
- private enum Trigger {
- SET,
- SET_AND_GET;
- }
-
- /**
- * Register ourselves for de-serialization
- */
- static {
- Instantiator.register(
- new Instantiator(DeltaQueuedSessionAttributes.class, 3479) {
- @Override
- public DataSerializable newInstance() {
- return new DeltaQueuedSessionAttributes();
- }
- });
- }
-
- /**
- * Default constructor
- */
- public DeltaQueuedSessionAttributes() {
- }
-
- public void setReplicationTrigger(String trigger) {
- this.trigger = Trigger.valueOf(trigger.toUpperCase());
- }
-
- @Override
- public Object getAttribute(String attr) {
- if (trigger == Trigger.SET_AND_GET) {
- deltas.put(attr, new DeltaEvent(session, attr));
- }
- return super.getAttribute(attr);
- }
-
- /**
- * {@inheritDoc} Put an attribute, setting the dirty flag. The changes are
- * flushed at the end of filter processing.
- */
- @Override
- public Object putAttribute(String attr, Object value) {
- Object obj = attributes.put(attr, value);
- deltas.put(attr, new DeltaEvent(true, attr, value));
- return obj;
- }
-
- /**
- * {@inheritDoc} Remove an attribute, setting the dirty flag. The changes are
- * flushed at the end of filter processing.
- */
- @Override
- public Object removeAttribute(String attr) {
- Object obj = attributes.remove(attr);
- deltas.put(attr, new DeltaEvent(false, attr, null));
- return obj;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaSessionAttributes.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaSessionAttributes.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaSessionAttributes.java
deleted file mode 100644
index 349cfc2..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/DeltaSessionAttributes.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializable;
-import com.gemstone.gemfire.Instantiator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class implements synchronous attribute delta propagation. Updates to
- * attributes are immediately propagated.
- */
-public class DeltaSessionAttributes extends AbstractDeltaSessionAttributes {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(DeltaSessionAttributes.class.getName());
-
- /**
- * Register ourselves for de-serialization
- */
- static {
- Instantiator.register(new Instantiator(DeltaSessionAttributes.class, 347) {
- @Override
- public DataSerializable newInstance() {
- return new DeltaSessionAttributes();
- }
- });
- }
-
- /**
- * Default constructor
- */
- public DeltaSessionAttributes() {
- }
-
- /**
- * {@inheritDoc} Put an attribute, setting the dirty flag and immediately
- * flushing the delta queue.
- */
- @Override
- public Object putAttribute(String attr, Object value) {
- Object obj = attributes.put(attr, value);
- deltas.put(attr, new DeltaEvent(true, attr, value));
- flush();
- return obj;
- }
-
- /**
- * {@inheritDoc} Remove an attribute, setting the dirty flag and immediately
- * flushing the delta queue.
- */
- @Override
- public Object removeAttribute(String attr) {
- Object obj = attributes.remove(attr);
- deltas.put(attr, new DeltaEvent(false, attr, null));
- flush();
- return obj;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/ImmediateSessionAttributes.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/ImmediateSessionAttributes.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/ImmediateSessionAttributes.java
deleted file mode 100644
index 4cfbe19..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/ImmediateSessionAttributes.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializable;
-import com.gemstone.gemfire.DataSerializer;
-import com.gemstone.gemfire.Instantiator;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class implements immediately transmitted attributes. All attributes are
- * transmitted for every attribute update. This is bound to be a performance hit
- * in some cases but ensures much higher data availability.
- */
-public class ImmediateSessionAttributes extends AbstractSessionAttributes {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(ImmediateSessionAttributes.class.getName());
-
- /**
- * Register ourselves for de-serialization
- */
- static {
- Instantiator.register(
- new Instantiator(ImmediateSessionAttributes.class, 347) {
- @Override
- public DataSerializable newInstance() {
- return new ImmediateSessionAttributes();
- }
- });
- }
-
- /**
- * Default constructor
- */
- public ImmediateSessionAttributes() {
- }
-
- @Override
- public Object putAttribute(String attr, Object value) {
- Object obj = attributes.put(attr, value);
- flush();
- return obj;
- }
-
- @Override
- public Object removeAttribute(String attr) {
- Object obj = attributes.remove(attr);
- flush();
- return obj;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/QueuedSessionAttributes.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/QueuedSessionAttributes.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/QueuedSessionAttributes.java
deleted file mode 100644
index 769bd59..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/QueuedSessionAttributes.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializable;
-import com.gemstone.gemfire.DataSerializer;
-import com.gemstone.gemfire.Instantiator;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class implements an attribute container which delays sending updates
- * until the session goes out of scope. All attributes are transmitted during
- * the update.
- */
-public class QueuedSessionAttributes extends AbstractSessionAttributes {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(QueuedSessionAttributes.class.getName());
-
- /**
- * Register ourselves for de-serialization
- */
- static {
- Instantiator.register(new Instantiator(QueuedSessionAttributes.class, 347) {
- @Override
- public DataSerializable newInstance() {
- return new QueuedSessionAttributes();
- }
- });
- }
-
- /**
- * Default constructor
- */
- public QueuedSessionAttributes() {
- }
-
- @Override
- public Object putAttribute(String attr, Object value) {
- Object obj = attributes.put(attr, value);
- return obj;
- }
-
- @Override
- public Object removeAttribute(String attr) {
- Object obj = attributes.remove(attr);
- return obj;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/SessionAttributes.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/SessionAttributes.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/SessionAttributes.java
deleted file mode 100644
index 552477f..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/attributes/SessionAttributes.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-
-package com.gemstone.gemfire.modules.session.filter.attributes;
-
-import com.gemstone.gemfire.DataSerializable;
-import com.gemstone.gemfire.modules.session.filter.GemfireHttpSession;
-
-import java.util.Set;
-
-/**
- * Interface for session attribute storage. In reality, this interface is
- * responsible for anything, in the session which needs to be propagated for
- * caching - as such it also includes other 'attributes' such as
- * maxInactiveInterval and lastAccessedTime
- */
-public interface SessionAttributes extends DataSerializable {
-
- /**
- * Set the session to which these attributes belong.
- *
- * @param session the session to set
- */
- public void setSession(GemfireHttpSession session);
-
- /**
- * Set an attribute value.
- *
- * @param attr the name of the attribute to set
- * @param value the value for the attribute
- * @return the value object
- */
- public Object putAttribute(String attr, Object value);
-
- /**
- * Retrieve an attribute's value.
- *
- * @param attr the name of the attribute
- * @return the object associated with the attribute or null if none exists.
- */
- public Object getAttribute(String attr);
-
- /**
- * Remove the named attribute.
- *
- * @param attr the name of the attribute to remove
- * @return the value of the attribute removed or null if the named attribute
- * did not exist.
- */
- public Object removeAttribute(String attr);
-
- /**
- * Return a set of all attribute names.
- *
- * @return a set of all attribute names
- */
- public Set<String> getAttributeNames();
-
- /**
- * Set the max inactive interval for replication to other systems
- *
- * @param interval the time interval in seconds
- */
- public void setMaxInactiveInterval(int interval);
-
- /**
- * Retrieve the max inactive interval
- *
- * @return the max inactive interval in seconds
- */
- public int getMaxIntactiveInterval();
-
- /**
- * Set the last accessed time for replication to other systems
- *
- * @param time the last accessed time in milliseconds
- */
- public void setLastAccessedTime(long time);
-
- /**
- * Return the last accessed time in milliseconds
- *
- * @return the last accessed time
- */
- public long getLastAccessedTime();
-
- /**
- * Explicitly flush the attributes to backing store.
- */
- public void flush();
-
- /**
- * Return the last jvm which 'owned' these attributes
- *
- * @return the jvmId
- */
- public String getJvmOwnerId();
-
- /**
- * Set the jvmId. This is set every time the attributes are flushed to the
- * cache.
- *
- * @param jvmId
- */
- public void setJvmOwnerId(String jvmId);
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92ee6a79/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/util/NamedThreadFactory.java
----------------------------------------------------------------------
diff --git a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/util/NamedThreadFactory.java b/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/util/NamedThreadFactory.java
deleted file mode 100644
index edf1e60..0000000
--- a/modules/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/filter/util/NamedThreadFactory.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*=========================================================================
- * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
- * This product is protected by U.S. and international copyright
- * and intellectual property laws. Pivotal products are covered by
- * one or more patents listed at http://www.pivotal.io/patents.
- *=========================================================================
- */
-
-package com.gemstone.gemfire.modules.session.filter.util;
-
-import java.lang.Thread.UncaughtExceptionHandler;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Factory to create named threads for easy identification at runtime.
- */
-public class NamedThreadFactory implements ThreadFactory {
-
- private static final Logger LOG = Logger.getLogger(
- NamedThreadFactory.class.getName());
-
- private final String id;
-
- private final AtomicLong serial = new AtomicLong();
-
- /**
- * Create a new thread factory, using the specified pool ID as a basis for
- * naming each thread.
- *
- * @param poolID pool name/ID
- */
- public NamedThreadFactory(final String poolID) {
- id = poolID;
- }
-
- /**
- * {@inheritDoc}
- * <p/>
- * This implementation sets the name of the thread, sets the thread to be a
- * daemon thread, and adds an uncaught exception handler.
- */
- @Override
- public Thread newThread(Runnable r) {
- Thread thr = new Thread(r);
- thr.setDaemon(true);
- thr.setName(id + " - " + serial.incrementAndGet());
- thr.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
- @Override
- public void uncaughtException(Thread t, Throwable e) {
- LOG.log(Level.WARNING,
- "Uncaught Exception in thread: " + t.getName(), e);
- }
- });
- return thr;
- }
-}