You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ab...@apache.org on 2016/02/17 19:23:51 UTC
[47/51] [partial] incubator-geode git commit: GEODE-917: rename
gemfire subprojects to geode
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/JarClassLoader.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/JarClassLoader.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/JarClassLoader.java
deleted file mode 100644
index ba528ce..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/JarClassLoader.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.installer;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Enumeration;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-/**
- * Classloader, which allows finding classes in jars within jars. This is used to check
- * whether a listener, as found in web.xml, is a ServletContextListener
- */
-public class JarClassLoader extends URLClassLoader {
-
- public JarClassLoader(URL[] urls, ClassLoader parent) {
- super(urls, parent);
-
- try {
- for (URL url : urls) {
- if (isJar(url.getFile())) {
- addJarResource(new File(url.getPath()));
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- private void addJarResource(File file) throws IOException {
- JarFile jarFile = new JarFile(file);
- addURL(file.toURL());
- Enumeration<JarEntry> jarEntries = jarFile.entries();
- while (jarEntries.hasMoreElements()) {
- JarEntry jarEntry = jarEntries.nextElement();
- if (!jarEntry.isDirectory() && isJar(jarEntry.getName())) {
- addJarResource(jarEntryAsFile(jarFile, jarEntry));
- }
- }
- }
-
- @Override
- protected synchronized Class<?> loadClass(String name, boolean resolve)
- throws ClassNotFoundException {
- try {
- Class<?> clazz = findLoadedClass(name);
- if (clazz == null) {
- clazz = findClass(name);
- if (resolve) {
- resolveClass(clazz);
- }
- }
- return clazz;
- } catch (ClassNotFoundException e) {
- return super.loadClass(name, resolve);
- }
- }
-
- private static void close(Closeable closeable) {
- if (closeable != null) {
- try {
- closeable.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- private static boolean isJar(String fileName) {
- return fileName != null && (fileName.toLowerCase().endsWith(".jar") ||
- fileName.toLowerCase().endsWith(".war") ||
- fileName.toLowerCase().endsWith(".ear"));
- }
-
- private static File jarEntryAsFile(JarFile jarFile,
- JarEntry jarEntry) throws IOException {
- InputStream input = null;
- OutputStream output = null;
- try {
- String name = jarEntry.getName().replace('/', '_');
- int i = name.lastIndexOf(".");
- String extension = i > -1 ? name.substring(i) : "";
- File file = File.createTempFile(
- name.substring(0, name.length() - extension.length()) + ".",
- extension);
- file.deleteOnExit();
- input = jarFile.getInputStream(jarEntry);
- output = new FileOutputStream(file);
- int readCount;
- byte[] buffer = new byte[4096];
- while ((readCount = input.read(buffer)) != -1) {
- output.write(buffer, 0, readCount);
- }
- return file;
- } finally {
- close(input);
- close(output);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/Argument.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/Argument.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/Argument.java
deleted file mode 100644
index 1125c1b..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/Argument.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.installer.args;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class representing a single command line argument.
- */
-public class Argument {
-
- /**
- * Parameter names.
- */
- private final String[] paramNames;
-
- /**
- * Default values for the parameters when not explicitly set.
- */
- private String[] defaults;
-
- /**
- * Environment variable names forfor each parameter where values will be
- * pulled in, if not explicitly provided and if the environment variable
- * exists.
- */
- private String[] envVars;
-
- /**
- * Flag indicating whether this argument is required on the command line.
- */
- private final boolean required;
-
- /**
- * Handler used to hook into processing.
- */
- private ArgumentHandler handler;
-
- /**
- * List of all representation forms.
- */
- private final List<String> forms = new ArrayList<String>();
-
- /**
- * Usage description.
- */
- private String description;
-
- ///////////////////////////////////////////////////////////////////////////
- // Constructor:
-
- /**
- * Contructor to create an argument definition.
- *
- * @param primaryForm the form of the argument (e.g., --foo). Should start
- * with a dash.
- * @param argRequired flag indicating whether or not the argument is
- * required to be onthe command line
- * @param parameterNames names of the parameters to this argument for use in
- * the usage generation
- */
- public Argument(
- final String primaryForm,
- final boolean argRequired,
- final String... parameterNames) {
- forms.add(primaryForm);
- paramNames = parameterNames;
- required = argRequired;
- }
-
- /**
- * Returns the number of parameters that this argument takes.
- *
- * @return parameter count
- */
- public int getParameterCount() {
- return paramNames.length;
- }
-
- /**
- * Returns the name of the parameter position requested.
- *
- * @param idx parameter index
- * @return parameter name
- */
- public String getParameterName(final int idx) {
- return paramNames[idx];
- }
-
- /**
- * Returns whether or not this argument is required to be defined.
- *
- * @return true if required, false if optional
- */
- public boolean isRequired() {
- return required;
- }
-
- /**
- * Determines if the argument provisioning has been done via the environment.
- */
- public boolean isDefinedInEnv() {
- if (envVars == null || paramNames.length == 0) {
- return false;
- }
- for (String var : envVars) {
- if (System.getenv(var) == null) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Sets the argument handler.
- *
- * @param aHandler argument handler
- * @return this argument (for chained calls)
- */
- public Argument setArgumentHandler(final ArgumentHandler aHandler) {
- handler = aHandler;
- return this;
- }
-
- /**
- * Returns the argument handler.
- *
- * @return argument handler
- */
- public ArgumentHandler getArgumentHandler() {
- return handler;
- }
-
- /**
- * Adds a possible representation of the command line argument.
- *
- * @param aliasName additional form to accept
- * @return this argument (for chained calls)
- */
- public Argument addForm(final String aliasName) {
- forms.add(aliasName);
- return this;
- }
-
- /**
- * Returns the primary form of the argument.
- *
- * @return primary form
- */
- public String getPrimaryForm() {
- if (forms.isEmpty()) {
- return null;
- } else {
- return forms.get(0);
- }
- }
-
- /**
- * Returns a list of all valid representations of this command line argument.
- *
- * @return list of all registered forms
- */
- public List<String> getForms() {
- return forms;
- }
-
- /**
- * Sets a usage description for this argument.
- *
- * @param str usage description
- * @return this argument (for chained calls)
- */
- public Argument setDescription(final String str) {
- description = str;
- return this;
- }
-
- /**
- * Returns a usage description of this argument.
- *
- * @return description
- */
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the default values when no explicit values were provided.
- *
- * @param newDefaults default values for all argument parameters
- * @return this argument (for chained calls)
- */
- public Argument setDefaults(final String... newDefaults) {
- if (newDefaults.length != paramNames.length) {
- throw (new IllegalArgumentException(
- "Defaults array length provided is not the correct size"));
- }
- defaults = newDefaults;
- return this;
- }
-
- /**
- * Returns the defaults.
- *
- * @return default parameter values
- */
- public String[] getDefaults() {
- return defaults;
- }
-
- /**
- * Sets the environment variables which will be checked for values before
- * falling back on the default values.
- *
- * @param newEnvVars environment variable name array
- * @return this argument (for chained calls)
- */
- public Argument setEnvVars(final String... newEnvVars) {
- if (newEnvVars.length != paramNames.length) {
- throw (new IllegalArgumentException(
- "Environment variables array length provided is not "
- + "the correct size"));
- }
- envVars = newEnvVars;
- return this;
- }
-
- /**
- * Returns the environment variable names for each parameter.
- *
- * @return environment variable names
- */
- public String[] getEnvVars() {
- return envVars;
- }
-
- /**
- * Returns a human readable form.
- *
- * @return human readable string
- */
- @Override
- public String toString() {
- final StringBuilder builder = new StringBuilder();
- builder.append("[Argument '");
- builder.append(forms.get(0));
- builder.append("'");
- if (paramNames.length > 0) {
- for (int i = 0; i < paramNames.length; i++) {
- builder.append(" <");
- builder.append(paramNames[i]);
- builder.append(">");
- }
- }
- builder.append("]");
- return builder.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentHandler.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentHandler.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentHandler.java
deleted file mode 100644
index 97c8108..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentHandler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.installer.args;
-
-/**
- * Interface specifying the requirements for objects wiching to be able to
- * examine arguments (potentially tweaking parameters) at the time of parsing,
- * thereby allowing for usage display to occur automatically.
- */
-public interface ArgumentHandler {
-
- /**
- * Process the argument values specified.
- *
- * @param arg argument definition
- * @param form form which was used on the command line
- * @param params parameters supplied to the argument
- * @throws UsageException when usage was suboptimal
- */
- void handleArgument(Argument arg, String form, String[] params)
- throws UsageException;
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentProcessor.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentProcessor.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentProcessor.java
deleted file mode 100644
index 04ecfab..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentProcessor.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.installer.args;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * This class is used to process command line arguments for Java programs in a
- * flexible and powerful manner.
- */
-public class ArgumentProcessor {
- /**
- * Logger.
- */
- private static final Logger LOG =
- Logger.getLogger(ArgumentProcessor.class.getName());
-
- /**
- * Description line length.
- */
- private static final int LINE_LENGTH = 60;
-
- /**
- * Map containing all arguments defined, indexed by their unique IDs.
- */
- private final List<Argument> args = new ArrayList<Argument>();
-
- /**
- * Unknown argument handler.
- */
- private UnknownArgumentHandler handler;
-
- /**
- * Program name to display in usage.
- */
- private String programName;
-
- ///////////////////////////////////////////////////////////////////////////
- // Classes:
-
- /**
- * Structure used to represent an argument match.
- */
- private static class Match {
- /**
- * The argument which matched.
- */
- private final Argument arg;
-
- /**
- * The specific form which matched.
- */
- private final String form;
-
- /**
- * The parameters to the argument form.
- */
- private final String[] params;
-
- /**
- * Constructor.
- *
- * @param theArgument the argument which matched
- * @param theForm the form used
- * @param theParams the parameters supplied
- */
- public Match(
- final Argument theArgument,
- final String theForm, final String[] theParams) {
- arg = theArgument;
- form = theForm;
- params = theParams;
- }
-
- /**
- * Accessor.
- *
- * @return argument which matched
- */
- public Argument getArgument() {
- return arg;
- }
-
- /**
- * Accessor.
- *
- * @return form which was used
- */
- public String getForm() {
- return form;
- }
-
- /**
- * Accessor.
- *
- * @return parameters supplied
- */
- public String[] getParams() {
- return params;
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // Constructors:
-
- /**
- * Creates a new Argument processor instance for te program name given.
- *
- * @param progName program name used in usage
- */
- public ArgumentProcessor(final String progName) {
- programName = progName;
- }
-
-
- ///////////////////////////////////////////////////////////////////////////
- // Public methods:
-
- /**
- * Adds a new argument.
- *
- * @param arg argument to add
- */
- public void addArgument(final Argument arg) {
- args.add(arg);
- }
-
- /**
- * Sets the handler to call when an unknown argument is encountered.
- *
- * @param aHandler unknown arg handler, or null to unset
- */
- public void setUnknownArgumentHandler(
- final UnknownArgumentHandler aHandler) {
- handler = aHandler;
- }
-
- /**
- * Process the command line arguments provided.
- *
- * @param programArgs command line arguments supplied to program
- * @return argument values parsed out of command line
- * @throws UsageException when usge sucked
- */
- public ArgumentValues process(final String[] programArgs)
- throws UsageException {
- ArgumentHandler argHandler;
- final ArgumentValues result = new ArgumentValues();
- List<Argument> unmatched;
- List<Match> matches;
-
- // Find all argument matches and set postArgs
- matches = checkMatches(programArgs, result);
-
- // Find arguments which didnt match
- unmatched = new ArrayList<Argument>();
- unmatched.addAll(args);
- for (Match match : matches) {
- unmatched.remove(match.getArgument());
- }
-
- // Error on unmatched yet required args
- for (Argument arg : unmatched) {
- if (arg.isRequired() && !arg.isDefinedInEnv()) {
- final UsageException usageException = new UsageException(
- "Required argument not provided: " + arg);
- usageException.setUsage(getUsage());
- throw usageException;
- }
- }
-
- // Handle the arguments
- for (Match match : matches) {
- final Argument arg = match.getArgument();
- argHandler = arg.getArgumentHandler();
- if (argHandler != null) {
- argHandler.handleArgument(
- arg, match.getForm(), match.getParams());
- }
- result.addResult(arg, match.getParams());
- }
-
- return result;
- }
-
-
- /**
- * Generates command line usage text for display to user.
- *
- * @return usage to dusplay to user
- */
- public String getUsage() {
- final StringBuilder builder = new StringBuilder();
- List<String> descriptionLines;
- final String blank20 = " ";
-
- builder.append("\nUSAGE: ");
- if (programName == null) {
- builder.append("<program>");
- } else {
- builder.append(programName);
- }
- if (args.isEmpty()) {
- builder.append("\nNo arguments supported.\n");
- } else {
- builder.append(" <args>\nWHERE <args>:\n\n");
- for (Argument arg : args) {
- for (String form : arg.getForms()) {
- builder.append(" ");
- builder.append(form);
-
- for (int i = 0; i < arg.getParameterCount(); i++) {
- builder.append(" <");
- builder.append(arg.getParameterName(i));
- builder.append(">");
- }
- builder.append("\n");
- }
-
- descriptionLines =
- breakupString(arg.getDescription(), LINE_LENGTH);
- if (descriptionLines.isEmpty()) {
- builder.append(blank20);
- builder.append("No argument description provided.");
- builder.append("\n\n");
- } else {
- for (String line : descriptionLines) {
- builder.append(blank20);
- builder.append(line.trim());
- builder.append("\n");
- }
- builder.append("\n");
- }
- }
- }
- builder.append("\n");
-
- return builder.toString();
- }
-
-
- ///////////////////////////////////////////////////////////////////////////
- // Private methods:
-
- /**
- * Builds a listof all argument matches and sets the postArgs array.
- *
- * @param programArgs command line arguments to search through
- * @param values values object in which to store results
- * @return list of matches
- * @throws UsageException when there is EBKAC
- */
- private List<Match> checkMatches(
- final String[] programArgs, final ArgumentValues values)
- throws UsageException {
- final List<Match> result = new ArrayList<Match>();
- Match match;
- String[] params;
- String[] postArgs;
- int idx = 0;
- int idx2;
-
- while (idx < programArgs.length) {
- // Check for end-of-parameters arg
- if ("--".equals(programArgs[idx])) {
- if (++idx < programArgs.length) {
- postArgs = new String[programArgs.length - idx];
- System.arraycopy(programArgs, idx,
- postArgs, 0, postArgs.length);
- values.setPostArgs(postArgs);
- }
- // We're done processing args'
- break;
- }
-
- // Determine parameter count
- idx2 = idx;
- while ((idx2 + 1) < programArgs.length
- && programArgs[idx2 + 1].charAt(0) != '-') {
- idx2++;
- }
-
- // Generate parameter array
- params = new String[idx2 - idx];
- System.arraycopy(programArgs, idx + 1, params, 0, params.length);
-
- LOG.fine("Arg: " + programArgs[idx]);
- LOG.fine("Params: " + params.length);
-
- // Find first argument matches
- match = null;
- for (Argument arg : args) {
- match = checkMatch(programArgs[idx], arg, params);
- if (match != null) {
- result.add(match);
- LOG.fine("Match found: ");
- LOG.fine(" ID: " + arg);
- LOG.fine(" Form: " + match.getForm());
- break;
- }
- }
- if (match == null) {
- if (handler == null) {
- final UsageException usageException = new UsageException(
- "Unknown argument: " + programArgs[idx]
- + " with " + params.length + " parameters.");
- usageException.setUsage(getUsage());
- throw (usageException);
- } else {
- handler.handleUnknownArgument(programArgs[idx], params);
- }
- }
-
- idx += params.length + 1;
- }
-
- return result;
- }
-
- /**
- * Checks to see if an rgument form matches the suppies parameter list.
- *
- * @param argName argument name
- * @param arg argument
- * @param params parameters supplied
- * @return match object on match, null otherwise
- */
- private Match checkMatch(
- final String argName, final Argument arg, final String[] params) {
- // Look for a matching form
- for (String form : arg.getForms()) {
- if (
- form.equals(argName)
- && arg.getParameterCount() == params.length) {
- return new Match(arg, form, params);
- }
- }
-
- return null;
- }
-
- /**
- * Breaks up a string into sub-strings, each with a length equal to or less
- * than the max length specified.
- *
- * @param str string to break up
- * @param maxLength maximum line length to use
- * @return broken up string
- */
- private List<String> breakupString(
- final String str, final int maxLength) {
- final List<String> result = new ArrayList<String>();
- int startIdx = -1;
- int lastIdx;
- int idx;
-
- if (str == null) {
- return result;
- }
-
- do {
- idx = startIdx;
- do {
- lastIdx = idx;
- idx = str.indexOf(' ', lastIdx + 1);
- LOG.fine("startIdx=" + startIdx + " lastIdx=" + lastIdx
- + " idx=" + idx);
- if (idx < 0) {
- // Canot break line up any further
- result.add(str.substring(startIdx + 1));
- return result;
- }
- } while ((idx - startIdx) <= maxLength);
-
- result.add(str.substring(startIdx + 1, lastIdx));
- startIdx = lastIdx;
- } while (true);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentValues.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentValues.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentValues.java
deleted file mode 100644
index cd412da..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/ArgumentValues.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.installer.args;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Result object capturing the result of processing command line arguments.
- */
-public class ArgumentValues {
-
- /**
- * Storage location for all arguments found after the "--" pseudo-arg.
- */
- private String[] postArgs = new String[]{};
-
- /**
- * Storage location for the command line argument values.
- */
- private final Map<Argument, List<String[]>> values =
- new LinkedHashMap<Argument, List<String[]>>();
-
- /**
- * Constructor.
- */
- ArgumentValues() {
- // Empty.
- }
-
- /**
- * Sets the post-arguments found after the "--" pseudo-argument.
- *
- * @param newPostArgs arguments defined after the special "--" argument
- */
- void setPostArgs(final String[] newPostArgs) {
- postArgs = newPostArgs;
- }
-
- /**
- * After processing the command line arguments, this method may be used to
- * return all arguments which were excluded from processing by their placement
- * after the "<code>--</code>" psuedo-argument.
- *
- * @return all unprocess arguments
- */
- public String[] getPostArgs() {
- return postArgs;
- }
-
- /**
- * Sets the data values found for a specific argument.
- *
- * @param arg argument
- * @param paramValues parameter values for the argument
- */
- public void addResult(final Argument arg, final String[] paramValues) {
- List<String[]> list = values.get(arg);
- if (list == null) {
- list = new ArrayList<String[]>();
- list.add(paramValues);
- values.put(arg, list);
- } else {
- list.add(paramValues);
- }
- }
-
- /**
- * Returns a list of all defined arguments.
- *
- * @return set of arguments
- */
- public Set<Argument> getDefinedArguments() {
- return values.keySet();
- }
-
- /**
- * Counts the number of arguments defined on the command line which are in the
- * list provided.
- *
- * @param ofThese the arguments to search for, or null to count all supplied
- * arguments
- * @return count of the defined arguments
- */
- public int getDefinedCount(Argument... ofThese) {
- if (ofThese.length == 0) {
- return values.keySet().size();
- }
-
- int count = 0;
- for (Argument arg : values.keySet()) {
- boolean found = false;
- for (int i = 0; !found && i < ofThese.length; i++) {
- if (ofThese[i].equals(arg)) {
- count++;
- found = true;
- }
- }
- }
- return count;
- }
-
- /**
- * Returns whetheror not the command line argument was actually provided on
- * the command line.
- *
- * @param arg argument to query
- * @return true if the argument is defined by the command line, false
- * otherwise
- */
- public boolean isDefined(final Argument arg) {
- final List<String[]> result = values.get(arg);
- return (result != null);
- }
-
- /**
- * Returns all results for the specified argument. If a command line option
- * is specified more than once, this is the method to use to get all values.
- *
- * @param arg argument to query
- * @return list of all parameter lists defined for this argument
- */
- public List<String[]> getAllResults(final Argument arg) {
- List<String[]> result = values.get(arg);
-
- if (result == null) {
- final String[] envVars = arg.getEnvVars();
- final String[] defaults = arg.getDefaults();
- final String[] vals = new String[arg.getParameterCount()];
- boolean found = defaults != null;
-
- for (int i = 0; i < arg.getParameterCount(); i++) {
- if (defaults != null) {
- vals[i] = defaults[i];
- }
- if (envVars != null) {
- String val = System.getenv(envVars[i]);
- if (val != null) {
- found = true;
- vals[i] = val;
- }
- }
- }
-
- if (found) {
- result = new ArrayList<String[]>();
- result.add(vals);
- }
- }
- return result;
- }
-
- /**
- * Convenience method to retrieve the first instance of the command line
- * argument's values.
- *
- * @param arg argument to query
- * @return first parameter list defined for this argument
- */
- public String[] getResult(final Argument arg) {
- final List<String[]> all = getAllResults(arg);
- if (all == null) {
- return null;
- } else {
- return all.get(0);
- }
- }
-
- /**
- * Convenience method to return the first value of the first instance of the
- * command line argument values for the specified argument.
- *
- * @param arg argument to query
- * @return first parameter of the first list of parameters supplied
- */
- public String getFirstResult(final Argument arg) {
- final String[] all = getResult(arg);
- if (all == null) {
- return null;
- } else {
- return all[0];
- }
- }
-
- /**
- * Convenience method to return the result of getFirstResult method as an
- * integer.
- *
- * @param arg argument to query
- * @param undefinedValue value to return when argument is not defined or is
- * illegally defined
- * @return value specified, or default value provided
- */
- public int getFirstResultAsInt(
- final Argument arg, final int undefinedValue) {
- final String value = getFirstResult(arg);
- if (value == null) {
- return undefinedValue;
- } else {
- return Integer.parseInt(value);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/URLArgumentHandler.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/URLArgumentHandler.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/URLArgumentHandler.java
deleted file mode 100644
index bb4b53a..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/URLArgumentHandler.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.installer.args;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Argument handler implementation which accepts file paths or URLs and
- * normalizes the parameters to URLs.
- */
-public class URLArgumentHandler implements ArgumentHandler {
-
- /**
- * Logger.
- */
- private static final Logger LOG =
- Logger.getLogger(URLArgumentHandler.class.getName());
-
- /**
- * Ensure that the argument is either a file path or a properly formatted URL.
- * If it is a file path, convert to a URL. If neither, throws a
- * UsageException.
- *
- * @param arg argument
- * @param form form used
- * @param parameters parameters supplied
- * @throws UsageException when file not found or not a workable URL
- */
- public void handleArgument(
- final Argument arg,
- final String form,
- final String[] parameters)
- throws UsageException {
- final File file = new File(parameters[0]);
- URL result = null;
-
- if (file.exists()) {
- try {
- result = file.toURI().toURL();
- } catch (MalformedURLException mux) {
- LOG.log(Level.FINEST, "Caught Exception", mux);
- }
- }
- if (result == null) {
- try {
- result = new URL(parameters[0]);
- } catch (MalformedURLException mux) {
- LOG.log(Level.FINEST, "Caught Exception", mux);
- }
- }
- if (result == null) {
- throw (new UsageException(
- "Argument parameter value is not a valid file "
- + "path or URL: " + arg));
- }
- parameters[0] = result.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UnknownArgumentHandler.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UnknownArgumentHandler.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UnknownArgumentHandler.java
deleted file mode 100644
index 4d52f62..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UnknownArgumentHandler.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.gemstone.gemfire.modules.session.installer.args;
-
-/**
- * Interface defining unknown argument handlers, given the opportunity to either
- * ignore the issue or force the parameter to be dealt with.
- */
-public interface UnknownArgumentHandler {
-
- /**
- * Called when an unknown argument is supplied.
- *
- * @param form argument name used
- * @param params parameters passed into it
- * @throws UsageException when the user needs to fix it
- */
- void handleUnknownArgument(String form, String[] params)
- throws UsageException;
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UsageException.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UsageException.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UsageException.java
deleted file mode 100644
index 0879417..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/installer/args/UsageException.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.installer.args;
-
-/**
- * Invalid usage exception.
- */
-public class UsageException extends Exception {
-
- /**
- * Serial format version.
- */
- private static final long serialVersionUID = 1L;
-
- /**
- * Stored usage message.
- */
- private String usage;
-
- /**
- * Creates a new UsageException.
- */
- public UsageException() {
- super();
- }
-
- /**
- * Creates a new UsageException.
- *
- * @param message description of exceptional condition
- */
- public UsageException(final String message) {
- super(message);
- }
-
- /**
- * Creates a new UsageException.
- *
- * @param message description of exceptional condition
- * @param cause provoking exception
- */
- public UsageException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates a new UsageException.
- *
- * @param cause provoking exception
- */
- public UsageException(final Throwable cause) {
- super(cause);
- }
-
-
- /**
- * Attaches a usage message to the exception for later consumption.
- *
- * @param usageText text to display to user to guide them to correct usage.
- * This is generated and set by the <code>ArgsProcessor</code>.
- */
- public void setUsage(final String usageText) {
- usage = usageText;
- }
-
- /**
- * Returns the usage message previously set.
- *
- * @return message or null if not set.
- */
- public String getUsage() {
- return usage;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/AbstractSessionCache.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/AbstractSessionCache.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/AbstractSessionCache.java
deleted file mode 100644
index 965a97f..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/AbstractSessionCache.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.common;
-
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.modules.session.catalina.internal.DeltaSessionStatistics;
-import com.gemstone.gemfire.modules.session.internal.filter.util.TypeAwareMap;
-import com.gemstone.gemfire.modules.util.RegionConfiguration;
-
-import java.util.Map;
-import javax.servlet.http.HttpSession;
-
-public abstract class AbstractSessionCache implements SessionCache {
-
- /**
- * The sessionRegion is the <code>Region</code> that actually stores and
- * replicates the <code>Session</code>s.
- */
- protected Region<String, HttpSession> sessionRegion;
-
- /**
- * The operatingRegion is the <code>Region</code> used to do HTTP operations.
- * if local cache is enabled, then this will be the local <code>Region</code>;
- * otherwise, it will be the session <code>Region</code>.
- */
- protected Region<String, HttpSession> operatingRegion;
-
- protected Map<CacheProperty, Object> properties =
- new TypeAwareMap<CacheProperty, Object>(CacheProperty.class);
-
- protected DeltaSessionStatistics statistics;
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void stop() {
- sessionRegion.close();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Region<String, HttpSession> getOperatingRegion() {
- return this.operatingRegion;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Region<String, HttpSession> getSessionRegion() {
- return this.sessionRegion;
- }
-
- protected void createStatistics() {
- this.statistics =
- new DeltaSessionStatistics(getCache().getDistributedSystem(),
- (String) properties.get(CacheProperty.STATISTICS_NAME));
- }
-
- /**
- * Build up a {@code RegionConfiguraton} object from parameters originally
- * passed in as filter initialization parameters.
- *
- * @return a {@code RegionConfiguration} object
- */
- protected RegionConfiguration createRegionConfiguration() {
- RegionConfiguration configuration = new RegionConfiguration();
-
- configuration.setRegionName(
- (String) properties.get(CacheProperty.REGION_NAME));
- configuration.setRegionAttributesId(
- (String) properties.get(CacheProperty.REGION_ATTRIBUTES_ID));
-
- configuration.setEnableGatewayDeltaReplication(
- (Boolean) properties.get(
- CacheProperty.ENABLE_GATEWAY_DELTA_REPLICATION));
- configuration.setEnableGatewayReplication(
- (Boolean) properties.get(CacheProperty.ENABLE_GATEWAY_REPLICATION));
- configuration.setEnableDebugListener(
- (Boolean) properties.get(CacheProperty.ENABLE_DEBUG_LISTENER));
-
- return configuration;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/CacheProperty.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/CacheProperty.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/CacheProperty.java
deleted file mode 100644
index e26281e..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/CacheProperty.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.common;
-
-/**
- * Used to define cache properties
- */
-public enum CacheProperty {
-
- ENABLE_DEBUG_LISTENER(Boolean.class),
-
- ENABLE_GATEWAY_REPLICATION(Boolean.class),
-
- ENABLE_GATEWAY_DELTA_REPLICATION(Boolean.class),
-
- ENABLE_LOCAL_CACHE(Boolean.class),
-
- REGION_NAME(String.class),
-
- REGION_ATTRIBUTES_ID(String.class),
-
- STATISTICS_NAME(String.class),
-
- /**
- * This parameter can take the following values which match the respective
- * attribute container classes
- * <p/>
- * delta_queued : QueuedDeltaSessionAttributes delta_immediate :
- * DeltaSessionAttributes immediate : ImmediateSessionAttributes queued
- * : QueuedSessionAttributes
- */
- SESSION_DELTA_POLICY(String.class),
-
- /**
- * This parameter can take the following values:
- * <p/>
- * set (default) set_and_get
- */
- REPLICATION_TRIGGER(String.class);
-
- Class clazz;
-
- CacheProperty(Class clazz) {
- this.clazz = clazz;
- }
-
- public Class getClazz() {
- return clazz;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/ClientServerSessionCache.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/ClientServerSessionCache.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/ClientServerSessionCache.java
deleted file mode 100644
index a23888c..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/ClientServerSessionCache.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.common;
-
-import com.gemstone.gemfire.cache.GemFireCache;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.RegionShortcut;
-import com.gemstone.gemfire.cache.client.ClientCache;
-import com.gemstone.gemfire.cache.client.ClientRegionFactory;
-import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
-import com.gemstone.gemfire.cache.execute.Execution;
-import com.gemstone.gemfire.cache.execute.FunctionService;
-import com.gemstone.gemfire.cache.execute.ResultCollector;
-import com.gemstone.gemfire.modules.util.BootstrappingFunction;
-import com.gemstone.gemfire.modules.util.CreateRegionFunction;
-import com.gemstone.gemfire.modules.util.RegionConfiguration;
-import com.gemstone.gemfire.modules.util.RegionStatus;
-
-import java.util.List;
-import java.util.Map;
-import javax.servlet.http.HttpSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class which defines a client/server cache.
- */
-public class ClientServerSessionCache extends AbstractSessionCache {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(PeerToPeerSessionCache.class.getName());
-
- private ClientCache cache;
-
- protected static final String DEFAULT_REGION_ATTRIBUTES_ID =
- RegionShortcut.PARTITION_REDUNDANT.toString();
-
- protected static final Boolean DEFAULT_ENABLE_LOCAL_CACHE = true;
-
- /**
- * Constructor
- *
- * @param cache
- * @param properties
- */
- public ClientServerSessionCache(ClientCache 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);
- }
-
- @Override
- public void initialize() {
- // Bootstrap the servers
- bootstrapServers();
-
- // Create or retrieve the region
- createOrRetrieveRegion();
-
- // Set the session region directly as the operating region since there is no difference
- // between the local cache region and the session region.
- operatingRegion = sessionRegion;
-
- // Create or retrieve the statistics
- createStatistics();
- }
-
- @Override
- public GemFireCache getCache() {
- return cache;
- }
-
- @Override
- public boolean isClientServer() {
- return true;
- }
-
-
- ////////////////////////////////////////////////////////////////////////
- // Private methods
-
- private void bootstrapServers() {
- Execution execution = FunctionService.onServers(this.cache);
- ResultCollector collector = execution.execute(new BootstrappingFunction());
- // Get the result. Nothing is being done with it.
- try {
- collector.getResult();
- } catch (Exception e) {
- // If an exception occurs in the function, log it.
- LOG.warn("Caught unexpected exception:", e);
- }
- }
-
- private void createOrRetrieveRegion() {
- // Retrieve the local session region
- this.sessionRegion =
- this.cache.getRegion(
- (String) properties.get(CacheProperty.REGION_NAME));
-
- // If necessary, create the regions on the server and client
- if (this.sessionRegion == null) {
- // Create the PR on the servers
- createSessionRegionOnServers();
-
- // Create the region on the client
- this.sessionRegion = createLocalSessionRegion();
- LOG.debug("Created session region: " + this.sessionRegion);
- } else {
- LOG.debug("Retrieved session region: " + this.sessionRegion);
- }
- }
-
- private void createSessionRegionOnServers() {
- // Create the RegionConfiguration
- RegionConfiguration configuration = createRegionConfiguration();
-
- // Send it to the server tier
- Execution execution = FunctionService.onServer(this.cache).withArgs(
- configuration);
- ResultCollector collector = execution.execute(CreateRegionFunction.ID);
-
- // Verify the region was successfully created on the servers
- List<RegionStatus> results = (List<RegionStatus>) collector.getResult();
- for (RegionStatus status : results) {
- if (status == RegionStatus.INVALID) {
- StringBuilder builder = new StringBuilder();
- builder.append(
- "An exception occurred on the server while attempting to create or validate region named ");
- builder.append(properties.get(CacheProperty.REGION_NAME));
- builder.append(". See the server log for additional details.");
- throw new IllegalStateException(builder.toString());
- }
- }
- }
-
- private Region<String, HttpSession> createLocalSessionRegion() {
- ClientRegionFactory<String, HttpSession> factory = null;
- boolean enableLocalCache =
- (Boolean) properties.get(CacheProperty.ENABLE_LOCAL_CACHE);
-
- String regionName = (String) properties.get(CacheProperty.REGION_NAME);
- if (enableLocalCache) {
- // Create the region factory with caching and heap LRU enabled
- factory = ((ClientCache) this.cache).
- createClientRegionFactory(
- ClientRegionShortcut.CACHING_PROXY_HEAP_LRU);
- LOG.info("Created new local client session region: {}", regionName);
- } else {
- // Create the region factory without caching enabled
- factory = ((ClientCache) this.cache).createClientRegionFactory(
- ClientRegionShortcut.PROXY);
- LOG.info(
- "Created new local client (uncached) session region: {} without any session expiry",
- regionName);
- }
-
- // Create the region
- return factory.create(regionName);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/PeerToPeerSessionCache.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/PeerToPeerSessionCache.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/PeerToPeerSessionCache.java
deleted file mode 100644
index 878adaa..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/PeerToPeerSessionCache.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.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/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionCache.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionCache.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionCache.java
deleted file mode 100644
index 7562dff..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionCache.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.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/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionExpirationCacheListener.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionExpirationCacheListener.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionExpirationCacheListener.java
deleted file mode 100644
index 648e711..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/common/SessionExpirationCacheListener.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.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/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/Constants.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/Constants.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/Constants.java
deleted file mode 100644
index 4ce8733..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/Constants.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.gemstone.gemfire.modules.session.internal.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/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/DummySessionManager.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/DummySessionManager.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/DummySessionManager.java
deleted file mode 100644
index 9628912..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/DummySessionManager.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.filter;
-
-import com.gemstone.gemfire.modules.session.internal.filter.attributes.AbstractSessionAttributes;
-
-import java.util.HashMap;
-import java.util.Map;
-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";
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6c4c2f9/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/GemfireHttpSession.java
----------------------------------------------------------------------
diff --git a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/GemfireHttpSession.java b/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/GemfireHttpSession.java
deleted file mode 100644
index 695a03b..0000000
--- a/extensions/gemfire-modules-session/src/main/java/com/gemstone/gemfire/modules/session/internal/filter/GemfireHttpSession.java
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.gemstone.gemfire.modules.session.internal.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.internal.filter.attributes.AbstractSessionAttributes;
-import com.gemstone.gemfire.modules.session.internal.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;
- }
-}
-