From 680c6d4a61d704587540fc9d7dbde8e8482253eb Mon Sep 17 00:00:00 2001 From: John Blum Date: Tue, 13 Nov 2018 13:58:51 -0800 Subject: [PATCH] Add sample demonstrating the use of Spring Session with Gfsh started Apache Geode servers configured with DataSerialization. Resolve gh-11. --- .../boot-gemfire-with-gfsh-servers.adoc | 411 ++++++++++++++++++ docs/src/docs/asciidoc/index.adoc | 43 +- .../sample-boot-gemfire-with-gfsh-servers.png | Bin 0 -> 160328 bytes ...mple-boot-gemfire-with-gfsh-servers.gradle | 39 ++ .../main/java/sample/client/Application.java | 160 +++++++ .../resources/geode/bin/start-cluster.gfsh | 40 ++ .../main/resources/geode/bin/start-cluster.sh | 3 + .../resources/geode/bin/stop-cluster.gfsh | 5 + .../main/resources/geode/bin/stop-cluster.sh | 3 + .../src/main/resources/geode/oql/queries.txt | 5 + .../src/main/resources/initializer-cache.xml | 15 + .../src/main/resources/templates/index.html | 49 +++ 12 files changed, 757 insertions(+), 16 deletions(-) create mode 100644 docs/src/docs/asciidoc/guides/boot-gemfire-with-gfsh-servers.adoc create mode 100644 samples/boot/gemfire-with-gfsh-servers/sample-boot-gemfire-with-gfsh-servers.png create mode 100644 samples/boot/gemfire-with-gfsh-servers/spring-session-sample-boot-gemfire-with-gfsh-servers.gradle create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/java/sample/client/Application.java create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.gfsh create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.sh create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.gfsh create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.sh create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/oql/queries.txt create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/resources/initializer-cache.xml create mode 100644 samples/boot/gemfire-with-gfsh-servers/src/main/resources/templates/index.html diff --git a/docs/src/docs/asciidoc/guides/boot-gemfire-with-gfsh-servers.adoc b/docs/src/docs/asciidoc/guides/boot-gemfire-with-gfsh-servers.adoc new file mode 100644 index 0000000..eac770f --- /dev/null +++ b/docs/src/docs/asciidoc/guides/boot-gemfire-with-gfsh-servers.adoc @@ -0,0 +1,411 @@ += Spring Session - HttpSession with Apache Geode Client/Server using Spring Boot and Gfsh Started Servers +John Blum +:toc: +:data-store-name: Apache Geode +:data-store-version: 16 +:data-store-docs: http://geode.apache.org/docs/guide/{data-store-version} +:data-store-javadoc: http://geode.apache.org/releases/latest/javadoc +:data-store-website: http://geode.apache.org +:sdg-name: Spring Data for {data-store-name} +:sdg-docs: https://docs.spring.io/spring-data/geode/docs/current/reference/html +:sdg-javadoc: https://docs.spring.io/spring-data/geode/docs/current/api + +This guide describes how to build a Spring Boot application configured with Spring Session to transparently +leverage {data-store-name} in order to manage a Web application's `javax.servlet.http.HttpSession`. + +In this sample, we will use {data-store-name}'s client/server topology with a Spring Boot application that is both a +Web application and a {data-store-name} client configured to manage `HttpSession` state stored in a cluster of +{data-store-name} servers, which are configured and started with +{data-store-docs}/tools_modules/gfsh/chapter_overview.html[_Gfsh_]. + +In addition, this sample configures and uses {data-store-name}'s +{data-store-docs}/developing/data_serialization/gemfire_data_serialization.html[_DataSerialization_] framework +and {data-store-docs}/developing/delta_propagation/chapter_overview.html[Delta propagation] functionality +to serialize the `HttpSession`. Therefore, it is necessary to perform additional configuration steps to properly setup +{data-store-name}'s _DataSerialization_ capabilities on the servers so {data-store-name} properly recognizes +the Spring Session types. + +== Updating Dependencies + +Before using Spring Session, you must ensure that the required dependencies are included. +If you are using _Maven_, include the following `dependencies` in your `pom.xml`: + +.pom.xml +[source,xml] +[subs="verbatim,attributes"] +---- + + + + + + org.springframework.session + spring-session-data-geode + {spring-session-data-geode-version} + pom + + + + org.springframework.boot + spring-boot-starter-web + + + +---- + +ifeval::["{version-snapshot}" == "true"] +Since we are using a SNAPSHOT version, we need to add the Spring Snapshot Maven Repository. +If you are using _Maven_, include the following `repository` declaration in your `pom.xml`: + +.pom.xml +[source,xml] +---- + + + + + + spring-snapshot + https://repo.spring.io/libs-snapshot + + + +---- +endif::[] + +ifeval::["{version-milestone}" == "true"] +Since we are using a Milestone version, we need to add the Spring Milestone Maven Repository. +If you are using _Maven_, include the following `repository` declaration in your `pom.xml`: + +.pom.xml +[source,xml] +---- + + + + + + spring-milestone + https://repo.spring.io/libs-milestone + + + +---- +endif::[] + +// tag::config[] +[[httpsession-spring-configuration]] +== Spring Boot Configuration + +After adding the required dependencies and repository declarations, we can create the Spring configuration for our +{data-store-name} client using Spring Boot. The Spring configuration is responsible for creating a Servlet `Filter` +that replaces the Web container's `HttpSession` with an implementation backed by Spring Session, which is then stored +and managed in {data-store-name}. + +[[httpsession-springboot-apachegeode-client-web-application]] +=== The Spring Boot, {data-store-name} `ClientCache`, Web application + +Let's start by creating a Spring Boot, Web application to expose our Web Service using Spring Web MVC, running as +an {data-store-name} client, connected to our {data-store-name} servers. The Web application will use Spring Session +backed by {data-store-name} to manage `HttpSession` state in a distributed and replicated manner. + +[source,java] +---- +include::{samples-dir}boot/gemfire-with-gfsh-servers/src/main/java/sample/client/Application.java[tags=class] +---- + +<1> We start by declaring our Web application to be a Spring Boot application simply by annotating our application class +with `@SpringBootApplication`. +<2> We also declare our Web application to be an Apache Geode client by annotating our application class with +`@ClientCacheApplication`. Additionally, we set `subscriptionEnabled` to receive notifications for any updates +to the `HttpSession` that may have originated from a different application client accessing the same `HttpSession`. +<3> Next, we declare that the Web application will use Spring Session backed by {data-store-name} by annotating the +application class with `@EnableGemFireHttpSession`. This will create the necessary client-side PROXY `Region`, +which we have explicitly named "_Sessions_". This name must correspond to a server-side `Region` with the same name. +All `HttpSession` state will be sent from the client to the server through `Region` data access operations +using the "DEFAULT" connection `Pool`. +<4> `@Controller` is a Spring Web MVC annotation enabling our MVC handler mapping methods (i.e. methods annotated +with `@RequestMapping`, etc) to process HTTP requests (e.g. <7>) +<5> Then, we adjust the Spring Web MVC configuration to set the home page, and... +<6> Add an error handler to print out the Stack Trace of any Exception thrown by the server. +<7> Finally, we declare the `/session` HTTP request handler method to set an `HttpSession` attribute +and increment a count for the number of HTTP requests that have occurred during this `HttpSession`. + +There are many other useful utility methods, so please refer to the actual source code for full details. + +TIP: In typical {data-store-name} production deployments, where the cluster includes potentially hundreds or thousands +of servers (a.k.a. data nodes), it is more common for clients to connect to 1 or more {data-store-name} Locators running +in the same cluster. A Locator passes meta-data to clients about the servers available in the cluster, the individual +server load and which servers have the client's data of interest, which is particularly important for direct, single-hop +data access and latency-sensitive applications. See more details about the +{data-store-docs}/topologies_and_comm/cs_configuration/standard_client_server_deployment.html[Client/Server Topology] +in the {data-store-name} User Guide. + +NOTE: For more information on configuring {sdg-name}, refer to the {sdg-docs}[Reference Guide]. + +[[httpsession-springsession-configuration]] +==== Enabling `HttpSession` Management + +The `@EnableGemFireHttpSession` annotation enables developers to configure certain aspects of both Spring Session +and {data-store-name} out-of-the-box, using the following attributes: + +* `clientRegionShortcut` - Configures the {data-store-docs}/developing/region_options/region_types.html[data management policy] +on the client using the {data-store-javadoc}/org/apache/geode/cache/client/ClientRegionShortcut.html[ClientRegionShortcut]. +Defaults to `PROXY`. Only applicable on the client. +* `indexableSessionAttributes` - Identifies the `HttpSession` attributes by name that should be indexed for queries. +Only Session attributes explicitly identified by name will be indexed. +* `maxInactiveIntervalInSeconds` - Controls `HttpSession` Idle Expiration Timeout (TTI; defaults to **30 minutes**). +* `poolName` - Name of the dedicated connection `Pool` connecting the client to a cluster of servers. +Defaults to `gemfirePool`. Only applicable on the client. +* `regionName` - Declares the name of the `Region` used to store and manage `HttpSession` state. +Defaults to "_ClusteredSpringSessions_". +* `serverRegionShortcut` - Configures the {data-store-docs}/developing/region_options/region_types.html[data management policy] +on the server using the {data-store-javadoc}/org/apache/geode/cache/RegionShortcut.html[RegionShortcut] +Defaults to `PARTITION`. Only applicable on the server, or when the P2P topology is employed. +* `sessionExpirationPolicyBeanName` - Configures the name of the bean declared in the Spring context implementing +the Expiration Policy used by {data-store-name} to expire stale `HttpSessions`. Defaults to unset. +* `sessionSerializerBeanName` - Configures the name of the bean declared in the Spring context used to handle +de/serialization of the `HttpSession` between client and server. Defaults to PDX. + +NOTE: It is important to remember that the {data-store-name} client `Region` name must match a server `Region` +by the same name if the client `Region` is a `PROXY` or `CACHING_PROXY`. Client and server `Region` names are not +required to match if the client `Region` is `LOCAL`. However, keep in mind that by using a client `LOCAL` Region, +`HttpSession` state will not be propagated to the server and you lose all the benefits of using {data-store-name} +to store and manage `HttpSession` state on the servers in a distributed, replicated manner. + +[[httpsession-apachegeode-servers-gfsh]] +=== Starting {data-store-name} Servers with Gfsh + +Now, we must start a small {data-store-name} cluster. + +For this sample, we will start 1 Locator and 2 Servers. In addition, we will create the "Sessions" `Region` used +to store and manage the `HttpSession` in the cluster as a `PARTITION` `Region` using an Idle Expiration (TTI) +timeout of 15 seconds. + +The following example shows the Gfsh shell script we will use to setup the cluster: + +[source,txt] +---- +include::{samples-dir}boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.gfsh[tags=shell-script] +---- + +NOTE: You will minimally need to replace path to the `CACHE_XML_FILE` depending on where you cloned the +{gh-url}[Spring Session for {data-store-name}] to on your system. + +This Gfsh shell script file contains two additional bits of key information. + +First, the shell script configures the CLASSPATH of the servers to contain all the Spring JARs. If there were +application domain classes being stored in the `HttpSession` (i.e. in Session attributes), then a JAR file containing +the application types must also be on the CLASSPATH of the servers. + +This is necessary since, when {data-store-name} applies a delta (i.e. the client only sends `HttpSession` changes +to the servers), it must deserialize the `HttpSession` object in order to apply the delta. Therefore, it is also +necessary to have your application domain objects present on the CLASSPATH as well. + +Second, we must include a small snippet of `cache.xml` to initialize the {data-store-name} _DataSerialization_ +framework in order to register and enable {data-store-name} to recognize the Spring Session types representing +the `HttpSession`. {data-store-name} is very precise and will only use _DataSerialization_ for the types +it knows about through registration. + +But, as a user, you do not need to worry about which Spring Session types {data-store-name} needs to know about. +That is the job of the Spring Session for {data-store-name}'s +`o.s..session.data.gemfire.serialization.data.support.DataSerializableSessionSerializerInitializer` class. + +You simply just need to declare the provided Initializer in `cache.xml`, as follows: + +[source,xml] +---- +include::{samples-dir}boot/gemfire-with-gfsh-servers/src/main/resources/initializer-cache.xml[tags=cache-xml] +---- + +Then, you include the `initializer-cache.xml` in the configuration of the server on startup: + +[source,txt] +---- +gfsh> start server --name=Server1 ... --cache-xml-file=/absolute/filesystem/path/to/initializer-cache.xml +---- + +Of course, the `start-cluster.gfsh` shell script shown above handles these details for us. You may recycle this Gfsh +shell script for your own purposes. + +[[httpsession-sample-boot-with-gfsh-servers-run]] +== Running the Sample + +Now it is time to run our sample. + +In order to run the sample, you must install a full installation of {data-store-name}. You can download the bits +from {data-store-website}/releases[here]. + +After install, run Gfsh: + +[source,txt] +---- +$ gfsh + _________________________ __ + / _____/ ______/ ______/ /____/ / + / / __/ /___ /_____ / _____ / + / /__/ / ____/ _____/ / / / / +/______/_/ /______/_/ /_/ 1.6.0 + +Monitor and Manage Apache Geode +gfsh> +---- + +=== Running the server-side cluster + +We start the cluster by executing our `start-cluster.gfsh` shell script: + +[source,txt] +---- +gfsh> run --file=${SYS_USER_HOME}/spring-session-data-geode/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.gfsh +---- + +In the shell, you will see each command listed out as it is executed by Gfsh and you will see the Locator +and Servers startup, and the "_Sessions_" Region get created. + +If all is well, you should be able to `list members`, `describe region`, and so on: + +[source,txt] +---- +gfsh> list members + Name | Id +-------- | --------------------------------------------------------------- +Locator1 | 10.99.199.41(Locator1:80666:locator):1024 [Coordinator] +Server1 | 10.99.199.41(Server1:80669):1025 +Server2 | 10.99.199.41(Server2:80672):1026 + +gfsh> list regions +List of regions +--------------- +Sessions + +gfsh> describe region --name=/Sessions +.......................................................... +Name : Sessions +Data Policy : partition +Hosting Members : Server1 + Server2 + +Non-Default Attributes Shared By Hosting Members + + Type | Name | Value +------ | ----------------------- | --------- +Region | data-policy | PARTITION + | entry-idle-time.timeout | 15 + | size | 0 + | statistics-enabled | true +---- + +The "_Sessions_" Region configuration shown above is exactly the same configuration that Spring would have created +for you if you were to configure and bootstrap your {data-store-name} servers using Spring Boot instead. + +For instance, you can achieve a similar effect with the following Spring Boot application class, which can be used to +configure and bootstrap an {data-store-name} server: + +[source,java] +---- +@SpringBootApplication +@CacheServerApplication +@EnableGemFireHttpSession(regionName = "Sessions", + maxInactiveIntervalInSeconds = 15) +public class ServerApplication { + + public static void main(String[] args) { + + new SpringApplicationBuilder(ServerApplication.class) + .web(WebApplicationType.NONE) + .build() + .run(args); + } +} +---- + +The nice thing about this approach is, whether you are launching the `ServerApplication` class from you IDE, +or by using a Spring Boot JAR, since the Maven POM (or alternatively, Gradle build file) defines all your dependencies, +you do not need to worry about the CLASSPATH (other than, perhaps your own application domain object types). + +This approach is shown in the +link:guides/boot-gemfire.html[HttpSession with Spring Boot and {data-store-name} Sample Guide]. + +=== Running the client + +Now, it is time to run the Spring Boot, {data-store-name} client, Web application. + +You can start the Web application from your IDE, or alternatively use the `bootRun` Gradle task +to launch the application: + +[source,txt] +---- +$ gradlew :spring-session-sample-boot-gemfire-with-gfsh-servers:bootRun +---- + +Once you have started the client, you can navigate your Web browser to `http://localhost:8080/ping`. You should see +the "PONG" response. + +Then navigate to `http://localhost:8080`. This will return the `index.html` page where you can submit HTTP requests +and add session attributes. The page will refresh with a count of the number of HTTP requests for the current session. +After 15 seconds, the HTTP session will expire and you will not longer see any session attributes. Additionally, your +HTTP request count will reset to 0. + +image::{samples-dir}/boot/gemfire-with-gfsh-servers/sample-boot-gemfire-with-gfsh-servers.png[] + +While the application is running and before the HTTP session times out (again, the TTI expiration timeout is set to +15 seconds), you can issue queries in Gfsh to see the contents of the "_Sessions)" Region. + +For example: + +[source,txt] +---- +gfsh>query --query="SELECT session.id FROM /Sessions session" +Result : true +Limit : 100 +Rows : 1 + +Result +------------------------------------ +9becc38f-7249-4bd0-94eb-acff70f92b87 + + +gfsh>query --query="SELECT session.getClass().getName() FROM /Sessions session" +Result : true +Limit : 100 +Rows : 1 + +Result +-------------------------------------------------------------------------------------------------------------- +org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$DeltaCapableGemFireSession + + +gfsh>query --query="SELECT attributes.key, attributes.value FROM /Sessions session, session.attributes attributes" +Result : true +Limit : 100 +Rows : 3 + + key | value +------------ | ----- +requestCount | 2 +testTwo | bar +testOne | foo +---- + +The list of {data-store-name} OQL queries used in this sample can be found in: + +.src/main/resources/geode/oql/queries.txt +[source,txt] +---- +include::{samples-dir}boot/gemfire-with-gfsh-servers/src/main/resources/geode/oql/queries.txt[tags=queries] +---- + +== Conclusion + +In this sample, we saw how to specifically configure and bootstrap a {data-store-name} cluster of servers with Gfsh +and then connect to the cluster using a Spring Boot application enabled with Spring Session, configured with +{data-store-name} as the backing store used to manage the `HttpSessions` for the Web application. + +Additionally, the application used {data-store-name}'s _DataSerialization_ framework to serialize the `HttpSession` +state to the servers and also send deltas. The setup and configuration expressed in the Gfsh shell script +was necessary in order for {data-store-name} to properly identify the Spring Session types to handle. + +Feel free to modify this sample and play around for your learning purposes. + +Source code can be found {gh-samples-url}boot/gemfire-with-gfsh-servers[here]. diff --git a/docs/src/docs/asciidoc/index.adoc b/docs/src/docs/asciidoc/index.adoc index 40c9fe6..fe410a8 100644 --- a/docs/src/docs/asciidoc/index.adoc +++ b/docs/src/docs/asciidoc/index.adoc @@ -45,6 +45,11 @@ is with our Sample Applications. using a Client/Server topology. | link:guides/boot-gemfire.html[HttpSession with Spring Boot and {data-store-name} Guide] +| {gh-samples-url}boot/gemfire-with-gfsh-servers[HttpSession with Spring Boot and {data-store-name} using Gfsh] +| Demonstrates how to use Spring Session to manage the `HttpSession` with {data-store-name} in a Spring Boot application +using a Client/Server topology. Additionally configures and uses {data-store-name}'s _DataSerialization_ framework. +| link:guides/boot-gemfire-with-gfsh-servers.html[HttpSession with Spring Boot and {data-store-name} using Gfsh Guide] + | {gh-samples-url}boot/gemfire-with-scoped-proxies[HttpSession with Spring Boot and {data-store-name} using Scoped Proxies] | Demonstrates how to use Spring Session to manage the `HttpSession` with {data-store-name} in a Spring Boot application using a Client/Server topology. The application also makes use of Spring Request and Session Scoped Proxy beans. @@ -836,7 +841,7 @@ does not cause PDX serialized objects to be deserialized. But, nothing will pre causing a deserialization, so be careful. [[httpsession-gemfire-serialization-java-data-pdx]] -===== PDX + _Data Serialization_ + _Java Serialization_ +===== _Data Serialization_ + PDX + _Java Serialization_ It is possible for {data-store-name} to support all 3 serialization formats simultaneously. @@ -1071,48 +1076,54 @@ using Spring (Boot) as generally, the information that follows will not apply. declared dependencies and your Spring configuration. However, if you are using *_Gfsh_* to start the servers in your cluster, then definitely read on. -When using {data-store-name}'s _DataSerialization_ framework, especially from the client to serialize (HTTP) Session +====== Background + +When using {data-store-name}'s _DataSerialization_ framework, especially from the client when serializing (HTTP) Session state to the servers in the cluster, you must take care to configure the {data-store-name} servers in your cluster with the appropriate dependencies. This is especially true when leveraging deltas as explained in the earlier section on <>. When using the _DataSerialization_ framework as your serialization strategy to serialize (HTTP) Session state from your Web application clients to the servers, then the servers must be properly configured with the Spring Session -for {data-store-name} class types are used to represent the (HTTP) Session and its contents. This means including +for {data-store-name} class types used to represent the (HTTP) Session and its contents. This means including the Spring JARs on the servers classpath. Additionally, using _DataSerialization_ may also require you to include the JARs containing your application domain classes that are used by your Web application and put into the (HTTP) Session as Session Attribute values, particularly if: -1. The types implement the `org.apache.geode.DataSerializable` interface. -2. The type implement the `org.apache.geode.Delta` interface. +1. Your types implement the `org.apache.geode.DataSerializable` interface. +2. Your types implement the `org.apache.geode.Delta` interface. 3. You have registered a `org.apache.geode.DataSerializer` that identifies and serializes the types. -4. The types implement the `java.io.Serializable` interface. +4. Your types implement the `java.io.Serializable` interface. Of course, you must ensure your application domain object types put in the (HTTP) Session are serializable in some form or another. However, you are not strictly required to use _DataSerialization_ nor are you necessarily required to have your application domain object types on the servers classpath if: -1. The types implement the `org.apache.geode.pdx.PdxSerializable` interface. -2. Or, you have registered an `org.apache.geode.pdx.PdxSerializer` that properly identifies and serializes the types. +1. Your types implement the `org.apache.geode.pdx.PdxSerializable` interface. +2. Or, you have registered an `org.apache.geode.pdx.PdxSerializer` that properly identifies and serializes +your application domain object types. {data-store-name} will apply the following order of precedence when determining the serialization strategy to use to serialize an object graph: 1. First, `DataSerializable` objects and/or any registered `DataSerializers` identifying the objects to serialize. -2. Then `PdxSerializable` objects and/or any registered `PdxSerializer` identifying th objects to serialize. -3. And finally, all `java.io.Serialiable` types. +2. Then `PdxSerializable` objects and/or any registered `PdxSerializer` identifying the objects to serialize. +3. And finally, all `java.io.Serializable` types. -This also means that if a particular application domain object type (e.g. A) implements `java.io.Serializable`, +This also means that if a particular application domain object type (e.g. `A`) implements `java.io.Serializable`, however, a (custom) `PdxSerializer` has been registered with {data-store-name} identifying the same application -domain object type (i.e. A), the {data-store-name} will use PDX to serialize "A" and *not* Java Serialization. +domain object type (i.e. `A`), then {data-store-name} will use PDX to serialize "A" and *not* Java Serialization, +in this case. This is especially useful since then you can use _DataSerialization_ to serialize the (HTTP) Session object, leveraging -Deltas and all the powerful features of _DataSerialization_ but then use PDX to serialize your application domain object +Deltas and all the powerful features of _DataSerialization_, but then use PDX to serialize your application domain object types, which greatly simplifies the configuration and/or effort involved. -Now, that we have a general understanding of why this support exists, how do you enable it? +Now that we have a general understanding of why this support exists, how do you enable it? + +====== Configuration First, create an {data-store-name} `cache.xml`, as follows: @@ -1135,7 +1146,7 @@ First, create an {data-store-name} `cache.xml`, as follows: ---- -Then when starting your servers using _*Gfsh*_, you specify: +Then, start your servers in _*Gfsh*_ using: .Starting Server with Gfsh [source,txt] @@ -1171,7 +1182,7 @@ ${REPO_HOME}/org/springframework/spring-core/{spring-version}/spring-core-{sprin Keep in mind, you may need to add your application domain object JAR files to the server classpath as well. -To get a complete picture of how this works, see the {gh-samples-url}[sample]. +To get a complete picture of how this works, see the {gh-samples-url}boot/gemfire-with-gfsh-servers[sample]. [[httpsession-gemfire-serialization-framework-session-representation]] ===== Changing the Session Representation diff --git a/samples/boot/gemfire-with-gfsh-servers/sample-boot-gemfire-with-gfsh-servers.png b/samples/boot/gemfire-with-gfsh-servers/sample-boot-gemfire-with-gfsh-servers.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9d69067207c7f259febfbaadf529dfb54e1ff2 GIT binary patch literal 160328 zcma&N1#lcovMwyimc9LB)F;3+JG zg%u=)g^3g#Y)vh!Ou)b-!V;6Al;ejme;qKCkkx4 zq~ng6z;3I->U;AH#u)q}yohTuE~bF@DQqtbg;QilvhbE&_P*Ltw=Ti#bV#rJ*ol4! zLG3(dxq3Ri6l53;jB6bWQ>(?Cu^R}%@4K;4BABEx*zX5e67io0zF9NYSsf|pri6SS zjKM*^StS+8L1QbAM+FxaaBBm9z0_<_jJX_|Y$<(=Tkoq^KBtB#)7hkedt=UPSl=2UUlA0ba!)%;hTlXW!HE zIP{oE(0Kha5P;t?U+I)0Q4uDRzzBq+E{m3080TphcfAFU)PD+d8zM8sVoAYMXzqA4 zbDW2T^b|2zMK|M~^P?|tcmmOcc(#bQxO3y}EYqqLu7!7Lk-@nQBD({Y3VpKiZNNLY zcix-7-XeML$Y>)iZW(RK_%tJBtYH7_icw+DxN6cwe9l``QW%B~XXrZ~fL69v&J5`o zq`C8^ORz6QRHM;vJ{aJI=qw{d>g@5U?@iK&s&QPDJcXDKoco07f@k?hvpU~_Ko>U# z!_vsS5lfUebu#9%=!rAHakz}4p{nts@q>2}>iUu8dY4f8d$b!sB!zy^=&5@xZNf03 zIbXa6?+kyFo_gaYQELPjU??x1^0n*8K^|;V7e4W5!wIh$3f~<9Y-f!l^T@LKR1Lze zK8hxOm&UpIRS--$=Svs5jz07QJxxj+sU3LMpRb?&u83fJ{m2+G<~6_;Ncp%^h9Tabi3fwQSD;< zxmZ%d4GN!TA@BoQbA8OQa6;q+XQs64!E^%Y#TW7u4|VGi`NDLCs`4`r;p&k-rNH+0 zMl$h?BEbF0t2U-Zh}U-||R_9(B{$6Z5kN-Ecj%?Z~OaKeTjGtlBj&;L~~ zIC-b-iu;w-2gCQ*!?qrblRtlV(x#w38U^Y!%nXcZATv-7XaK~1Jaa->M+p<5nEHJP z+top4_{AR69@`$RCdtizQO--`lr&DFl}zjRSE}${;=Qo}!Ol1;1);GBBR zW6jf}IV)=YbH|ZK`rY{9UF0mz5!Y{?TDM)lxTZTrZ`?PmH;w0&JFVLncz6UM_}(wL z@N(F3HMQy|8bul%{m=cm{meVo{T2Oh z6iF0U6hRaX6b~{b02_b>z)~h%)^jX!lw{O2T_t^uy(pzE6>fAPHJioP*1#gpyk;?P zeLJ-OH#E7Izc>K3br<<>=5YmTMH z7?MZ_LUJ4xuF{@p(*v_)TQ%zkeO5=O$3x)MUA|s46K*`O>0FAVQRgzxirLadb=OYL z5#xI9WbV{fLw*$LLJjaL4Q-8T(IQJJV5Y35(dfyDBc|hM)Gpdi_jL92wXbhZbo0w~`1`}&*F+tr;XtBgI)_h$SZ z0{2um`}Rh6XOFserS>Kd*JrF3J1=T)g6Fj7YcJPl{=2&Sk;|2nhv|)Vy=~vc5AR>% ze=>fd`Kjwm=-caC#+oX4DY#F*>Bn#0ZXR#0BOkM=K{G1xOe>ahlrZ$+V)_dbTsp}3Nck&4FMDH4U_H*g>8)|)ul+!CUNqUBL4 z%ebNLAhYo7YtxdtXr5**y4t_n(`=vjYW0n5r=!iHQcxaGGvsgeCvJ z{T(QYFjTM`xSKiT9q&(3kvYq@pLiG@9aIP`W-_ULsypBD*8QlOiM`DYF!R zor>01vU^)ttHc4gclgwN(#+u2+0NE()A_Y4;e&OIrh@fMqgCzs_}0cRCP!wH6dpMV zPR}IJ)N05r8#}Ru#*v7Isf;~6BlEYnNCDL_dgeIOXlmRHeIv%#Fdj!fhlTxnDIgh7 zVW?AhJ+V9-L9LdtYOS6z(sjoT&9#7xe2R}*^0KY&GG8KJKzR$>?Dnl+4lkB*nbq#7jyY*5@x4PN^`Y+TzB461i>5X zwX}2G&$xnOqnd+lI_XPtAbEv!W|EEib3=-nS50qcLHX_t^LcGV7x!!H`-0z|#fX+# zbNOQX@8%!%*ZtJlDs9qiQgBj)718QCO~DNSx3QImnR(rBxLS=S_|BPDItR~}cL=zn z?B%PME!qk`9l)+Um;CqsLfj48ZR^(BC0EBW%m6xaEq-eZn~oMbV=bLRQIjQ??fcg= zc^9%%&WH3BTNR!=m!#9zTIu>SN7vEw8I?*E70=s;@?xGy54Kd3=UYcAlW~_Xpciyt(dgkgw8p7Wq`2cD}z2 z`)YiYHO>^?90vS>qC+wwTzBvFzTK|5y*j8Al|Pgp&cflV@YsJWFX3r!J9{cP&|&Ch zc=il`pMJF5kuFOPdB1;aD|9uqU7#5%^II5MKkQt(b2(kv?>y{$xv1T^>tcA%c`s>O@eU%E-q^C zsm-XMO9TDQC~&X>F|baFFJGQH5a7L*zymrU|AcApWh&5L^Bk(`a5Xp;2N3RUVOs|iA~t$fdPWj{ zSRx`KUI$}S?jIsz|0W0h;v+G4aRH_&wnK%0T>0&r0iR+dvd|= zJ@Q#7-Rjq=b;-RR&Cvgu8-H=kZ}+LS5+EqZ5hBDU{|Y! zqLKd9zH~aMq2&9!y<>;CKSu?|#dfE^C8)jHBD-SsP#0n&{`0i@`AhwpD2=qE&9ie8 z?C{Uv_`7T0!O6dGse^aeWw^Yf{3S2HdrfG`+1NfP;(AEayY_Qt)De|TT>m}Xe@*}Y z&o!0!kC_U+6mfU=H`;TfAXtoHc=q{!O)ZgM1jYBQMNv{?sAM!hWt51LnMHDxv}=b} zJ8hc(ibd#P5IC(rG6(!cMfyel7Q*ikEwaCWHLDb(?+n-w)Hu@UQ;Y5m!zLi<|If_$ zi>2B`$Yk3!65#_5eza|5e^Xt8dYQt3k`@082?8gJ`N|13v)`-Q0Q0}{~eNKIh$?=ktU zl7J@5CeEZQ8QyOOHS5|+YM8u^fIjeVA^(@C|HCy$9~l|}Mldk2!uWqGB>JmD1(WP# zcyNr!61&K-|E{WEpRWUc!44>YS4CC=rYeuFdZ0(V^F}-SlIvewk&#ifk?@HIL*@Sn z1Db2|!{V1EexKlG3WbHE4;|Ufko@&|_49bPKnxK~Lz!gEL?+L{)iiIJT&aln%)(Ng z843nQP-rN0TPA_}TZ+s(Xe~pJ-ow#!(Vm1k44EtGo#CXskoj*U5>zIc(od(&l~jTN zTeU=!Tn`K#6-6v=FcgA3FO)AS)YWGx>S7*WtTuFjIUXp=>f*gK?e=_3U97>(%pwcX z8ciNuLs4=-ombP#=%EW*4_~xT+?#5auQNZxLV#O-9Jhsc-xhlEv$D=&##y9xI$fMd z2N_YyXZ3amK#g@MboqFr)1SglS>CB3&+En>NNlMKc6wxZR-#JqJBoGoW{k}-Epq*r z(xs2~X!t5p>^r{ZdNUT(WsGqkun11#Wn$X)us?o zXn_vf!zS!-Hb-hA6_y_yBZ8cgGTpMwQ}Y5`*5j1sh+r~#9e1V4c3{23b1FyhlX98r z*scYSW%lFGiS`J}SQ;Qxhn*6@JHY+sYo1oJT=Q8HE`tvMvO46fhNs$WLRYy|8KuE; zj`kPL;Bvyl`AUpR*@Avg{}`vsE2mrrCl!8%_*9;#VxF7*Y`G%7EDndz8g~QpYY>O^ zGyJN<41xwOZ;0gyLs_6w7}u(0{~9?NnSOq?R+G;sL=cV=_~@4Ln+u%^HLUp1Jb^|@ zjGyQv-=OC?l==tR&bYeNzt@icAU<|epHb1!u3jUmaKL+TtGXfw2VWh5;lB@pkNGi+ zEkc?j@6y{*YM@XZjKkSRL=Avv2(Sq+DdY}{f++-LSYp|q%JQef&?sYn|2BlPP$t79 zA(n_3sk=4o3r|(>ULHrCQup429{qkqCV4NGvMLPhQ=2}x^=luf;G)dpkCN1r?I~5U zL}pmvVE9oV=wRi0ry}Ny7Ai!&R`u*&;;9`^j^$W;)l^jB>&^WW-skNNsYjIIv^b6s-B@fX>&0JGV1+|;sn%q& zK(WW_0b>wBg^~R}0%oz1k6meoRxyv0;Bf_Pwn~jd=S@-xU~r$|{Ov-@`fhC4`upnYSr;=*DL! zr~^IO9gZH6kew{gUE@ucWWDxD zL`^W{K1z`5WY6)e<;Op*?9Ca_ua7&tUILDd8rOFno;g|z^iPei-(B#v?$mf~-W)P{ zIhc@^93mBKiWy}(+L+RkW5#Rv9m`0iUkzbQl^Gk&CJ4~{W%)7CxT&e1E}(7M(v?u4nkvO*S#$T*2*9L}1^jLiDds?TeQ2*oE+p$1d;0To-^ z$bdiOMgmqszw0CowD(88p+@-VZpS67QT|+=EgNulXVV7sPkG~f{c0BY`tK`V6*rsrog>b&W9*xkGX8v)W#Wm2JFa z^<+{avwI8WlziX@w)>7op0UuBX97leB_+^m2vz##hBtf8K z!ypyJbNgjqvYxP4`-q~1D124NwNNMDg^ImmeRDLVW;jMsO=Z3s@%!wOcB-aRoWf{Z zm-}~~7!4AvIhkUV!DxJ*QE5N*iA*}blpF1s%md9LkGtby3WMj2ySwI`0(8aDAPI?K z`?3ck;JaN0zl(&Sa&Ss@297h$54-|pyn^kT$yg#LQ_h&fP38JZb@UF)#P4f{+m9%C zIFmxT-7);&&iErS%G#?(>n{(NuUN|mDXqS9it-y18TLm6PF>s&4bG>hf0k!dQ?s-l zVuIUNo9*+DgmnngIc#k*1~SeVf{gYGAN+kxcg=>Gwo(|T)H_<8FMB`u{29ZVytpV- zP^*wp)`sHk@2^J^=uLoZnjC&Q3V#r{x3{m(p$H8QvfEBmPl9cx+Nsi{IERN(v+9&f zu%1j*C4i~~Xf)kx>b0k8R;%?(l~qtUo!3LTG5XgDReb0zPgHn3H1lCa@w8ll15S>& z#^>!%kLNF`1m5$d8lUb?7DO9<&MB4}!-#y15^JyK_c%?dexJFFh*~?EqImeICC1i6 zGLKnM%@VXLGpjzm@kzxzaFb#EBbNcJDH7#$X%gndZ3UeV(zAf!NoLm5V#7w5YR;TE7-eUF1 z#mQQI+Lr4FlHqwms=6=dkZ-2Yl)3YothpWy=|ve{N(5hkGA#~`;Ss0GAMu@FsB@vQ zOaGg~HC-`w#NRG-{e#%Jr%AbqD_e26>5B)v|KU99C++v=c+T?b>7(DBcF*=UJw~|82FmT5)e^hs1H+G1Dnl=65NaSl>_ggRD3WXMD78ND;iKhCJ%?zXS z@Wyw6_7A(HWZ_BxjLmta7K9d%f)j0nV1JDET~=>f3i8d5kUf zYUlxqN`cUc`3O}KCPb>?K|TxbT2uUy+CHmo-tq7q5e0LD1X|3XEEQ750+SZ6uQSHI zZhzh^_9fj5tp{V6SPb>gB-iR%ALyo18oDyAosqO~u;(x}ti9*vc;~WCH@XOY-|muO zkjl4fFzGZ?_zdoLPP=jl%ynS%p?sH1$l5V|5ZvhsU*6&hc@L7|)UjSR)BKgEDSroY6nY!&`Wx z`6xy#s4|32UL;w;y{S%M1wgj(UdW=O26cIOhiRp-^o8yy`({Tg4XLx5;HeVW_0=}6 z9J+c`@&9z~MC-r>aCI#?+e6Fn%+bu6C-`yDFJCEuvYjgnidN~}ju z2&6~E|He?Rg&}AuTQfl~y(XgYy=A*^t1@`Aan1AO(_0wtjtKb=rx}Gm&|a5Y1B(Q0 zJx22lmJ7gqVS?+yk&*b=SbY)9`#U@`2D3Q!`5S@$?K*PLX=aD3LqC_qtNjM-RP5dD zO`q1rK!zk_)3G!*POrymlp%F@)l8tnT6maNLZ_wF?}Oa7$(0 z`FwFCBybf$dI4j*NaT(L)YaOwW~{vy*U%`q-){cL_(wI9-A|31Znr}UYI&P=Lzn3T@G)H&TwMq zt}^5wqWaYEGtAOf77cah7-efobXuctIS(R<)G7)UnrvE5rVUiZ7j3Q={Tv%!MxR}W z3k`aL50@J(J82K{f{Z+Nd>9SM=F7Eg8Ghw4;RbO{;u`E7vmNzv z$n3yuOxjw?;wwkCXdBh(2bKf<)+YHn&!Y&l^)yWddO@q_GPaes$UecIJqBd zt|mjN7o(|lSPy${G(pEozD?xF*valXLJFTJ)BOr!dAGUifwwu@4lJJ~n^UmE zY&&o-ZSy{TCAYx5Qx1ReSIG?KPRbiT3B&?o`&Wbxpz66UC-%%deqF1`RjKUcK`RZp z2*8QN#?*73cEB})W7z-=MH}1|{ygB?1#Ur5ZnSU71i0UV#pc>JM7>grblzU-U-vjI zASc`V-edm_Pf_UonY2z&h{2myoA@7%mp_Gqn^m8nuI4XYM-8dfDvj44PM0j#^?a_l z(7dU-R5e+t^ABmpRH$-1^e`iN3B~HgRH;KACRVks)g^Q;Q^TcHLXIKv~ zy6ovKdUG=EAQrH4azaZJTHq@X)2JNgZGXk^d80xpFf=lNj%kb-0=luni_ zLQUPqRpX% z@x6n4%_3~8ZkuG7@9ywC+W~g$M+qZgGAW7QvcYfZ!Wtq5sE4Mw9k?=u*o`Ke%VZV>^Rw^Py5ih) zhIaNE;S4MGa32RVe6zUdd~>@>^j(}eTdU&%xfo)+vl0V7+690;?xRcWU4cea*V24b zBX6TzRS|srG)zAev#Ecw&6Oy@#lVlh>ybr1J}OzQwT|6lU}O6&=y@yhvpQ=25!_Pu zLyayB-BFK-aK&3;H^b}PI7U_cB03Mu>2el+_Vqvgx=>f_e> z12Pd)t&*o*y9Kqk!7_5BL3%}G?krevVcy|3E;QAs-$2^`gb+`$f!k0a=1a80!q!vA zi0EM>EWKVGqZ76pVVWECq=O-SR!?OXeYBP5TpS%1{tJ>&grVPE(41oy_pq$H|X#uv+DxGB9Des*%TG zH`Kl9d6KV6@&d{kTWKlMBqm?T_h&GEmCgYw>`j&usS-EtN*WSW80Zix0*Ac)G1e zOmsBRae_apnB-`WQ*)~(SAMDPakImBX<$4cP^oBCkGpq(GUe1phiB(`oi9_xVUzO) zSo651b-9uj#fis2XoDO*C92q=NW)sD%dK=H!C!-9nN-miy<>m9Rb09SELLw~N@Fi| z>b8pzcd_YD8{YEXINyT2cp+dNnd9Pv1UIo@Z#kB{a^HF7m$d= zs)8bQYCQVj9P0bmSsn3A2U-J-*vJBn3A2gG{G4aR4c2uRlKqM`Geu`r7LFk#+c1rG zBN5JT%vTv7>1Pvs@!X2gXu1ZlMu42n%wOQoqflK6MMkmsFl)ptkED@JRb&$El8nym zk{a6X#4kK79#qFi`*5T;@P+EDkDD*L&m~p_D?Nt9AN23~1?*{=mJ(6$!eHl0^9?Gl zzamgk0<(tf;@qhNJJg>-JBH(!9oUd97)UoSBd;nmiHA#{8t>z@GaZ+V1*_)xq0#CX3U^HF3prc_K^wn?2K@a4^8Tr z&fSluhj?XH_V>#E!yk18**IBCa4vY_T?`Aujwl}xWtY|ZRzAnnBI$#yS!Xxbqo{r* zo1&2PxEwaD=Yp!8on_|bK5x$ihRk}7%J_ca*6h~HfpcYQD->kZ2~)M<7&P0gXih{V`{+Lk#5sD;hFS^iW?x>#KZScT9}*t=j@;tz19xoa$ES3 z>3Bw%_sjiOmgl)32o0K%wVy7K1gy5`Rur7jC;=i-A}|?rd3D-WhX<4FWEkpOMXeW` zm$H(%&G_yIh0&vyM7#(Op*BkAET3Gyx(yv<`3{|b$UTh&(o~u6G$oHh57b{> z>-qKshUumH2<^4D-|Y*C*r&(qp|cR<@zg*PB6i^BtKncswz5GswIdm=yQ9lWKfNRp z#JCf-hf<0&NG;48hyJpBT=dNspSgvo?>RZxoEymQVSw`fxbutVyIK=hY-&DOOht)? zgwzWef+Og;&gIw^=$r@Kq%lMA{d~bJ>Kj_kYP->RHS8QO(9?`)3*OR`zY~(-R*asN zU5%*<8nQ%F1=xP$65Olo368Zk1=ldDQ!keSY1qemxN`|zE&xBk{S+|pEimxAwTXwliX zkF7<^j>(9MKOgPqfEQUPO)92`1J=ZdaPF^vsj$Hbyic5-PhfGBOut+Dv~9<3k~nmU zIZAARWa=&OH65u9(#T>=TRbRl>bNz1vNMTcN{M=&?iKN7{%vn<*qgvlm9M^{Nk%rj zj?acfbu=}sPYdY<8?AV1Tl3aJZAOt^h%eo>nzJ3@+QBXU;z69lX!#a0+71xC?}4R= zspGNni(+rOGQI?*3!L!Xw#GgN4kM%`tI+W3?7BlYN~b7jgsnHT$ytJO`9>o(^`8xu zWIjI@v)_H)6yWw(SD`Tx92fS_^p)&azrRwNBG_Nqhw@;XiNM2_8-?Vftl}AS`g3sxPvY5iOL^Fy!6v zj{HU59y|Kc@=2^}*-av&zxKD-dn*#d*lLnNe2lH-ug<7pV|B_VIF-v>AST8b86~9= zNHZD_MMqe9O-|-3q89r~EypBRENZV+81vn!@sv=;KxnvZmuk!W*<4vNjC0A$cxsi2 zUs8LJQPPh349*_Yk3geb-FZh-KB^%%+dhLx9cQpUARIAU0priF2*3jl_E=9vo$_+C z48O+Z_H=n7m;tAW6J6){7CWaS z%CUqVz81b7zUoz)4L@^@hepE`D}1iEbq+pGs=9Cv1m~2G+_!*1SChg>*aK{qh}5O& zoc4KV?0~1zuA0wo!{VtR>}5Exq`^(&%yEZr1jzJ}R}*4#eMAT8XfzGkA+NVx^P5~c z$Gr{!PDhZ=@<1trF0CqSEqZyond7I?iJpoQWl{7*jyJ=Yh*QbTF%1H*8BI^W0#2q; z0k?f$v)Bl2-us8k?PLTLHn7<7LPQsfEH*nHa@=nK@2z8EKK;O&0v*T6lV`KY9+m#g z0sY5%LJ?yV82{AhYZZE^VX*n4tDi<72poO>xTS(#MWKL7^8 z=;LiX)55=&4V#i$K~9IsJL&PCCr<V*IV-s?h<;OcRI^6&UcZ@k} z!DLnL@QGHPkQhYWP)YdpOg^Mcn$N_Rz#3)RX9sjuf~NVzbp)%22|a`5p9@(+ft)|r zvey;iF5y))x(2>GRhj7MO(4gsEZ_Cf(RpdvhX*ALc=6(o^Nzqq#2#+J1(!yCpMW}N zle4Ga&hif+4GWKdaPZ_#IZ^iGOjp^(s*x>H3N8BCMTBUGtQfIXQp#`0j&R>bu z+Hj|ef@W%HUUuG@OwfJ!?Y5Xk8j%h3+oaCfpq1?XSGHaJ+gvui%@3gw(&{b4n#U^c z)T_GU`?nDn=C%++3g{lKX1$tU&tDs)Mv$myV1;dMGn2YW|HGDgDXiZO>`QqcgBK|5 ztkd(j;ySG3ll8^tB%1o=B@TPNhSPl1k2`skhWH*{msn*$&8BVQ0|+s*>PClQIAlx7_sW2CpQXoiCw1=oM$^r6`|^a~eK9?W|V`&7%o zZtIeIuD+d0A)AI(L|m3N-w?<=Utiv;`W}pc8>tizD{+6iWK?RwbCxd}foZ<1eEXS% zdg|Gon4)Gsb?%`Yc0lICES|~h$;Yc<3p%eSunc+tClR`va$$j`(l{uvXDt+S;Gu3!c?g@*UOAUM_0Xo<-|#+8dQ~3 zV!2t8D#O!DrJ=ktwzQNKFqH)dLB>D5L%UQWwd#$w`$VnXX+R8rw-m}B^`Sjhv8j|k(z*+30ZgyY4N7n}656t#MGYNP=s`2N9rvI#*El28 zVDSZX(3tJCK!q4Ycrs#0j=k=%Dcf;c(fO275@a@SWXTPPuXnS&apx#w*%_}8KAzqU zT#lJGrO4xTihb~6R^;DB2=eydpGAIHVUEyB9@E|*-EibfV%U>QC)W682OSW2&k($% zsTFO#rO)8SGt=O)WJYK$++?>0Wy#V={TX0cY(9j8ciU%CDi9c6y93|njlU22c<1O|gjKpGst|%L1sAdtber}6%(|=@bKu|yh(iy~@?m{kJ#g;YpeWZfduT7fIFGbw*G8XdMrhO}ZN|=tx7tO? z6;cs&_db3IHCaRl_OBlQhMhZ{MDk7pXxL`0(VXkf=sZNr6}in(G*{kW6eAbP zsSGW)IB=QLEqxQORBqOU;`Qw_5muWGdK)vmN)2e_EaRFL%d`c2{1nY?^3vx6h2#>PS zSCBH?t_hua_5+1@fv(hV%iXZ{Z%4c|Q=EEg&UQa-#5KEsSpPfjx0BSZ)}CA8n_ ztOAFV=mN$wxw*>>)?Xnxy$(ZBSb8IbHN5yeNQ$y5 zijp|CuF&2s7|g<2t>RuZjg72XZr3y>z9pF{Uv}5>xp}*kZ%`vpiyB?!B>9ZoVAKFiHem8B0OfEt<-6A+NQ^tccVNLkB60;uh0qsS@kpWR#xS7wTf3V zAi#5~M2V6G04wEnx3}i%lj#XJ&@QYJ+zQDihE93HkxRYjexozPVKgu`vn}DG8)&q3 zs7MFP;8JemI9PS}h~ql=!54JBH=O77OxgMCZ%6A3c8O{AS)IziRGVzxVZ|#N z4p;XlvSZFxnmjo}kN7lmg&@%!n5BG*)FoTIpZ1bnbes*_KHgtsYq+c49(Q8;hh(|b zB{Nq_Rmy@v!zN*7cIAJlBg0F7zH53kn8%BOvz28pTKBwbMr>N!u6-UY;dd;}{>x*3 zGoiyZr_<`=6t7mLios^7EU$(MjXlxvSXz9DlvdJy*I%|Dz=*t`81EP=Jy<>yk7dajIU6V|pH+jG=Ke&#` zO0U2BaJ8!0znMs!KIS$*odp59jXrb&yBg?Cqt6IQ5KnyXh|1%TQ`S#}uCuYGpDB8H zn&(*5@7)DF$6P$))ZbWL;OF}_qK&dh$jWqwrx36NOqikz-*jukc{fO@H-mX>zRQN} zB!o9GI}}`>f-REeGMTjr8v(xhgh8#OWiuLFsfH{Lwm~hpE4NUfwpQb7U$d9VjgLdZ zq+ea7K#CRbpSd(x0H8Mwb+SoSD$hf-(u!aT}v$J{=9V(DhWJcdaf?yy9L-_EfywGftC=M^aI1$)iXfMQaPqv-bE=;PZ|^DJlIbT9bw!01Ac=H)p+3ge zm~2N|?`6sBU`bQu?tVS|Eu&OTIP3R62SEMey?H|;6~HDp#6OvsHu!AFao@r};-vg| zc@}xWQY*OW}eKlLG8KpxX5w)SHw zeJ6>uX!5*g<4q0}iGa?NZE?`V%K)oP1UQ#EhA!}DKoBUJcwy_(ZgDVQZLS$$tshOL zt%*|N%zrCZiU)u!<0TU2vpP`V#^HQLI?A`wSP@7rzci53QGULU_}dj3s?vDA`xxwF zxub^tXPCQ`*7=Xkg^owl70C>qcrv`ciV{0?-R4^O$_fo;BK(025_(G}lx>K`Ru$=0 z7e_);-iB+(<25c*AM7i2OT}Dc|4>tvMUyj=ldQ=On+_)dOLa*MMGeojW8sYoUW{D# zkk0zyOcLrbB}LVIF)oI|xz4)ZPP&9XkGUFU4wD5B03Qmci*?&~*7ILx<1|*g2&evmH08dozd%uA0Q1Jla8LXl|cye&lg&c!Xc%nnuMT|K$Wdh+qv z##U!pF|FGmJhWJ|SyY+%oCJFT)zw6mb059cJ(>*IV6$L!E%-!El-FVp@&lIyr=w3v zf3Uk^DJIYRzPu!oK;OLeS+862UG1_a^Qh!gQtH2UAdDi{C=m{fRWUFQbZle<8+3F) ziU0;5kg$D2BR?WShcn7&ROHrU`UGs*AOI=L6;pYoRSf50k4F2-ucw$og(p3kij5jy zZ>{wPT*e(tUcO>J9h=}|IIx9SxV z`ByJj&s+zyp5{Bu@{V1)b1Yc~mMw93$^Q{nZ6>PvxcXgqYyb;8{->`s?wYA_`S&O++6;7AalqC-8^J3KsoSzGo z))9tYVg0NVsH=zE^HqAb+R3veax+^!A!9816-6ZR%qGKF4}5m`;MbOOVblw4^p1!@Kzcu zlkLCGyqSk}(W0a_G^wl>`%|v96-p)6o^UN#HO$#1P^Z-1H#plKwnZE4S!(gkD^x#a zf?SlrKb}Lxi=ja(@`uf$AZcvB>u;o36sM#wMy+UP-NFq`GP}z z`*CSmPF02+NKa+c`9Fc;J-k+bWYSLUO z?aKxtP8NA6+O~4!8Mmfr#_UfclkILIHkRg29`O8$-&%7tqQdj!keY7135-FiT~|ZO z;!fEglNBXw14XO!;~N&akrWZx9(*+Z*AbJk*$eI;l;29Z&+!*^UN_2j<<*T7Jv(`V z`C>Z+y>C*+Xv@yg=@Gg&_(oCrifyGHl>-6i*NlnGXVg zdgrq9IkJ|C>uP~c1d~Jm7fY~~tSR%^a;oFGvhZsr(T?6<7IUvW!;)CDQ>b6&IQzfk z8+{0xD~?X6Jv|~kKKe#PxuJApFzVY8F1*{r4v>f_xO8bL?BnT1$M@1%7p%~Yc}}>g z>{0!r%M}dfkqr6k*O(ao_ulB%f&6P|y)426&Wjby{;k!2s)X zqb;y~N%T4(yj~Rx01kq&u%oe_ut70#!&zQRVMDKrq)4eqOg!;WU&-v`*rR;h@OWHS zE45S;l4NmS*0Ed)y?EXBgVgLUH;GvS3_#(c;TXdQJ5~;6hpXt(Iu6lBVcX@-g(Dg? z-yXST^!V}SdiVqm&&mo6$hB_!jl*O!_s5<4dumSaY?Jfl@5&=kc3j@0C3pDycP+|J zW0UWjqXVp923TMBCs2K6Xk-e@v^Ib>kw7DEfDz)vh1Rc1J_3%Ld*oD@DkO6F19NAV z8!17P^i9BtXSh%YoaVy)RWdaf3EmB&33hP*S?hKhrV74Lp0SngHJWL~s>#G8%WSSv zIfkDlVe?mnw=<-pZtR~^J$%$Al>CHTxc3{+f&Dr8#Wz~Y&X4xwguUBb0tS8bZJ4~7 ze;mx|O$%R`-g|6wvjYX=8W<04*LZsjha1vqx5z4DCe%4TI{Mo}m20zknTn!u2=`t;di z-Lb$lWiv`W$xHzM+iBNg&5e9pv+3Be+o9i!BY9*BU+4}|SCCN)cB#WouF~P<)J621 z2f-JiVkr#YVmn$A5)!3c>Iw{XAPz=qF_9P~3pI{XJ~CfZAZw?Pip$yZ-0Y0E1s9&i z+n4D!?x~Vy+t=k!SRG7=Qzb>nD4700ViHWW?iBaDQ%vNNbkJY7$00F;GCastri;Xb-U<*QBCJUrhKaA$kaJ{}}0WhM!BQMoV4acESi zzsRPuA|4`j{>xqLO0`dj$BJxSW$p;0gR$@fRSxubU`HF;(=*?W2=8+})EGW)tWw7D zZzg^AGF^k6A6w#pws4Tam|8?I@z?3G5T<~)R}FD1WuK?#JAja=B8JtKKE#ez*iZF& zy*xut;0c%D(Jjb1ZL4iywa^rRH;^G`c;xZW03eF-(UN)`npoSSoMBstG=?c$;-*Ug zU;t-kWupe#8PSyC`Q*8z)Ebq}lXjf;gXy+}x zn*i~bytJ3m7wffA`;-I3vXZ>Y5YgGa=L7BWQPBa%TB`LN+%GOAdwd8_qV5n8zA2Hx!-J9s_`jfEk=*(3($O~n}~o|W1;3&eqg}x0EG!| zgnn0+$)h(0g;CrfPpLcp0FQ+IdFy;UOJ%iOKNLEUA;egLhKp<2%d9CsP^wW!!R>r( z3^e-EZg-jiJpc>2)kYV>@2I=O#mfrXN#(1B--TQg}ePirDYY=O#^EzwB zG3Puc`EbBMr`Jf9!;Yh>QUOLOu?hxXr|K#*g`VeitMe7!dgkUKQSPkSV`mQr$4@dA zEG1Dwvd)HNirjA8}YLR-Pf?GVAzAHtM;lo0DTJ) zPRY`c@=ONLOIqWZ@7j%|sduaX??NCmE{lX_i!&>r*L>zGvV5LmY8xUd$#Euy42ri9 z`9rcD$gvf88LkTHjM5V4%?>E|VwSmlsBiO4zLTkGprD*f)9S6eOdk5fn1Z2FXt z!(6W(M8C)EXBFrUZEXb`HX>A|L=b&DMbZe|*`1?j(2fQ1eMgwyF~;%dg!L_rEDw7p zq}WGuy_yi_;3gkwxXSS{yA0vEe!M^lvg{Ev>y?AKY?&lh4nY^P`bVsBq5ZK({6X`9=ry?pK zXWnv_s;`owv@hk5)RDn1jpYR|XDGtMSe~J!%$CjC-&t;H>>pKT9)ITFl#clmXo*-e z4J9<}w1c)nx~^0t5}0&8=F^}_qgLo|QyzpYdZyeVt|@xy3l66fTash%Sdm-%CBl^qPrCW=XDUxyA)qtbOTFzC+ZPR&wlq1WGyye0x*yH^KlGup1Mc+~bopA31JF7NaZt?Yyd5)28(8{d8%6mm9UL_&Y&y89e@2+K3`|fi< z%CUX@*r&6Wf-mr61$p_XfE@GMQMxw6$z0+O$bGW!((i<#a$b&Ey_P8OqCpGD|IB-K zo?{CX)>POZt2^H$mc2hoq&3vqGjJErNKm8ZM3B~P?fBBi1PTwbIDj7^63iF2L?pw* z@=?Kxt_@YSDe2+;D9_G}LyfGZwYrtf&+2(Zs~1==98Da?|9US=WZQV7K@IH=w)+Ta z9esStfKgRUu1K~QZj}A-il)abzQdC)SN;YlV!@pH{*bBN7nU#<*~mb*%N~xR31E)j z69ZveWKTB94Br7kUK#|I`EVkUuQ{$p6U?yzq|D6oK5euwo}cn?K+2xyXi4Vnh#XG> zQs^u2=2}pEP@5k-=9(qqJ5~oI4VRz34Nnx%gCf4xEzVc;VWtfYQ-B3$!~NK;%|pn) z@4Lpfz2ybbVBXSBM##GPb3N7>fme-KT>AwlZLTWfJ0`EZG}i(A84Y#wmY=Y~!OW*x zk;>-mKd;bD_FL~CJy=qrL#i^NhC{P6gy=>Za-}m#-FADn52#>TdxyYb){jrrCX8V? zOh%2Ej4ODw<}*_YadY3#KH#7_j?6;Nuh+yB+J$z2sUsCR^192#^F&jqN$cDg1-2tQd+6RtB}QQJnrnzmg|k9 zcI$(I4FRgiH2mQL2Zoqsl1dBI8+s1V$>%gwWGpv~ZV$TxmyMW4_AEgHLNps1Vsdyttuh;qmGLy5Y+nYW1KmXaz5 z>0acqVESrfYP^m8Gs?LE>lyV)Vl7AEQS-J`GJ`es;V$Zualq^<&cYuwbW-=^`{0iI z*>(x*lDRp>|Dd+wRvI(tpvi3;*ofU8D)_)wB3IJuq z7gIukR2X5WmAX&kJ?=naOJh6D(^uD;y}ClThayB?ZaBK=%Bu(=uw#I8H2sK z2j%mY3!);Y*yR-Mt-4a~o>0=*YHpIfrXxpN(4=e80E%c~EiX@_lYde5`Ls5>thScM{~CLRWRB$~VMOp? zCtD}(P(yr_=jn8%VOyip*YM$}{33FMt? zb3lP&{B9>zd>Ae{B7&O@)ea$tAk3#Zml++6vpw2o_bL%ad)`*~Ud#tA45O*b3teVR zRK98kRX*pXRoax!3ZTj%IH4=_yETN{XmXhLt5T2W-goIfZSw`rpD)*sHH9+vu6DwY zYE&O3!BIzN)Yv8!=&Wf|l+#L8C(8_fP^>_J(AUKf>iD{$O<{E9Ryw?fnwYi(2cHP2 zOhS__wWIQcOzu(7hLsIv7e=!{WGP>HGqN>Gi91Q#gZVaB|GRmb&IXg> z{rirMqLUoy9ASRm%nLb_EL~CpOV~E@=b`lS+XQIg29>(z##6taqDG~Bi2$yKt0o5!*uwOGg~Qsh+N3qe4*o?KyI`4a;s~tXC$2h zS{U2?Nf*DU-lozqR-tr{_TC6kUJ}lV)~6P2A&Q>9RuRq~VWCqr(U~X3s;8zr+hnGv zky$~sMyqFPHTu@mxz>49z4?Crv$I!=ld3<+tYMsebg-kC$(q`6aMmtrR^4q$k#-*Q z#v=V!GK(3ZzMzm?2m8~)B#Qfj0untwO=pEn9t!nAiF+ay2J`lJpZ4#!^Y<`)ye^xs zYVseJZjNYKCwmCpDtqUeEIvB1ZK0SOF2PO4W|$woQmBaQFEkmA`)qnmL2zT4jcQDt z-PO|DA!2=u^YcUMt|YX0AGJniO?C?0Slj6OkF_JxQ6KFu>IYMOmS_8LsvllX_nesb zX8QY=Q(y*jV1x(=lvzwyblDG5Nl+1mKiDHb&diHA*!>Qe_H=_R$t~e-H5^~g1gs|n z4fZ~eo9T>~Y7Cma**e_u1LBCSidut8KNC$Y^+)w6$HS7H8My`=R|`ulmtU70SWSA~ zAp5^-OZIqu1Yp-QjhZKF`6N%TEC}=J1+BP;)@r#JvLe@=T{^e;Fz6T#%cPpSq>fa+ zplOt_9vn&F43{?JxhgAEjvjhPfv7Ks8W^`w4n7b!X1t1EX54c5Y0Y$dSBFvO(uN7} zW$2D_mM)6Buv^u#h<=dFQPWtMAn29idSUV_ifHe^pT{Y>#h`~%`?0=Fm0z~k6w=wb zTv}=-lVrX8)ME&3+|F|7vR?mW5(C+>q3@i+k0rpI-#s*CuabzwbWuE2d^O&M(j+ZB zqN*b(r%}F|A_)V}f3AEhx@w>a9gUN@C)-w;~eG>k4)x`c1cT;CFiS~1( zR#KiJtwo^7R=1}I`#^TP1v}KqFRnzzUYOG_6vep{kI9($w3SOut4o6fWqooF=|)k; zuJ=A5ow~sEO<5M3{BVTd-@ExvjI@=s$h32@+~SO=H=N+V{Aj^(6*EFAR~QhN=H5&1 z?6^D4P_BQ>P9y4nd1$fRVy|!951>lB5VXx};BrrH(Kn949vIR*hi^hQR@QH+8oePNGO!aiiTQ z<1~lUj6597YW>yR3C2fV>vh$fHW=mh;|dt;niY%Uh^Nwwema)8#!*|$x$9S0K(uU% z%#Vh|GX8ECJHCeLu#76%Ok3IhClH6+p^f7lFap(CTSp@Z^=`#*tPaoeCzPitzn!w_s$8fo$Ax<;Qj&h|?06+>Ydb`cl6&F%QO)A_323_+%gwiCvTzi8v%FFb zcFtN1+C4MX?yN7+P%TxSXf0J5ZvsCkUG!c^wb)1{-y5UTo6m*HARv@{gx7IKh5mB4 ze)Q;A=z}VTy5;+(#3OfjFU#sD5)P;Zl5EDzI)tQ?)6%jCv$T`*sgv4#mYNXx;{$zx z-26cb4~RiiLUsNTF{sd&3$m%BRryU=13jYqzp>6qJl!9*T|YpKbD1~n@_&EW{nXvl zket^1DKm^Kg+;@AclrBgKDk2K4jBp7Ej5bSkzoG0r!uF~(1?UE?Qp`iLgcpKovu2h z!8w8HFA*4HnXIKnxZZn&1Qz`8Ms_KJoe~v&pXIyt-SHYvXy(5nXHZ~HVAW_5q^NC! zD)v6ge$FcE?-!ioXsXZ|K(Q{3s`Swybs*7bZANZ!kdXJ)-20eordvocmhDJdIerHH z8Y^8ai9Rc@i%>bw*$SaaB`Le1k2bJs93qV>4560dWI0g+wwuCZy>}V;5*Yap;MjCscb2C4; z#3g4^w}hYP2=T=amg9faJ$<}82FXl2a-5Ix)LM*CzVh(KK?dS2E`fbU)5V@`98Bkx zXyLmr8%T#GQbVe!Y`M@wce!oU%v&GK4Mf$+=u9LLA&*;L=4gGX#hgxBFDjVa44#1~ zA}N$B@j_2^CH-o4!h6$`92rSuRQ@TE=Os{k(VLg`Xzc!#-f%+D#PoP@!ZlNqs?U`P z4+u~(R81fb`s3BVyC8Hi7|E+H4_I0wqltYL(~Ho8{G=3Z88Esc&-3#k|9Sq(diXne zF;`?r^(XfAf|t{1$n%P-YFypiM1kpt;|LC>5q@)LDT6i#!9@t-T?_;h6Ae^}Q=@h? zBJ<2>3JbS>hS%pleDzIIiB=3is=~tkraqx{t>l*Gy%dhqmw3Ae zb}y{y&zQ|_`afaZw8s!sTYp4OZ6WBSQMunFK4p9(^<&5PU52gY=#43sJI9d&2n}MU zl5rh(5imm1tPJ*0B7NiA8)nC40}qK}u* zDo!x=bHsU^8!B?7`tB+rzSbpd(oz_3|0J&@-mwf#UI1yK_S$ z*WMvKEQ&RrEKghJyav$Fb|=GnYtIPO(?bG^#)#4Hv?L;&Po0J9tuLEC93F}8Q)!;5 zS{8xKzQ8K%d-#``$IJKsyKLlsi07_;H-MAw5P(*^b&Dg8+e1sCSpUPVS3hRI3D$AR z(OEH-^%x!ohCjRh2uj%Lu}{&ZR!1ULR9~`5*kONO+3}0K9<)?NaFF`>O~cW9v{oRH zf!Jhs_@xs+@0#y!vL#y&pY(Ae8$hT=3^+!z?}YB;DwM8{7DM~_`511ckrN3sEo))2 z*N1?psJQkfS+u`jT6HAz+sETzm@V0|@uVk*7n?&dblX6|3jr8%37hsP5Lz$hn1%hg z8h@mumc@Kvm@mYp@LVSpi_T;tWKMx z$)4i6IbGrRGa1OySIR3b0PwW>twiHfqigceDD6&a-03)n;zcADC`s?UmFsDdOi=TeK!A)t*Ogi=w#l18a%C&$EgH zKWL3v)g8AWS!lD_ULupTG2b&SOn#tvlc~1F7yzn$_T;uo^5N7<2dLiSS?d09bg8hzaId?`t3HQr8mayIuo~L`Mp!yV2@Yu-< zlQuVo%PwPeIfCP-J}MqzextBjl=CjbtkJS2!NT$i_l*nguUdiLzyX`x+X$yOXZ%ku zCETLzN=hcUFPheex6^pTb8||_N3W(F$W!mB`Qg)cq72*O(%Qda_i%mpN0Qi%4GZ=u zxfkv>ol&+E$!|A2lJw*v#MT;9!=1oMJ4ndZ0!5~MR!HuN#1&VttHAT&&r$*zj};Vz zpG1TO2{7Dy4V=w3baRHeu)zlvhG3iT6H@A=5|D-)6?{4=`q4}o%61TO$SPG=9H!Qo zDU?Gna$wUpmk>;IuO)i6wBv5OY4b3T`DM1pdP^&`KE1(9c%IM-DWuX?Io)|yo_P0c zUMRn>1^eW1f$&G#H}!TbO5|u8Js#nhLra+orP8xC+ckXsrm>u1ra~JEo1GaL zTkVO~>peUbT3s)nVcEKlSE^(PCa+tr+NPA+P6Wu26qqz{3Te%Pmu6|jsp#KCEGfd= z6s$F+?>J%5rbhu3yqG9e4vS_O7@SX%qFH@^zSf>zoSbQGu8eEzHZmo$1q4T}X9%)L zo&mWJcTb&hs6?7&EC_rqo zVTYhOYd3*pIEH|TkX*_X=C#zOqtAU!H{TLGQabfVD8Qmo;s0X^+>*$TuI zMn_oSn#OO=+`dnLPkE=hEaIjKJws)$CVF4Md*@9#6g;Hk{mwnv|5$(IGQUKFXn(p$ zJG!2lP#C|_fOd^9+y49qHS+F5U}zHk2YS0a0qjkO!x}ZV)6?URm_G%=@Dcbn+ZfN( z3uSGbGzFniMcFN(1lD-#^RQydGl}K6=kJhz{8-EelI}Y`yb7lzE!3%~`!0&zWQm8< zpB;u1BN-IIN7$Lhh{PYuU9g6Sr;RC2pdQ~%*w`JiIw4T7HjX)SMI2obCFlMIFEva% z$U-D0Jl}$3h*8L3u%)S7#;2U5gHV$3f>9hAoo^F1Mye$l@p;tp2ug+PFwp@z6rqSP zakqA!WUesVRFP4G;*Dv%Jbnhr)xm=A!^`jw*$yz-$=|N>Cx|slf_zGw$CxJ?$0dW6 z5{4QvwLhCHMDC_fryypu#L2{0ZC9_$CbK$WSmvogl&=IBL)!HfJJ_!tb3SS=! z|whwrDIeF2pjTtCh`Y8 zBOh;$BT*m_NrS_*86o&1nDiW_-T=aS`@!e9HBI*_YgD}ScoFrGa3Q%)kn06}+kNGm zWw$GD+(=1mqX(cw8sxgs>p4Q$DEQUK(56&^N8S#%ML4zM_8QJszsCem03D{M`7S9- zZ=hYJ>FA{ht6rdn%@eq4{YSN7lv0H{!?Ei|DEHlX9MNluxkg*#_1^5!=?mS!UdpL( z`?ecPGnhU-Qi-M;MwxIUjJUemshCOYiCX<_@dWYF)D&C$0nK zcB?J!hzxxr7BLrlGaXeD9A>8%{xV2<`g#`W8F(BnS8142{UCzHE7A~Vr}O;rzNr$G z+4|#xXVOt^Y{rN7`nbc^Gj*LRh4=sqi)aH6exI*4v)CerhFDVA4cyxdmADZwot(A) z<@2Te%OAKuTJ)(%gHc-SN<`Kn$Iz|R*3s8LX@V{lHF|bW_hyTXqifIx<3tqR5@QZ% zg~pSw;#;#kT;9QoJ{lzwo6#Vg?HJ=_WN6m698(xfHs+LRZ2^T08yKFb@wWrK2jk&B z<%1X}U(KWYD_ZCNEw?GB8|w9W)o2f)K~@5Pm7bWz{xE}(V0FmTwsgf<9N_R1JBHUZ2L@7dXx ze5$8h&_WA5dP(vvYZ0rpMHp*$M%S-3M=_H*aQ&@2G=UHubDE(B-B@l?$qi$Vx-TE` z^?<-}g4;P3qT_+kN8wk}Vx%V%E#(^U%&G3XbWwS^Jm!ejxW;}}R5Gg&9LxcNhwR8j zFSsWz_F83m2+_iEnQi(5da>wD431z@vSRN*caJk)51mc(G|5S@&ICyHPp$bFV`*fx zsa}M(vsZvrNi;&HoPNf4SF%~IWm}?x)3^qsNp)3c=hertjCQehc9UJ65eDols(*Za z$7DT&L$2~@oXh_Cf~OM9HD_OTw8isc!VYG~HpLBP}Lym|bBG*k}uBn6qDm)K~TsC*Rd7IBh8LFn}i(<06O^d&=lEF`9 zk7z#-nf6zd$6%#et>M0goG|=;hn3&ngA!ga9_Du#9L<(vrn%P*@OS~y9V~Qev{*w} zROIx=C^S@kQnb*X?rw~zRNgreUpVyIlwR0KgYN@;UGW5rukt>!N*fq_9?8khpmX_AM66I-tn?^S*6PW2WKmnza?e^QUjW~d>&+*bD^zv|Bx#$6UHIE;*m=%! zRlmwlWH1k6F>9JTpeS2&;h1*jRJ*J-1^EGqZJ7Z3!&d6pU5A1d?BKa#)MZ8=z}j>C ze*cHUyYEAoV2Vw6flDhGlzy^VYB)7+ZV39I9ka#T*No(=cyfGh!rjJv8*pEv^S=$n zkbJ1kz8Ejpbmc`O(V|;t0jNqTQ5hRgokLVA`$DAK1l(=PdhV#=BC4GKjkN2hfdFb; zdM0$+G6k;8dgn-3Ak!iQ`K{fO{ekCBj}CCR`tYI>6mQ)ErntPlPq{umZ6Uz2^i{Ws z)!$-N?B;iGszgygQpNSltBMqtU^YS;Qjr{+e4KbJN(x`qO*3-kMUGK5lh;X&28qXFD-V=c z6X1w&4Fq^KgqP6$eCUL-X;bN>LJKpD7f18nO|3nGJLKCpNZl;dZ!u1=O;d%v@+|!{ zhU%;B>E_GW=JF{W_@;0F3vON%$&Pr~zJD-GGrR&Arm{rVJs9GDDy$YbsSpy8Io=|dqj$w8C2noz=2 z;Qr6pQIUwDyku#KR!O{jEdRk6Y!wAOZG%vptA-VnEUTSzx3&#l(*`94`rmZT|2PQ$ z^oJX9&XisPVyvO7{q|p1q_`gF>ieEljENLUid#Q zfFOPu%!yJ=utNZ22pR&Sw!>iak_S#Wco`_Q0g-ti2tNvH z%J!i6RsTq`m}k&GxYYl=;J|;|g*f@NG&A16LhFcc4E_5?ak_y;B*(7xfk>=}U-=Zk z7{5o@#7`OWADv`Dd}}CfZZ9!LVZZF}I8-yg`K$Y}!D{QZewY;|s-TcqPlNULw?wBA z#)#dD#;Css{x#uy4(BU~cYL-~7Wbn(nZyKkA>@seH+RgGQ&s5j;=iCW{?8OOy| zwWiL(k2PH2cN1eghvX{MQJww2+9p8OK6k<)^O4U+ z_+L!R!}pn|_FKh|eE(_=|Kw!CasdZ|+kkKHKRtEe_bI+YV$}2Glm6fA6B2lz{yU-n z?hw>}kKBLn&~HhU{$HU0i1+`BZ9rfBS19~fDEwC_{C`IIe}%$-g~DHM;QxQD?Qd5Q zPgm|wpW1Gx%Qhaamg4|sRGn&eTo$|N58FTdZFKL8LjL9kCSb^J<>|JYHo>GrwQ}d1^K62_6-gKDr}RR zOcEOGrFzO!ecSicHiM*4t`@w#*xzp5q=ImK&-qNof(DuK?LnvNpM2T$8o=S5QC3cL zA^;z?jcU$Ts4$YXg$8Tg{%`M@4uw{cPGFH3x26r8#8woeUX=X_De;^k1`d(2iS1qp zSloZJhPZjdnCpPZdg9^oc$PNGBmnEf`K`Ux^-iZd0QnSX6#0T8EUC`nr`9fzdAo4W zofNU#PQ3tU8lJ)a2XH{r0GL0Talvw9NNn~|7%f&j zLa^wB0j5RNf;FhH9-3Y1HX!`53(W1l^BYsWfBR?bKW-;7cssM-6GQ(#IB$Vrs7*`G zMpz_{TJOvZLA9p)W~@eO3=l67@j_&0fI@jb;ke_#FN^E(``%4t9U6aHc>Fp5H5e+n zOsD-d(-K+ynD&a(Q>&Z#*;b;vt7Al2g^}KD zff19%&P15+;coeflB(rAa=~#s1uRK&qWw#!s`Mq4YK&q~(_^iOiUXcOC;=E4IoW~9 zn?EifCU^mJNr-2fu`r~|sOoSt+ciU3J1uNL(#^< zvIP4L?~?14+6`#=aSOh$a7*BwYc&oa%`$aI{e`aL?3Wz-=Im`atUgh+9f1ISF|3H) ze6y8gwHc$(m?V0waJ35b4Pv>o?DS!3lnfVQ3vUJ}??$Ni5PmxMzxQX{Mq#6$R=#>r zWn_<{He$1Bn?1{%=_%>U@WT~B0Iu* zCTa*2v{cF^)~I^Z(f&Bc|Y)S25QCaIA)Yi^EZxnQ^&)ogZsC#T5 zp0lWYsVZi?FG5Bm(0Z!(Yi~Yix^}!;S^srAOcL#nqQb(#0)M=wz+6;u#`lx~CAqo1 zhW7LXOxm7a)1!^o2q3Gn$-x?w&F`O-)Xh*h{Y!Rq3;PaQD)0x={z92pFsf4_DJd!UO0>Gnc0u>_e6ptb|CelbW`4hyyualtY;xK_obH*KNbv6 zRyxEv5A`|j=Ja%@lU+3+R{(i?lzr!#39-j+Jt@Y()KWw!-1p@VQqDjPSjL*t%iP*u zYt2OZjm%S9Ijle?Px&Rkp*j6LY8XPC9?LF$n%k{m!)C0CiGo%M}A;^Bc(Nv00X)adE^cie8Y_~gEr|po4*@PVCL`Fqya)yZJ^gPjz zn^f)*m6c!2mz zM61I_>1~Omw?K`=Q}a9?E4pltPNWIK9>LHkhMZmqL;5s^RN6ARq7kN`+PPxAn9D)3G8-=;6Nuzy z>~fgvlhU}o{ru-#fv2~RkX9O=Ne<(J3YCD-2NXUxB zk_*X3$Lj)?UT%joA0J-?QViAShSav%-oeN@uc%n!>1Cty&n}>G$CXi+J?G>H2?Y>oXP`cbh9ZlY#3PANeV&$ zBVP`DN@L`r1R5yS63k@W0fxC(|2|j>izABeVu(}D@xOeHwE=&T``nB^3i|7Ac}T)e z2eA|rt>Q-W*@#H=N1KG07hqGIbmb0*A^-jT721G$&dZ&%$F&#rY0t$ zpu=~+ISn{bSH4aKTlz9sOVq#@D`!$HEX{e<%Jq9{Pft%<4b#mEia@2^n)(Aa^kkky zxC?v5+||YPY=#~UlUV%c_c_{RQMv@?|9W4L3>*Q|KzS*d;+NHlkM!xAF(6v7;}L!u z(A;?2cFxqmq`w;aFnu$tW}jlv&YMJU8mSi%sJRwtHWkI`j5D#y0a%R33D}Qcl1h~e zi8pIV)@x?f$-st7^Uq%F)ffb&wPkcu?>wN{135r?`FcQ22M|ajV*wd3mE|iy%3z!b zWy43ap<3JUA^f$FSiHhhu$55evPlLuO!>$)Z=-*>{c-IS@42`Bv_(bWFyS;U9ony$RllyMDjd$_QmsuuFQ6h=zNqwt;p#rzUSvLp z(VPTqINj@$RSM?fm!CZoWf~kLl$5c+qp3au`Y;ILronQZf38B? z-yStW-5Al(`z4}yqP$w${U()4jlzVejNrFo^sHFeR6{^mW7X$8H*Gw2{InS7kAR!_ zQ@z3Fj`?0Qj#3Sa!Q2^#5blRH&CJ>6RDq1{WUkmzaq&Z_Q%LPpt2tza!8pOTi*6Ny z;U8=qv;p048kKh6&B3zkjQiGXrQP$iK*Dtp zMs$*s1o!9^Fj}l2sv`APgpj6aBK0fIChYnJ4pWQ(Dj8}nnnzY+Bclzl5`Fh{-S^0s zaZLBhw8QI#kbl?R+^E|Yd>3Y-R6hhRiiGne^VNd&=1x|)onN2xeo5ViFS@#g*Eeo? zxRjC`LtJOT2#L=HZs+NH3(>1CY_oc<5yo|R{kCz}#==73RHr?Xn_+V|)SWn!Er7vz z6R_RvR4Y?h?0a9J8A;dyE^b-Md#QE#SMeF9EZV*BpYWwe5xJreUKU+g<%zxsD;T~0 zxxP58_|USG8NAU6M`bfY=#S@=4>sL0*~8f`MWN7l<=pta-XEdy0IzAAO2$Y;5dT3dd#;?+wGnPJ9gfl==-Q zN%p6_q8xh`HaIBEwDFCnxr#@lOsz>C(1B=;3r(D2X)dQiyYn?g_IBTmU%NCMR1OvI zm0^k|(h327s}_W7Gv?F7vAg}e#*i^hOkA8l^hLHj$>6)cxd6xKn+Oftpq<*9+$=3=*TfgQ;-nFBN$ziH{E1NBeBE7GxG& zT+s0vo8BY<&SVU}+Rc8^Hm+E;;fs~qJWax7?;G9Q6>mgd=g~ms>fB3|?5@3Ci^#`; zS_%{A!|{7Md@~?j{!#2@tNTgE%gygJqwuP^G;tIvM8H9n*f~vqLC-T)qEy9i<1m^Z zHE-k*ak;gTmWax_J}lzg)(DiwY#daL#%hN#_0G+3JpM!+=OlbBIrWwKHKh@#wxmkA z5i;H+{B_-dQ5KsDAuN>5V^8A@8?6!;{aZlFVC`)SY&7>UA|~GNHcCDLU6#-~a3z0;3g7r~MyV zs@Bzw!)-Ml_7qAW_Nv7mx`KOkzr+7Qt`i#oaviqOu>j|n&)oXz2Q-;sOXNl3^g<)Y z)BPDxYaw+uj_*^xRAD1nL*=?FB2^Xn?qNsZv|-eh(#lE90F*TcTnrL)RST{K`f7?? z@f1=(_y?)HrR8y!ntXo`=vUNgMvEnYgi?1TnaOkLo~CBI3TPK}tIu+53TbVV!+Z0> z^ka;x_3lK@1fb>X52RnGTGC9oih38^UL7xEyxF1@IiH;|{JGYX*%j_5Rsa=dI9CI> z1jl%>rVB10S1FpExvIQkC_?h+g&JXiKzP85 zdg?ageB#HNW)iB;g&_3jptD_$otLA?%9_7WmdSeQFNlsX?~^xNEjgF?3ERwy**}vZ z_0&Gw8jb>TNSpYA?(1r6XLh;1>s@yP+zb6AdC8GB*z|`HaDbt=U?5>FmB-}`9oPsu zI!0=w-`3+&Jl|`E!$8&(B!TWK~shswhn1lJNQ# zV$54EL}Xy4EzintiZ-WAjly}Qh)T*3SPFPp=EWOJ%w6|YBK(ixKnyZ-dDX>v zDRzlqGi;*O)ftq@vRj4AIFl#wZhU1x79zeHVtz92(g@u)@r!QIq_%wJ`R|$2KhIab z+8l}#DN}EWr1qiIsJF=2`PLvs#Ad%M+59Qlg8Qo#w()R#Z5_3J)~L$mn*Hu!h!szydeosr$& zC2H!Z8Bh=94uR@d`(>hg7P|vQePTIx0?-PkS{vZWR08N${lj3Iedg610!|a)F@doF z3E6I+A@=(dp7Hlm9DrBkv%BD{*|OU(wAco$$zeM+Xr)Jo&7%Q2@NxdyfIZO9vu0T2 zD(=|*=}w+!#R&8AXpu}o)zWvzB1tOu1>D>IIsG(TLK4G2dMqyho1>jSNBFnL@=1~y zupDWm0gbAS)t>t@83vW8Kb~4!Yo^Xsdy-|+c2*6YacaFc6gx$|&!p~9tc(o_5IY)H zUSGu7E@XGdv-|=0#xaU^{{j$)n2b0&in&}|R+@(1TgRX}3EF35gEj!r1AU30hYdjc zLG#Y?nO3?qfGOb(Ktv0MPrSOK)!#4gEdasE(xQQD)&D-Q5-sTx46PiwGwT>ny=Uoi zY7u$0rg9CKGei9m9|(ob0~?JpHSJ7`>B<0NOQ5ym!+FlM4z{Ed;M@+pW?1-I^BU!k zdJB9r7)^!5ejf|PcKXk}MTueU0lYfQA?v1fi?PH)-z(GGQAz;&d2th}qWh!x3BU8W zu&p4+@FjZNHQz>RLZ=g>^V7rCX5|oN@Pe^~*IqX{DG5mgmCGue)r^wZ@NB6X zs##|)n^)MePePLKu1y_DQLOP_;#h}Iv~fYNez5#3(5$=mz5wC9p>gW&Xhe4V$3KC7 z#lS^~m2;#2<;Zz(ws2BHhm~lwsRP~KFdG7C%ey&bb7qY9rV1*7>eBw3YMoB7sSXBW zfF4nypo2=?p$(uTTwqe#2xg1Zg_R#Z4uA_8cti}3#nOAa20|!LD5dE*&OwhFgo`jo zt6M|B)QHx0(EjbI%lGxVP322TOG#-?*K%Rk)`-ZzT=Wx51uld0!^Q08UQroBW?)iY zSJGZXJ`h*195T`WQC*WN0k$v4+a3pcm1iFYB-{w}lP&!?lCqDh#%WY0xFi0Q&t?Vo zUXx9+VEw>$%UB}V<|B_u?ey|0mo88csdbhtPilGqgN|m+KlvR25OF~X^TGL`qHi!; zC`t#w?}Z?9rY->NBnki`X{8fR=`2hDIQ)yv&X}OBXf$z>r}i#}o7}#UxiL4xxl}C z{`7M2Jw3S0vHR^C5PTE%kRxh4nN2SMP;S715zy)Q3ratVPtSX}y9!2NE8wDPU^MjT z1)?F`{vlKNDHYm%g8(WxuhlcV6bba({)lyeMn4Db4^<?*~>9CXGzi~b( zVQv>uiOCpSx;}NOXfzB61?T0{&7qw9{QS8)aX^b2lvzsU@@}IhxpGLc4-9JFDMgk( z&?q%1{ytOxmu>jhuMH$XM8m8WF6UP&s(~&>k&?IY!y zT^lV|OG5*1r=Nv>N_F4{q7iSE*-euGTG4)7`vv4gB2>6s(F6hoHCwr_GqrajjZQ7F z1KfN6#gv3Jai9+Og9FivS{nh59VZmex|sn-B^Y_ z9=y9>gcaDI^MxenI-B)xYzvBZIC%f_8T?v)Ch#=G>EV2TPs0>EjUwM&D>P04VX zEdjvxNM-x@uhfSbf5CGfe08?y3-e9&g1y$B| z!LqNX_zaM;ERKhBRiE_SN}I=5vh&j1lpAe!Q5pn+I8F4dhP#^E&5*|6sQaV!4d68r zlqCsw{$<6WR23dRMuzjq{1Gv}(=RVHs!{7w-3KIOmI5yA(gB}>k!|#77d!&zFv0r67>X2F-*tgxK zxIFA@Ad>3sG>@dPi0JC(-~gJ0+R$V_=edE#&7eZDUw_D4`X)ARP*r9oHv-4K#SmRm z?IhIl{<5H}eQhq=-xzwo4^$>~ z=xw{|` zqWd490Q@@Ox(^**X4w2XZza6#mqTv41KsG41?Tj+x>jFw-WPeMRpqQZ!=r}r*%w$cVTjHsW$aenCKz%M5{LmVGz~M4n zqVM1ZfRiY|Ug(B;yct5@Yza--QZVq;roWJQ(~j0NpVXUM63+4Hpw#Np09Ni*7V4l_ z_b$KJna>+)qYm|jh}Z>8hD3pw*}qgd{i%R84!Foezozqw7WRkRTp5|(8r%~&w7_C(0=V z7)`|Z!*DRGO2s&Xp+ndnuh%C4;;(pClclMdnV{G#0H=acn8Ysu;Gm(lr@J;0!1K|X zsFght{mws}WC9(wYY~VAW%EPR|0Y=X;_+rXEe;3^2q+6c=GnNjY{hG%it%i6GqPmOuxTtY$zSOJ)NHVRG6cdbYfQFtI0a_$B&UV$xvpn_s4A7Jq2uvCB4# zRHR?-4G`{2`C0>P0x@ly5-c!AAftLJB{>gFAODw0KJ=Sb2v{&+a^lo0JJy<)USF3 z4+7K2)m#J|MtqI?HFUlq6PkiLXq4R(U#YzG+8Mm|Rsg0O0^01MlOzEi5)+p(0IP>a zFQxV8GBlQFh^T-M`Q@)eUhAnnd?++Z@39M@&QVRrtt`7I@d;+(HjSXv50m4QNtZ}K za{-5^qc^we;k#9%>?{_Jxh0FC^UN<&R2G`A|2SbP@PzBA>3Dxl81mPIg?FzzpUmCw zk^m`+d%6}(m7D#BkZ~RC@j@hngXo6X^ZRph3TkL1rji6T$#llC_q!7ALD;0@N$Nvc zU2`dpTM406rXViJqcE1E`reDI)@z_sS4zewIzfuTH&ZjpGk}H7WChx_h#^xbjRwc- z28pyM49q34vftJ;Yj#0_kGkmUaMIr^08Xy~BBH@~R0X2UQ=35dAA&Nh3yeYFkc0jY zdv6&RW!JWk-lC!iilTsoV9_PrAR-{$AT1q3_b`NrfOL0vcS#Km(#X)=FbqAwFbuIT z?kD&Af1Z2q-~O_{yq}z(3>Vk6*168}IFIAF*3x-s3ShtKR~ibS%;4j*QGEws3&2EL zjnzsckuo62aSb4kaQW(ff)9!RLZp762Vksr8$$~~)CL?2_ihR!D27@l{xNv#J&X6L z$_aq%_`DhA1y7<~B2Ezd9{Z3Rxt3aIIJd5F1AF@7Fw83&IF(e$Jb@#8`-ZTj5OnLz zuEBXA#raNbR?BDBQA;tmd?^&z51|hrTCK|oHEgk&C>{&e2e%xk(ri|liL z1-dp)`vKOTPA2PuC6a4D*o#)9s<5BNzcZdP(9;uOvp1MGdo6lhd)%0AKE7a9oYVnQ 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

YcQMA+ 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%0ADdQFhJW4rUQe3h*1lw9INALSP2W6zBo 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 literal 0 HcmV?d00001 diff --git a/samples/boot/gemfire-with-gfsh-servers/spring-session-sample-boot-gemfire-with-gfsh-servers.gradle b/samples/boot/gemfire-with-gfsh-servers/spring-session-sample-boot-gemfire-with-gfsh-servers.gradle new file mode 100644 index 0000000..771be98 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/spring-session-sample-boot-gemfire-with-gfsh-servers.gradle @@ -0,0 +1,39 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +apply plugin: 'io.spring.convention.spring-sample-boot' + +dependencies { + + compile project(':spring-session-data-geode') + + compile("org.springframework.boot:spring-boot-starter-thymeleaf") { + exclude group: "org.springframework.boot", module: "spring-boot-starter-logging" + } + + compile("org.springframework.boot:spring-boot-starter-web") { + exclude group: "org.springframework.boot", module: "spring-boot-starter-logging" + } + + compile "org.springframework.data:spring-data-geode-test" + compile "org.webjars:bootstrap" + compile "org.webjars:webjars-locator" + + runtime "org.springframework.shell:spring-shell" + + testCompile("org.springframework.boot:spring-boot-starter-test") { + exclude group: "org.springframework.boot", module: "spring-boot-starter-logging" + } +} + +bootJar { + mainClassName = 'sample.client.Application' +} + +processResources { + filter ReplaceTokens, tokens: [ + 'spring.version' : project.property("springVersion"), + 'spring-data.version' : project.property("springDataGeodeVersion"), + 'spring-session.version' : project.property("springSessionVersion"), + 'spring-session-data-geode.version' : project.property("version") + ] +} diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/java/sample/client/Application.java b/samples/boot/gemfire-with-gfsh-servers/src/main/java/sample/client/Application.java new file mode 100644 index 0000000..7894bc4 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/java/sample/client/Application.java @@ -0,0 +1,160 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed 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 sample.client; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.stream.StreamSupport; + +import javax.servlet.http.HttpSession; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.gemfire.config.annotation.ClientCacheApplication; +import org.springframework.data.gemfire.util.CollectionUtils; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@SuppressWarnings("unused") +// tag::class[] +@SpringBootApplication // <1> +@ClientCacheApplication(subscriptionEnabled = true) // <2> +@EnableGemFireHttpSession(regionName = "Sessions", poolName = "DEFAULT") // <3> +@Controller // <4> +public class Application { + + private static final String INDEX_TEMPLATE_VIEW_NAME = "index"; + private static final String PING_RESPONSE = "PONG"; + private static final String REQUEST_COUNT_ATTRIBUTE_NAME = "requestCount"; + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Configuration + static class SpringWebMvcConfiguration { // <5> + + @Bean + public WebMvcConfigurer webMvcConfig() { + + return new WebMvcConfigurer() { + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName(INDEX_TEMPLATE_VIEW_NAME); + } + }; + } + } + + @ExceptionHandler // <6> + public String errorHandler(Throwable error) { + StringWriter writer = new StringWriter(); + error.printStackTrace(new PrintWriter(writer)); + return writer.toString(); + } + + @GetMapping("/ping") + @ResponseBody + public String ping() { + return PING_RESPONSE; + } + + @PostMapping("/session") + public String session(HttpSession session, ModelMap modelMap, + @RequestParam(name = "attributeName", required = false) String name, + @RequestParam(name = "attributeValue", required = false) String value) { // <7> + + modelMap.addAttribute("sessionAttributes", + attributes(setAttribute(updateRequestCount(session), name, value))); + + return INDEX_TEMPLATE_VIEW_NAME; + } + +// end::class[] + + HttpSession updateRequestCount(HttpSession session) { + + synchronized (session) { + Integer currentRequestCount = (Integer) session.getAttribute(REQUEST_COUNT_ATTRIBUTE_NAME); + session.setAttribute(REQUEST_COUNT_ATTRIBUTE_NAME, nullSafeIncrement(currentRequestCount)); + return session; + } + } + + Integer nullSafeIncrement(Integer value) { + return nullSafeIntValue(value) + 1; + } + + int nullSafeIntValue(Number value) { + return Optional.ofNullable(value).map(Number::intValue).orElse(0); + } + + HttpSession setAttribute(HttpSession session, String attributeName, String attributeValue) { + + if (isSet(attributeName, attributeValue)) { + session.setAttribute(attributeName, attributeValue); + } + + return session; + } + + boolean isSet(String... values) { + + boolean set = true; + + for (String value : values) { + set &= StringUtils.hasText(value); + } + + return set; + } + + Map attributes(HttpSession session) { + + Map sessionAttributes = new HashMap<>(); + + StreamSupport.stream(toIterable(session.getAttributeNames()).spliterator(), false) + .forEach(attributeName -> sessionAttributes.put(attributeName, + String.valueOf(session.getAttribute(attributeName)))); + + return sessionAttributes; + } + + Iterable toIterable(Enumeration enumeration) { + + return () -> Optional.ofNullable(enumeration) + .map(CollectionUtils::toIterator) + .orElseGet(Collections::emptyIterator); + } +} diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.gfsh b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.gfsh new file mode 100644 index 0000000..86abe78 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.gfsh @@ -0,0 +1,40 @@ +#tag::shell-script[] +#!$GEODE_HOME/bin/gfsh + +set variable --name=USER_HOME --value=${SYS_USER_HOME} +set variable --name=REPO_HOME --value=${USER_HOME}/.m2/repository +set variable --name=SPRING_VERSION --value=@spring.version@ +set variable --name=SPRING_DATA_VERSION --value=@spring-data.version@ +set variable --name=SPRING_SESSION_VERSION --value=@spring-session.version@ +set variable --name=SPRING_SESSION_DATA_GEODE_VERSION --value=@spring-session-data-geode.version@ +set variable --name=MEMBER_TIMEOUT --value=5000 +set variable --name=CACHE_XML_FILE --value=${USER_HOME}/spring-session-data-geode/samples/boot/gemfire-with-gfsh-servers/src/main/resources/initializer-cache.xml + +#set variable --name=SERVER_CLASSPATH --value=${REPO_HOME}/org/springframework/spring-core/${SPRING_VERSION}/spring-core-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/spring-aop/${SPRING_VERSION}/spring-aop-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/spring-beans/${SPRING_VERSION}/spring-beans-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/spring-context/${SPRING_VERSION}/spring-context-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/spring-context-support/${SPRING_VERSION}/spring-context-support-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/spring-expression/${SPRING_VERSION}/spring-expression-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/spring-jcl/${SPRING_VERSION}/spring-jcl-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/spring-tx/${SPRING_VERSION}/spring-tx-${SPRING_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/data/spring-data-commons/${SPRING_DATA_VERSION}/spring-data-commons-${SPRING_DATA_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/data/spring-data-geode/${SPRING_DATA_VERSION}/spring-data-geode-${SPRING_DATA_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/session/spring-session-core/${SPRING_SESSION_VERSION}/spring-session-core-${SPRING_SESSION_VERSION}.jar\ +#:${REPO_HOME}/org/springframework/session/spring-session-data-geode/${SPRING_SESSION_DATA_GEODE_VERSION}/spring-session-data-geode-${SPRING_SESSION_DATA_GEODE_VERSION}.jar\ +#:${REPO_HOME}/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar + +set variable --name=SERVER_CLASSPATH --value=${REPO_HOME}/org/springframework/spring-core/${SPRING_VERSION}/spring-core-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/spring-aop/${SPRING_VERSION}/spring-aop-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/spring-beans/${SPRING_VERSION}/spring-beans-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/spring-context/${SPRING_VERSION}/spring-context-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/spring-context-support/${SPRING_VERSION}/spring-context-support-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/spring-expression/${SPRING_VERSION}/spring-expression-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/spring-jcl/${SPRING_VERSION}/spring-jcl-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/spring-tx/${SPRING_VERSION}/spring-tx-${SPRING_VERSION}.jar:${REPO_HOME}/org/springframework/data/spring-data-commons/${SPRING_DATA_VERSION}/spring-data-commons-${SPRING_DATA_VERSION}.jar:${REPO_HOME}/org/springframework/data/spring-data-geode/${SPRING_DATA_VERSION}/spring-data-geode-${SPRING_DATA_VERSION}.jar:${REPO_HOME}/org/springframework/session/spring-session-core/${SPRING_SESSION_VERSION}/spring-session-core-${SPRING_SESSION_VERSION}.jar:${REPO_HOME}/org/springframework/session/spring-session-data-geode/${SPRING_SESSION_DATA_GEODE_VERSION}/spring-session-data-geode-${SPRING_SESSION_DATA_GEODE_VERSION}.jar:${REPO_HOME}/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar + +start locator --name=Locator1 --log-level=config +#start locator --name=Locator1 --log-level=config --J=-Dgemfire.member-timeout=${MEMBER_TIMEOUT} + +start server --name=Server1 --log-level=config --cache-xml-file=${CACHE_XML_FILE} --classpath=${SERVER_CLASSPATH} +#start server --name=Server1 --log-level=config --cache-xml-file=${CACHE_XML_FILE} --classpath=${SERVER_CLASSPATH} --J=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 --J=-Dgemfire.member-timeout=${MEMBER_TIMEOUT} + +start server --name=Server2 --server-port=0 --log-level=config --cache-xml-file=${CACHE_XML_FILE} --classpath=${SERVER_CLASSPATH} +#start server --name=Server2 --server-port=0 --log-level=config --cache-xml-file=${CACHE_XML_FILE} --classpath=${SERVER_CLASSPATH} --J=-Dgemfire.member-timeout=${MEMBER_TIMEOUT} + +create region --name=Sessions --type=PARTITION --skip-if-exists --enable-statistics=true --entry-idle-time-expiration=15 --entry-idle-time-expiration-action=INVALIDATE + +#end::shell-script[] diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.sh b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.sh new file mode 100644 index 0000000..ba4df80 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gfsh -e "run --file=${SYS_USER_HOME}/spring-session-data-geode/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/start-cluster.gfsh" diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.gfsh b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.gfsh new file mode 100644 index 0000000..00fb8d4 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.gfsh @@ -0,0 +1,5 @@ +#!$GEODE_HOME/bin/gfsh + +stop server --name=Server2 +stop server --name=Server1 +stop locator --name=Locator1 diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.sh b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.sh new file mode 100644 index 0000000..5722283 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gfsh -e "run --file=${SYS_USER_HOME}/spring-session-data-geode/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/bin/stop-cluster.gfsh" diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/oql/queries.txt b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/oql/queries.txt new file mode 100644 index 0000000..bf5147f --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/geode/oql/queries.txt @@ -0,0 +1,5 @@ +# tag::queries[] +SELECT session.id FROM /Sessions session +SELECT session.getClass().getName() FROM /Sessions session +SELECT attributes.key, attributes.value FROM /Sessions session, session.attributes attributes +# end::queries[] diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/resources/initializer-cache.xml b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/initializer-cache.xml new file mode 100644 index 0000000..6025cc2 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/initializer-cache.xml @@ -0,0 +1,15 @@ + + + + + + + org.springframework.session.data.gemfire.serialization.data.support.DataSerializableSessionSerializerInitializer + + + + + diff --git a/samples/boot/gemfire-with-gfsh-servers/src/main/resources/templates/index.html b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/templates/index.html new file mode 100644 index 0000000..e84fe93 --- /dev/null +++ b/samples/boot/gemfire-with-gfsh-servers/src/main/resources/templates/index.html @@ -0,0 +1,49 @@ + + + + Session Attributes + + + + +

+

Description

+

+ This application demonstrates how to use a GemFire instance to back your session. Notice that there + is no JSESSIONID cookie. We are also able to customize the way of identifying what the requested + session id is. +

+ +

Try it

+ +
+ + + + + +
+ +
+ + + + + + + + + + + + + + +
Attribute NameAttribute Value
namevalue
+
+ +