diff --git a/buildSrc/.gradle/3.5/file-changes/last-build.bin b/buildSrc/.gradle/3.5/file-changes/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/buildSrc/.gradle/3.5/file-changes/last-build.bin differ diff --git a/buildSrc/.gradle/3.5/fileContent/annotation-processors.bin b/buildSrc/.gradle/3.5/fileContent/annotation-processors.bin new file mode 100644 index 0000000..4aed191 Binary files /dev/null and b/buildSrc/.gradle/3.5/fileContent/annotation-processors.bin differ diff --git a/buildSrc/.gradle/3.5/fileContent/fileContent.lock b/buildSrc/.gradle/3.5/fileContent/fileContent.lock new file mode 100644 index 0000000..e239628 Binary files /dev/null and b/buildSrc/.gradle/3.5/fileContent/fileContent.lock differ diff --git a/buildSrc/.gradle/3.5/taskHistory/fileHashes.bin b/buildSrc/.gradle/3.5/taskHistory/fileHashes.bin new file mode 100644 index 0000000..db470b5 Binary files /dev/null and b/buildSrc/.gradle/3.5/taskHistory/fileHashes.bin differ diff --git a/buildSrc/.gradle/3.5/taskHistory/fileSnapshots.bin b/buildSrc/.gradle/3.5/taskHistory/fileSnapshots.bin new file mode 100644 index 0000000..59a5d7a Binary files /dev/null and b/buildSrc/.gradle/3.5/taskHistory/fileSnapshots.bin differ diff --git a/buildSrc/.gradle/3.5/taskHistory/taskHistory.bin b/buildSrc/.gradle/3.5/taskHistory/taskHistory.bin new file mode 100644 index 0000000..1633b85 Binary files /dev/null and b/buildSrc/.gradle/3.5/taskHistory/taskHistory.bin differ diff --git a/buildSrc/.gradle/3.5/taskHistory/taskHistory.lock b/buildSrc/.gradle/3.5/taskHistory/taskHistory.lock new file mode 100644 index 0000000..08804b4 Binary files /dev/null and b/buildSrc/.gradle/3.5/taskHistory/taskHistory.lock differ diff --git a/buildSrc/.gradle/buildOutputCleanup/built.bin b/buildSrc/.gradle/buildOutputCleanup/built.bin new file mode 100644 index 0000000..e69de29 diff --git a/buildSrc/.gradle/buildOutputCleanup/cache.properties b/buildSrc/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..1293505 --- /dev/null +++ b/buildSrc/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Fri May 12 01:06:01 PDT 2017 +gradle.version=3.5 diff --git a/buildSrc/.gradle/buildOutputCleanup/cache.properties.lock b/buildSrc/.gradle/buildOutputCleanup/cache.properties.lock new file mode 100644 index 0000000..40fdece --- /dev/null +++ b/buildSrc/.gradle/buildOutputCleanup/cache.properties.lock @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/buildSrc/.gradle/noVersion/buildSrc/built.bin b/buildSrc/.gradle/noVersion/buildSrc/built.bin new file mode 100644 index 0000000..e69de29 diff --git a/buildSrc/.gradle/noVersion/buildSrc/cache.properties b/buildSrc/.gradle/noVersion/buildSrc/cache.properties new file mode 100644 index 0000000..3620092 --- /dev/null +++ b/buildSrc/.gradle/noVersion/buildSrc/cache.properties @@ -0,0 +1,2 @@ +#Fri May 12 01:05:52 PDT 2017 +gradle.version=3.5 diff --git a/buildSrc/.gradle/noVersion/buildSrc/cache.properties.lock b/buildSrc/.gradle/noVersion/buildSrc/cache.properties.lock new file mode 100644 index 0000000..40fdece --- /dev/null +++ b/buildSrc/.gradle/noVersion/buildSrc/cache.properties.lock @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask$_greet_closure1.class b/buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask$_greet_closure1.class new file mode 100644 index 0000000..0eba0b0 Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask$_greet_closure1.class differ diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask.class b/buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask.class new file mode 100644 index 0000000..c5aadff Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask.class differ diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure1.class b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure1.class new file mode 100644 index 0000000..78db4c5 Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure1.class differ diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4$_closure5.class b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4$_closure5.class new file mode 100644 index 0000000..2b04e8e Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4$_closure5.class differ diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4.class b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4.class new file mode 100644 index 0000000..f4932b9 Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4.class differ diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2.class b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2.class new file mode 100644 index 0000000..d403928 Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2.class differ diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin$_availablePort_closure3.class b/buildSrc/build/classes/main/build/GemFireServerPlugin$_availablePort_closure3.class new file mode 100644 index 0000000..f40c929 Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin$_availablePort_closure3.class differ diff --git a/buildSrc/build/classes/main/build/GemFireServerPlugin.class b/buildSrc/build/classes/main/build/GemFireServerPlugin.class new file mode 100644 index 0000000..ab62f2f Binary files /dev/null and b/buildSrc/build/classes/main/build/GemFireServerPlugin.class differ diff --git a/buildSrc/build/libs/buildSrc.jar b/buildSrc/build/libs/buildSrc.jar new file mode 100644 index 0000000..db6e25e Binary files /dev/null and b/buildSrc/build/libs/buildSrc.jar differ diff --git a/buildSrc/build/resources/main/META-INF/gradle-plugins/gemfire-server.properties b/buildSrc/build/resources/main/META-INF/gradle-plugins/gemfire-server.properties new file mode 100644 index 0000000..bb6a305 --- /dev/null +++ b/buildSrc/build/resources/main/META-INF/gradle-plugins/gemfire-server.properties @@ -0,0 +1 @@ +implementation-class=build.GemFireServerPlugin \ No newline at end of file diff --git a/buildSrc/build/tmp/jar/MANIFEST.MF b/buildSrc/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/buildSrc/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/buildSrc/src/main/groovy/build/GemFireServerPlugin.groovy b/buildSrc/src/main/groovy/build/GemFireServerPlugin.groovy new file mode 100644 index 0000000..a056f37 --- /dev/null +++ b/buildSrc/src/main/groovy/build/GemFireServerPlugin.groovy @@ -0,0 +1,70 @@ +package build; + +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.tasks.bundling.Zip +import org.gradle.api.DefaultTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.tasks.TaskAction + +public class GemFireServerPlugin implements Plugin { + + @Override + public void apply(Project project) { + project.tasks.create('gemFireServer', GemFireServerTask) + + project.tasks.integrationTest.doLast { + println 'Stopping GemFire Server...' + project.tasks.gemFireServer.process?.destroyForcibly() + } + + project.tasks.prepareAppServerForIntegrationTests { + dependsOn project.tasks.gemFireServer + doFirst { + project.gretty { + jvmArgs = ["-Dspring.session.data.gemfire.port=${project.tasks.gemFireServer.port}"] + } + } + } + } + + static int availablePort() { + new ServerSocket(0).withCloseable { socket -> + socket.localPort + } + } + + static class GemFireServerTask extends DefaultTask { + def mainClassName = "sample.ServerConfig" + def process + def port + boolean debug + + @TaskAction + def greet() { + port = availablePort() + println "Starting GemFire Server on port [$port]..." + + def out = debug ? System.out : new StringBuilder() + def err = debug ? System.out : new StringBuilder() + + String classpath = project.sourceSets.main.runtimeClasspath.collect { it }.join(File.pathSeparator) + String gemfireLogLevel = System.getProperty('spring.session.data.gemfire.log-level', 'warning') + + String[] commandLine = [ + 'java', '-server', '-ea', '-classpath', classpath, + //"-Dgemfire.log-file=gemfire-server.log", + //"-Dgemfire.log-level=config", + "-Dspring.session.data.gemfire.log-level=" + gemfireLogLevel, + "-Dspring.session.data.gemfire.port=${port}", + 'sample.ServerConfig' + ] + + //println commandLine + + project.tasks.appRun.ext.process = process = commandLine.execute() + + process.consumeProcessOutput(out, err) + } + } +} diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/gemfire-server.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/gemfire-server.properties new file mode 100644 index 0000000..bb6a305 --- /dev/null +++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/gemfire-server.properties @@ -0,0 +1 @@ +implementation-class=build.GemFireServerPlugin \ No newline at end of file diff --git a/docs/spring-session-docs.gradle b/docs/spring-session-docs.gradle new file mode 100644 index 0000000..7c1a53f --- /dev/null +++ b/docs/spring-session-docs.gradle @@ -0,0 +1,36 @@ +apply plugin: 'io.spring.convention.docs' +apply plugin: 'io.spring.convention.spring-test' + +dependencies { + testCompile project(':spring-session-data-geode') + testCompile "junit:junit" + testCompile "org.mockito:mockito-core" + testCompile "org.springframework:spring-test" + testCompile "org.assertj:assertj-core" + testCompile "org.springframework.security:spring-security-test" + testCompile "org.springframework.security:spring-security-web" + testCompile "javax.servlet:javax.servlet-api" + testCompile slf4jDependencies +} + +def versions = dependencyManagement.managedVersions + +asciidoctor { + def ghTag = snapshotBuild ? 'master' : project.version + def ghUrl = "https://github.com/spring-projects/spring-session/tree/$ghTag" + attributes 'version-snapshot': snapshotBuild, + 'version-milestone': milestoneBuild, + 'version-release': releaseBuild, + 'gh-url': ghUrl, + 'gh-samples-url': "$ghUrl/samples/", + 'download-url' : "https://github.com/spring-projects/spring-session/archive/${ghTag}.zip", + 'spring-session-version' : version, + 'spring-version' : versions['org.springframework:spring-core'], + 'lettuce-version' : versions['io.lettuce:lettuce-core'], + 'hazelcast-version' : versions['com.hazelcast:hazelcast'], + 'docs-itest-dir' : rootProject.projectDir.path + '/docs/src/integration-test/java/', + 'docs-test-dir' : rootProject.projectDir.path + '/docs/src/test/java/', + 'docs-test-resources-dir' : rootProject.projectDir.path + '/docs/src/test/resources/', + 'samples-dir' : rootProject.projectDir.path + '/samples/', + 'session-main-resources-dir' : rootProject.projectDir.path + '/spring-session/src/main/resources/' +} diff --git a/docs/src/docs/asciidoc/guides/boot-gemfire.adoc b/docs/src/docs/asciidoc/guides/boot-gemfire.adoc new file mode 100644 index 0000000..06829fc --- /dev/null +++ b/docs/src/docs/asciidoc/guides/boot-gemfire.adoc @@ -0,0 +1,270 @@ += Spring Session - HttpSession with GemFire Client/Server using Spring Boot +John Blum +:toc: + +This guide describes how to build a _Spring Boot_ application configured with _Spring Session_ to transparently leverage +Pivotal GemFire to back a web application's `HttpSession`. + +In this sample, GemFire's client/server topology is employed using a pair of _Spring Boot_ applications, one to +configure and run a GemFire Server and another to configure and run the client, Spring MVC-based web application +making use of the `HttpSession`. + +NOTE: The completed guide can be found in the <>. + +== 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-gemfire + {spring-session-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-java-configuration]] +== Spring Boot Configuration + +After adding the required dependencies and repository declarations, we can create our Spring configuration +for both the GemFire client and server using _Spring Boot_. The Spring configuration is responsible for +creating a Servlet Filter that replaces the `HttpSession` with an implementation backed by _Spring Session_ +and GemFire. + +=== Spring Boot-based GemFire Server + +We start with the _Spring Boot_ application for configuring and bootstrapping a GemFire Server process... + +[source,java] +---- +include::{samples-dir}boot/gemfire/src/main/java/sample/server/GemFireServer.java[tags=class] +---- + +<1> The `@EnableGemFireHttpSession` annotation is used on the GemFire Server to mainly define the corresponding +Region (e.g. `ClusteredSpringSessions`, the default) in which Session state information will be stored +and managed by GemFire. As well, we have specified an arbitrary expiration attribute (i.e. `maxInactiveIntervalInSeconds`) +for when the Session will timeout, which is triggered by a GemFire Region entry expiration event that also invalidates +the Session object in the Region. +<2> Next, we define a few `Properties` that allow us to configure certain aspects of the GemFire Server using +http://gemfire.docs.pivotal.io/docs-gemfire/reference/topics/gemfire_properties.html[GemFire's System properties]. +<3> Then, we create an instance of the GemFire `Cache` using our defined `Properties`. +<4> Finally, we configure and start a `CacheServer` running in the GemFire Server to listen for connections +from cache clients. The `CacheServer's` `Socket` will be used to connect our GemFire cache client, +_Spring Boot_ web application to the server. + +The sample also makes use of a `PropertySourcesPlaceholderConfigurer` bean in order to externalize the sample application +configuration to affect GemFire and application configuration/behavior from the command-line (e.g. such as GemFire's +`log-level` using the `gemfire.log.level` System property; more details below). + +=== Spring Boot-based GemFire cache client Web application + +Now, we create our _Spring Boot_ Web application exposing our Web service with Spring MVC, running as a +GemFire cache client connected to our _Spring Boot_-based GemFire Server, using Spring Session backed by GemFire +to manage Session state in a clustered, replicated fashion. + +[source,java] +---- +include::{samples-dir}boot/gemfire/src/main/java/sample/client/Application.java[tags=class] +---- + +<1> Here, again, we use the `@EnableGemFireHttpSession` annotation to not only configure the GemFire cache client, +but to also override the (HTTP) Web application container's `HttpSession` and replace it with a Session implementation +backed by _Spring Session_ and GemFire. Also notice, we did not define any Session expiration timeout with the +`maxInactiveIntervalInSeconds` attribute this time. That is because the Session expiration is managed by GemFire, +on the server, which will appropriately notify the cache client when the Session times out. Again, we have just +resorted to using the default named Region, `ClusteredSpringSessions`. Of course, we can change the Region name, +but we must do so on both the client and the server. That is a GemFire requirement, not a +_Spring Session Data GemFire_ requirement. +<2> Similarly to the server configuration, we set a few basic GemFire System `Properties` on the client. +<3> Although, this time, an instance of `ClientCache` is created with the `ClientCacheFactoryBean` +from _Spring Data GemFire_. +<4> However, in order to connect to the GemFire Server we must define a GemFire `Pool` bean containing a +pool of connections to the server. Whenever a client Region entry operation corresponding to a Session update occurs, +the client-side Region will use an existing, pooled connection to route the operation to the server. +<5> The following _Spring_ `BeanPostProcessor` (along with some utility methods) are only needed for testing purposes +and are not required by any production code. Specifically, the `BeanPostProcessor` along with the code referenced in *6* +is useful in integration test cases where the client and server processes are forked by the test framework. It is pretty +easy to figure out that a race condition is imminent without proper coordination between the client and the server, +therefore, the BPP and `ClientMembershipListener` help sync the interaction between the client and the server +on startup during automated testing. +<6> Navigates the Web application to the home page (`index.html`), which uses **Thymeleaf** templates for server-side +pages. +<7> Heartbeat Web service endpoint (useful for manual testing purposes). +<8> Web service endpoint allowing the user to add a Session attribute using the Web application UI. In addition, +the webapp stores an additional Session attribute (`requestCount`) to keep track of how many HTTP requests the user +has sent during the current "session". + +There are many other utility methods, so please refer to the actual source code for full details. + +TIP: In typical GemFire deployments, where the cluster includes potentially hundreds or thousands of GemFire data nodes +(servers), it is more common for clients to connect to one or more GemFire Locators running in the cluster. A Locator +passes meta-data to clients about the servers available, their load and which servers have the client's data of interest, +which is particularly important in direct, single-hop data access and latency-sensitive operations. See more details +about the http://gemfire.docs.pivotal.io/docs-gemfire/latest/topologies_and_comm/cs_configuration/chapter_overview.html[Client/Server Topology in GemFire's User Guide]. + +NOTE: For more information on configuring _Spring Data GemFire_, refer to the http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/[reference guide]. + +The `@EnableGemFireHttpSession` annotation enables a developer to configure certain aspects of both _Spring Session_ +and GemFire out-of-the-box using the following attributes: + +* `maxInactiveIntervalInSeconds` - controls _HttpSession_ idle-timeout expiration (defaults to **30 minutes**). +* `regionName` - specifies the name of the GemFire Region used to store `HttpSession` state (defaults is "*ClusteredSpringSessions*"). +* `clientRegionShort` - specifies GemFire's http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/management_all_region_types/chapter_overview.html[data management policy] +with a GemFire http://gemfire.docs.pivotal.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/cache/client/ClientRegionShortcut.html[ClientRegionShortcut] +(default is `PROXY`). This attribute is only used when configuring client Region. +* `poolName` - name of the dedicated GemFire Pool used to connect a client to the cluster of servers. The attribute +is only used when the application is a GemFire cache client. Defaults to `gemfirePool`. +* `serverRegionShort` - specifies GemFire's http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/management_all_region_types/chapter_overview.html[data management policy] +using a GemFire http://data-docs-samples.cfapps.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/cache/RegionShortcut.html[RegionShortcut] +(default is `PARTITION`). This attribute is only used when configuring server Regions, or when a p2p topology is employed. + +NOTE: It is important to remember that the GemFire 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 used to store Spring Sessions is `LOCAL`. However, keep in mind that your session state will not +be propagated to the server and you lose all the benefits of using GemFire to store and manage distributed, replicated +session state information in a cluster. + +[[httpsession-gemfire-boot-sample]] +== HttpSession with GemFire using Spring Boot Sample Application + +=== Running the httpsession-gemfire-boot Sample Application + +You can run the sample by obtaining the {download-url}[source code] and invoking the following commands. + +First, you must run the server: + +---- +$ ./gradlew :samples:httpsession-gemfire-boot:run [-Dgemfire.log-level=config] +---- + +Then, in a separate terminal, run the client: + +---- +$ ./gradlew :samples:httpsession-gemfire-boot:bootRun [-Dgemfire.log-level=config] +---- + +You should now be able to access the application at http://localhost:8080/. In this sample, the web application +is the client cache and the server is standalone. + +=== Exploring the httpsession-gemfire-boot Sample Application + +Try using the application. Fill out the form with the following information: + +* **Attribute Name:** _username_ +* **Attribute Value:** _test_ + +Now click the **Set Attribute** button. You should now see the attribute name and value displayed in the table +along with an additional attribute (`requestCount`) indicating the number of Session interactions (via HTTP requests). + +=== How does it work? + +We interact with the standard `HttpSession` in the the Spring MVC web service endpoint, shown here for convenience: + +.src/main/java/sample/SessionServlet.java +[source,java] +---- +@RequestMapping(method = RequestMethod.POST, path = "/session") +public String session(HttpSession session, ModelMap modelMap, + @RequestParam(name = "attributeName", required = false) String name, + @RequestParam(name = "attributeValue", required = false) String value) { + + modelMap.addAttribute("sessionAttributes", + attributes(setAttribute(updateRequestCount(session), name, value))); + + return INDEX_TEMPLATE_VIEW_NAME; +} +---- + +Instead of using the embedded HTTP server's `HttpSession`, we are actually persisting the Session state in GemFire. +_Spring Session_ creates a cookie named SESSION in your browser that contains the id of your session. +Go ahead and view the cookies (click for help with https://developer.chrome.com/devtools/docs/resources#cookies[Chrome] +or https://getfirebug.com/wiki/index.php/Cookies_Panel#Cookies_List[Firefox]). + +NOTE: The following instructions assume you have a local GemFire installation. For more information on installation, +see http://gemfire.docs.pivotal.io/docs-gemfire/latest/getting_started/installation/install_intro.html[Installing Pivotal GemFire]. + +NOTE: In order to run the following, you must uncomment the lines in the `GemFireServer` class, `gemfireProperties` bean +for the following GemFire System properties: `jmx-manager` and `jmx-manager-start`. + +If you like, you can easily remove the session using `gfsh`. For example, on a Linux-based system type the following +at the command-line: + + $ gfsh + +Then, enter the following commands in _Gfsh_ ensuring to replace `70002719-3c54-4c20-82c3-e7faa6b718f3` with the value +of your SESSION cookie, or the session ID returned by the GemFire OQL query (which should match): + +.... +gfsh>connect --jmx-manager=localhost[1099] + +gfsh>query --query='SELECT * FROM /ClusteredSpringSessions.keySet' + +Result : true +startCount : 0 +endCount : 20 +Rows : 1 + +Result +------------------------------------ +70002719-3c54-4c20-82c3-e7faa6b718f3 + +NEXT_STEP_NAME : END + +gfsh>remove --region=/ClusteredSpringSessions --key="70002719-3c54-4c20-82c3-e7faa6b718f3" +.... + +NOTE: The _GemFire User Guide_ has more detailed instructions on using http://gemfire.docs.pivotal.io/docs-gemfire/latest/tools_modules/gfsh/chapter_overview.html[gfsh]. + +Now visit the application at http://localhost:8080/ again and observe that the attribute we added is no longer displayed. + +Alternatively, you can wait **20 seconds** for the session to expire and timeout, and then refresh the page. The attribute +we added should no longer be displayed in the table. diff --git a/docs/src/docs/asciidoc/guides/java-gemfire-clientserver.adoc b/docs/src/docs/asciidoc/guides/java-gemfire-clientserver.adoc new file mode 100644 index 0000000..5625fa1 --- /dev/null +++ b/docs/src/docs/asciidoc/guides/java-gemfire-clientserver.adoc @@ -0,0 +1,272 @@ += Spring Session - HttpSession with GemFire Client/Server (Quick Start) +John Blum +:toc: + +This guide describes how to configure Spring Session to transparently leverage Pivotal GemFire to back a web application's +`HttpSession` using Java Configuration. + +NOTE: The completed guide can be found in the <>. + +== 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-gemfire + {spring-session-version} + pom + + + org.springframework + spring-web + {spring-version} + + +---- + +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-java-configuration]] +== Spring Java Configuration + +After adding the required dependencies and repository declarations, we can create our Spring configuration. +The Spring configuration is responsible for creating a Servlet Filter that replaces the `HttpSession` +with an implementation backed by Spring Session and GemFire. + +Add the following Spring Configuration: + +[source,java] +---- +include::{samples-dir}javaconfig/gemfire-clientserver/src/main/java/sample/ClientConfig.java[tags=class] +---- + +<1> The `@EnableGemFireHttpSession` annotation creates a Spring bean named `springSessionRepositoryFilter` that +implements `Filter`. The filter is what replaces the `HttpSession` with an implementation backed by Spring Session +and GemFire. +<2> Next, we register a `Properties` bean that allows us to configure certain aspects of the GemFire client cache +using http://gemfire.docs.pivotal.io/docs-gemfire/reference/topics/gemfire_properties.html[GemFire's System properties]. +<3> We use the `Properties` to configure an instance of a GemFire `ClientCache`. +<4> Then, we configure a `Pool` of client connections to talk to the GemFire Server in our Client/Server topology. In our +configuration, we have used sensible settings for timeouts, number of connections and so on. Also, the `Pool` has been +configured to connect directly to a server. Learn more about various `Pool` configuration settings from the +http://gemfire.docs.pivotal.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/cache/client/PoolFactory.html[PoolFactory API]. +<5> Finally, we include a Spring `BeanPostProcessor` to block the client until our GemFire Server is up and running, +listening for and accepting client connections. + +The `gemfireCacheServerReadyBeanPostProcessor` is necessary in order to coordinate the client and server in +an automated fashion during testing, but unnecessary in situations where the GemFire cluster is already presently +running, such as in production. + +The `BeanPostProcessor` uses a GemFire http://gemfire.docs.pivotal.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/management/membership/ClientMembershipListener.html[ClientMembershipListener] +that will be notified when the client has successfully connected to the server. Once a connection has been established, +the listener releases the latch that the `BeanPostProcessor` will wait on (up to the specified timeout) in the +`postProcessAfterInitialization` callback to block the client. + +TIP: In typical GemFire deployments, where the cluster includes potentially hundreds of GemFire data nodes (servers), +it is more common for clients to connect to one or more GemFire Locators running in the cluster. A Locator passes meta-data +to clients about the servers available, load and which servers have the client's data of interest, which is particularly +important for single-hop, direct data access. See more details about the http://gemfire.docs.pivotal.io/docs-gemfire/latest/topologies_and_comm/cs_configuration/chapter_overview.html[Client/Server Topology in GemFire's User Guide]. + +NOTE: For more information on configuring _Spring Data GemFire_, refer to the http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/[reference guide]. + +The `@EnableGemFireHttpSession` annotation enables a developer to configure certain aspects of both Spring Session +and GemFire out-of-the-box using the following attributes: + +* `maxInactiveIntervalInSeconds` - controls _HttpSession_ idle-timeout expiration (defaults to **30 minutes**). +* `regionName` - specifies the name of the GemFire Region used to store `HttpSession` state (defaults is "*ClusteredSpringSessions*"). +* `clientRegionShort` - specifies GemFire's http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/management_all_region_types/chapter_overview.html[data management policy] +with a GemFire http://gemfire.docs.pivotal.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/cache/client/ClientRegionShortcut.html[ClientRegionShortcut] +(default is `PROXY`). This attribute is only used when configuring client Region. +* `poolName` - name of the dedicated GemFire Pool used to connect a client to the cluster of servers. The attribute +is only used when the application is a GemFire cache client. Defaults to `gemfirePool`. +* `serverRegionShort` - specifies GemFire's http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/management_all_region_types/chapter_overview.html[data management policy] +using a GemFire http://data-docs-samples.cfapps.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/cache/RegionShortcut.html[RegionShortcut] +(default is `PARTITION`). This attribute is only used when configuring server Regions, or when a p2p topology is employed. + +NOTE: It is important to note that the GemFire client Region name must match a server Region by the same name if +the client Region is a `PROXY` or `CACHING_PROXY`. Names are not required to match if the client Region used to +store Spring Sessions is `LOCAL`, however, keep in mind that your session state will not be propagated to the server +and you lose all benefits of using GemFire to store and manage distributed, replicated session state information +in a cluster. + +NOTE: `serverRegionShort` is ignored in a client/server cache configuration and only applies when +a peer-to-peer (P2P) topology, and more specifically, a GemFire peer cache is used. + +=== Server Configuration + +We have only covered one side of the equation. We also need a GemFire Server for our client to talk to and send +session state to the server to manage. + +In this sample, we will use the following GemFire Server Java Configuration: + +[source,java] +---- +include::{samples-dir}javaconfig/gemfire-clientserver/src/main/java/sample/ServerConfig.java[tags=class] +---- + +<1> On the server, we also configure Spring Session using the `@EnableGemFireHttpSession` annotation. This ensures +the Region names on both the client and server match (in this sample, we use the default "_ClusteredSpringSessions_"). +We have also set the session timeout to **30 seconds**. Later, we will see how this timeout is used. +<2> Next, we configure the GemFire Server using GemFire System Properties very much like our P2P samples. +With the `mcast-port` set to 0 and no `locators` property specified, our server will be standalone. We also allow a +JMX client (e.g. _Gfsh_) to connect to our server with the use of the GemFire-specific JMX System properties. +<3> Then, we create an instance of a GemFire peer `Cache` initialized with our GemFire System Properties. +<4> We also setup a GemFire `CacheServer` instance running on **localhost**, listening to port **12480**, +ready to accept our client connection. +<5> Finally, we declare a `main` method as an entry point for launching and running our GemFire Server +from the command-line. + +== Java Servlet Container Initialization + +Our <> created a Spring bean named `springSessionRepositoryFilter` +that implements `Filter`. The `springSessionRepositoryFilter` bean is responsible for replacing the `HttpSession` +with a custom implementation backed by Spring Session and GemFire. + +In order for our `Filter` to do its magic, Spring needs to load our `ClientConfig` class. We also need to ensure our +Servlet Container (i.e. Tomcat) uses our `springSessionRepositoryFilter` for every request. Fortunately, Spring Session +provides a utility class named `AbstractHttpSessionApplicationInitializer` to make both of these steps extremely easy. + +You can find an example below: + +.src/main/java/sample/Initializer.java +[source,java] +---- +include::{samples-dir}javaconfig/gemfire-clientserver/src/main/java/sample/Initializer.java[tags=class] +---- + +NOTE: The name of our class (`Initializer`) does not matter. What is important is that we extend `AbstractHttpSessionApplicationInitializer`. + +<1> The first step is to extend `AbstractHttpSessionApplicationInitializer`. +This ensures that a Spring bean named `springSessionRepositoryFilter` is registered with our Servlet Container +and used for every request. +<2> `AbstractHttpSessionApplicationInitializer` also provides a mechanism to easily allow Spring to load our `ClientConfig`. +// end::config[] + +[[httpsession-gemfire-clientserver-java-sample-app]] +== HttpSession with GemFire (Client/Server) Sample Application + + +=== Running the httpsession-gemfire-clientserver Sample Application + +You can run the sample by obtaining the {download-url}[source code] and invoking the following commands. + +First, you need to run the server using: + +---- +$ ./gradlew :samples:httpsession-gemfire-clientserver:run [-Dsample.httpsession.gemfire.log-level=info] +---- + +Then, in a separate terminal, you run the client using: + +---- +$ ./gradlew :samples:httpsession-gemfire-clientserver:tomcatRun [-Dsample.httpsession.gemfire.log-level=info] +---- + +You should now be able to access the application at http://localhost:8080/. In this sample, the web application +is the client cache and the server is standalone. + +=== Exploring the httpsession-gemfire-clientserver Sample Application + +Try using the application. Fill out the form with the following information: + +* **Attribute Name:** _username_ +* **Attribute Value:** _john_ + +Now click the **Set Attribute** button. You should now see the values displayed in the table. + +=== How does it work? + +We interact with the standard `HttpSession` in the `SessionServlet` shown below: + +.src/main/java/sample/SessionServlet.java +[source,java] +---- +include::{samples-dir}javaconfig/gemfire-clientserver/src/main/java/sample/SessionServlet.java[tags=class] +---- + +Instead of using Tomcat's `HttpSession`, we are actually persisting the values in GemFire. +Spring Session creates a cookie named SESSION in your browser that contains the id of your session. +Go ahead and view the cookies (click for help with https://developer.chrome.com/devtools/docs/resources#cookies[Chrome] +or https://getfirebug.com/wiki/index.php/Cookies_Panel#Cookies_List[Firefox]). + +NOTE: The following instructions assume you have a local GemFire installation. For more information on installation, +see http://gemfire.docs.pivotal.io/docs-gemfire/latest/getting_started/installation/install_intro.html[Installing Pivotal GemFire]. + +If you like, you can easily remove the session using `gfsh`. For example, on a Linux-based system type the following +at the command-line: + + $ gfsh + +Then, enter the following commands in _Gfsh_ ensuring to replace `70002719-3c54-4c20-82c3-e7faa6b718f3` with the value +of your SESSION cookie, or the session ID returned by the GemFire OQL query (which should match): + +.... +gfsh>connect --jmx-manager=localhost[1099] + +gfsh>query --query='SELECT * FROM /ClusteredSpringSessions.keySet' + +Result : true +startCount : 0 +endCount : 20 +Rows : 1 + +Result +------------------------------------ +70002719-3c54-4c20-82c3-e7faa6b718f3 + +NEXT_STEP_NAME : END + +gfsh>remove --region=/ClusteredSpringSessions --key="70002719-3c54-4c20-82c3-e7faa6b718f3" +.... + +NOTE: The _GemFire User Guide_ has more detailed instructions on using http://gemfire.docs.pivotal.io/docs-gemfire/latest/tools_modules/gfsh/chapter_overview.html[gfsh]. + +Now visit the application at http://localhost:8080/ again and observe that the attribute we added is no longer displayed. + +Alternatively, you can wait **30 seconds** for the session to expire and timeout, and then refresh the page. The attribute +we added should no longer be displayed in the table. However, keep in mind, that by refreshing the page, you will inadvertently +create a new (empty) session. If you run the query again, you will also see two session IDs, the new and the old, +since GemFire keeps a "tombstone" of the old session around. diff --git a/docs/src/docs/asciidoc/guides/java-gemfire-p2p.adoc b/docs/src/docs/asciidoc/guides/java-gemfire-p2p.adoc new file mode 100644 index 0000000..d3c4d7a --- /dev/null +++ b/docs/src/docs/asciidoc/guides/java-gemfire-p2p.adoc @@ -0,0 +1,209 @@ += Spring Session - HttpSession with GemFire P2P (Quick Start) +John Blum, Rob Winch +:toc: + +This guide describes how to configure Pivotal GemFire as a provider in Spring Session to transparently back +a web application's `HttpSession` using Java Configuration. + +NOTE: The completed guide can be found in the <>. + +== 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-gemfire + {spring-session-version} + pom + + + org.springframework + spring-web + {spring-version} + + +---- + +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-java-configuration]] +== Spring Java Configuration + +After adding the required dependencies and repository declarations, we can create our Spring configuration. +The Spring configuration is responsible for creating a Servlet Filter that replaces the `HttpSession` +with an implementation backed by Spring Session and GemFire. + +Add the following Spring Configuration: + +[source,java] +---- +include::{samples-dir}javaconfig/gemfire-p2p/src/main/java/sample/Config.java[tags=class] +---- + +<1> The `@EnableGemFireHttpSession` annotation creates a Spring bean named `springSessionRepositoryFilter` that +implements `Filter`. The filter is what replaces the `HttpSession` with an implementation backed by Spring Session. +In this instance, Spring Session is backed by GemFire. +<2> Then, we configure a GemFire peer cache using standard GemFire System properties. We give the GemFire data node +a name using the `name` property and set `mcast-port` to 0. With the absence of a `locators` property, this data node +will be a standalone server. GemFire's `log-level` is set using an application-specific System property (`sample.httpsession.gemfire.log-level`) +that a user can specify on the command-line when running this sample application using either Maven or Gradle (default is "_warning_"). +<3> Finally, we create an instance of the GemFire peer cache that embeds GemFire in the same JVM process as the running +Spring Session sample application. + +TIP: Additionally, we have configured this data node (server) as a GemFire Manager as well using GemFire-specific +JMX System properties that enable JMX client (e.g. _Gfsh_) to connect to this running data node. + +NOTE: For more information on configuring _Spring Data GemFire_, refer to the http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/[reference guide]. + +The `@EnableGemFireHttpSession` annotation enables a developer to configure certain aspects of Spring Session +and GemFire out-of-the-box using the following attributes: + +* `maxInactiveIntervalInSeconds` - controls HttpSession idle-timeout expiration (defaults to **30 minutes**). +* `regionName` - specifies the name of the GemFire Region used to store `HttpSession` state (defaults is "_ClusteredSpringSessions_"). +* `serverRegionShort` - specifies GemFire http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/management_all_region_types/chapter_overview.html[data management policies] +with a GemFire http://gemfire.docs.pivotal.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/cache/RegionShortcut.html[RegionShortcut] +(default is `PARTITION`). + +NOTE: `clientRegionShort` is ignored in a peer cache configuration and only applies when a client-server topology, +and more specifically, a GemFire client cache is used. + +== Java Servlet Container Initialization + +Our <> created a Spring bean named `springSessionRepositoryFilter` +that implements `Filter`. The `springSessionRepositoryFilter` bean is responsible for replacing the `HttpSession` +with a custom implementation backed by Spring Session and GemFire. + +In order for our `Filter` to do its magic, Spring needs to load our `Config` class. We also need to ensure our +Servlet Container (i.e. Tomcat) uses our `springSessionRepositoryFilter` for every request. Fortunately, Spring Session +provides a utility class named `AbstractHttpSessionApplicationInitializer` to make both of these steps extremely easy. + +You can find an example below: + +.src/main/java/sample/Initializer.java +[source,java] +---- +include::{samples-dir}javaconfig/gemfire-p2p/src/main/java/sample/Initializer.java[tags=class] +---- + +NOTE: The name of our class (`Initializer`) does not matter. What is important is that we extend `AbstractHttpSessionApplicationInitializer`. + +<1> The first step is to extend `AbstractHttpSessionApplicationInitializer`. +This ensures that a Spring bean named `springSessionRepositoryFilter` is registered with our Servlet Container +and used for every request. +<2> `AbstractHttpSessionApplicationInitializer` also provides a mechanism to easily allow Spring to load our `Config`. +// end::config[] + +[[httpsession-gemfire-p2p-java-sample-app]] +== HttpSession with GemFire (P2P) Sample Application + + +=== Running the httpsession-gemfire-p2p Sample Application + +You can run the sample by obtaining the {download-url}[source code] and invoking the following command: + +---- +$ ./gradlew :samples:httpsession-gemfire-p2p:tomcatRun [-Dsample.httpsession.gemfire.log-level=info] +---- + +You should now be able to access the application at http://localhost:8080/ + +=== Exploring the httpsession-gemfire-p2p Sample Application + +Try using the application. Fill out the form with the following information: + +* **Attribute Name:** _username_ +* **Attribute Value:** _john_ + +Now click the **Set Attribute** button. You should now see the values displayed in the table. + +=== How does it work? + +We interact with the standard `HttpSession` in the `SessionServlet` shown below: + +.src/main/java/sample/SessionServlet.java +[source,java] +---- +include::{samples-dir}javaconfig/gemfire-p2p/src/main/java/sample/SessionServlet.java[tags=class] +---- + +Instead of using Tomcat's `HttpSession`, we are actually persisting the values in GemFire. +Spring Session creates a cookie named SESSION in your browser that contains the id of your session. +Go ahead and view the cookies (click for help with https://developer.chrome.com/devtools/docs/resources#cookies[Chrome] +or https://getfirebug.com/wiki/index.php/Cookies_Panel#Cookies_List[Firefox]). + +NOTE: The following instructions assume you have a local GemFire installation. For more information on installation, +see http://gemfire.docs.pivotal.io/docs-gemfire/latest/getting_started/installation/install_intro.html[Installing Pivotal GemFire]. + +If you like, you can easily remove the session using `gfsh`. For example, on a Linux-based system type the following +at the command-line: + + $ gfsh + +Then, enter the following into _Gfsh_ ensuring to replace `70002719-3c54-4c20-82c3-e7faa6b718f3` with the value +of your SESSION cookie, or the session ID returned by the GemFire OQL query (which should match): + +.... +gfsh>connect --jmx-manager=localhost[1099] + +gfsh>query --query='SELECT * FROM /ClusteredSpringSessions.keySet' + +Result : true +startCount : 0 +endCount : 20 +Rows : 1 + +Result +------------------------------------ +70002719-3c54-4c20-82c3-e7faa6b718f3 + +NEXT_STEP_NAME : END + +gfsh>remove --region=/ClusteredSpringSessions --key="70002719-3c54-4c20-82c3-e7faa6b718f3" +.... + +NOTE: The _GemFire User Guide_ has more detailed instructions on using http://gemfire.docs.pivotal.io/docs-gemfire/latest/tools_modules/gfsh/chapter_overview.html[gfsh]. + +Now visit the application at http://localhost:8080/ and observe that the attribute we added is no longer displayed. diff --git a/docs/src/docs/asciidoc/guides/xml-gemfire-clientserver.adoc b/docs/src/docs/asciidoc/guides/xml-gemfire-clientserver.adoc new file mode 100644 index 0000000..cf0b10c --- /dev/null +++ b/docs/src/docs/asciidoc/guides/xml-gemfire-clientserver.adoc @@ -0,0 +1,273 @@ += Spring Session - HttpSession with GemFire Client/Server using XML (Quick Start) +John Blum +:toc: + +This guide describes how to configure Spring Session to transparently leverage Pivotal GemFire to back a web application's +`HttpSession` using XML Configuration. + +NOTE: The completed guide can be found in the <>. + +== 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-gemfire + {spring-session-version} + pom + + + org.springframework + spring-web + {spring-version} + + +---- + +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-xml-configuration]] +== Spring XML Configuration + +After adding the required dependencies and repository declarations, we can create our Spring configuration. +The Spring configuration is responsible for creating a Servlet Filter that replaces the `HttpSession` +with an implementation backed by Spring Session and GemFire. + +Add the following Spring Configuration: + +[source,xml] +---- +include::{samples-dir}xml/gemfire-clientserver/src/main/webapp/WEB-INF/spring/session-client.xml[tags=beans] +---- + +<1> Spring annotation configuration support is enabled with `` element so that any +Spring beans declared in the XML config that are annotated with either Spring or Standard Java annotations supported +by Spring will be configured appropriately. +<2> The `META-INF/spring/application.properties` file are used along with the `PropertySourcesPlaceholderConfigurer` +bean to replace placeholders in the Spring XML configuration meta-data with the approrpriate property values. +<3> Then the `GemFireCacheSeverReadyBeanPostProcessor`is registered to determine whether a GemFire Server +at the designated host/port is running and listening for client connections, blocking client startup until +the server is available and ready. +<4> Next, we include a `Properties` bean to configure certain aspects of the GemFire client cache using +http://gemfire.docs.pivotal.io/docs-gemfire/reference/topics/gemfire_properties.html[GemFire's System Properties]. +In this case, we are just setting GemFire's `log-level` from a application-specific System property, defaulting +to `warning` if unspecified. +<5> Then we create a instance of a GemFire `ClientCache` initialized with our `gemfireProperties`. +<6> We configure a Pool of client connections to talk to the GemFire Server in our Client/Server topology. +In our configuration, we use sensible settings for timeouts, number of connections and so on. Also, our `Pool` +has been configured to connect directly to a server. +<7> Finally, the `GemFireHttpSessionConfiguration` is registered to enable Spring Session functionality. + +TIP: In typical GemFire deployments, where the cluster includes potentially hundreds of GemFire data nodes (servers), +it is more common for clients to connect to one or more GemFire Locators running in the cluster. A Locator passes meta-data +to clients about the servers available, load and which servers have the client's data of interest, which is particularly +important for single-hop, direct data access. See more details about the http://gemfire.docs.pivotal.io/docs-gemfire/latest/topologies_and_comm/cs_configuration/chapter_overview.html[Client/Server Topology in GemFire's User Guide]. + +NOTE: For more information on configuring _Spring Data GemFire_, refer to the http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/[reference guide]. + +=== Server Configuration + +We have only covered one side of the equation. We also need a GemFire Server for our client to talk to and send +session state information to the server to manage. + +In this sample, we will use the following GemFire Server Java Configuration: + +[source,xml] +---- +include::{samples-dir}xml/gemfire-clientserver/src/main/resources/META-INF/spring/session-server.xml[tags=beans] +---- + +<1> First, we enable Spring annotation config support with the `` element so that any +Spring beans declared in the XML config that are annotated with either Spring or Standard Java annotations supported +by Spring will be configured appropriately. +<2> A `PropertySourcesPlaceholderConfigurer` is registered to replace placeholders in our Spring XML configuration +meta-data with property values in the `META-INF/spring/application.properties` file. +<3> Next, we configure the GemFire Server using GemFire System Properties very much like our P2P samples. +With the `mcast-port` set to 0 and no `locators` property specified, our server will be standalone. We also allow a +JMX client (e.g. _Gfsh_) to connect to our server with the use of the GemFire-specific JMX System properties. +<4> Then we create an instance of a GemFire peer `Cache` initialized with our GemFire System Properties. +<5> We also setup a GemFire `CacheServer` instance running on *localhost*, listening to port **11235**, +ready to accept our client connection. +<6> Finally, we enable the same Spring Session functionality we used on the client by registering an instance of +`GemFireHttpSessionConfiguration`, except that we set the session expiration timeout to **30 seconds**. +We will explain later what this means. + +The GemFire Server configuration gets bootstrapped with the following: + +[source,java] +---- +include::{samples-dir}xml/gemfire-clientserver/src/main/java/sample/Application.java[tags=class] +---- + +TIP: Instead of a simple Java class with a main method, you could also use _Spring Boot_. + +<1> The `@Configuration` annotation designates this Java class as a source for Spring configuration meta-data using +Spring's annotation configuration support. +<2> Primarily, the configuration comes from the `META-INF/spring/session-server.xml` file, which is also the reason +why _Spring Boot_ was not used in this sample, since using XML seemingly defeats the purpose and benefits +of using Spring Boot. However, this sample is about demonstrating how to use Spring XML to configure +the GemFire client and server. + +== XML Servlet Container Initialization + +Our <> created a Spring bean named `springSessionRepositoryFilter` +that implements `Filter`. The `springSessionRepositoryFilter` bean is responsible for replacing the `HttpSession` with +a custom implementation that is backed by Spring Session and GemFire. + +In order for our `Filter` to do its magic, we need to instruct Spring to load our `session-client.xml` configuration file. +We do this with the following configuration: + +.src/main/webapp/WEB-INF/web.xml +[source,xml,indent=0] +---- +include::{samples-dir}xml/gemfire-clientserver/src/main/webapp/WEB-INF/web.xml[tags=context-param] +include::{samples-dir}xml/gemfire-clientserver/src/main/webapp/WEB-INF/web.xml[tags=listeners] +---- + +The http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#context-create[ContextLoaderListener] +reads the `contextConfigLocation` context parameter value and picks up our _session-client.xml_ configuration file. + +Finally, we need to ensure that our Servlet Container (i.e. Tomcat) uses our `springSessionRepositoryFilter` +for every request. + +The following snippet performs this last step for us: + +.src/main/webapp/WEB-INF/web.xml +[source,xml,indent=0] +---- +include::{samples-dir}xml/gemfire-clientserver/src/main/webapp/WEB-INF/web.xml[tags=springSessionRepositoryFilter] +---- + +The http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/DelegatingFilterProxy.html[DelegatingFilterProxy] +will look up a bean by the name of `springSessionRepositoryFilter` and cast it to a `Filter`. For every request that `DelegatingFilterProxy` +is invoked, the `springSessionRepositoryFilter` will be invoked. +// end::config[] + +[[httpsession-gemfire-clientserver-xml-sample-app]] +== HttpSession with GemFire (Client/Server) using XML Sample Application + + +=== Running the httpsession-gemfire-clientserver-xml Sample Application + +You can run the sample by obtaining the {download-url}[source code] and invoking the following commands. + +First, you need to run the server using: + +---- +$ ./gradlew :samples:httpsession-gemfire-clientserver-xml:run [-Dsample.httpsession.gemfire.log-level=info] +---- + +Now, in a separate terminal, you can run the client using: + +---- +$ ./gradlew :samples:httpsession-gemfire-clientserver-xml:tomcatRun [-Dsample.httpsession.gemfire.log-level=info] +---- + +You should now be able to access the application at http://localhost:8080/. In this sample, the web application +is the client cache and the server is standalone. + +=== Exploring the httpsession-gemfire-clientserver-xml Sample Application + +Try using the application. Fill out the form with the following information: + +* **Attribute Name:** _username_ +* **Attribute Value:** _john_ + +Now click the **Set Attribute** button. You should now see the values displayed in the table. + +=== How does it work? + +We interact with the standard `HttpSession` in the `SessionServlet` shown below: + +.src/main/java/sample/SessionServlet.java +[source,java] +---- +include::{samples-dir}xml/gemfire-clientserver/src/main/java/sample/SessionServlet.java[tags=class] +---- + +Instead of using Tomcat's `HttpSession`, we are actually persisting the values in GemFire. +Spring Session creates a cookie named SESSION in your browser that contains the id of your session. +Go ahead and view the cookies (click for help with https://developer.chrome.com/devtools/docs/resources#cookies[Chrome] +or https://getfirebug.com/wiki/index.php/Cookies_Panel#Cookies_List[Firefox]). + +NOTE: The following instructions assume you have a local GemFire installation. For more information on installation, +see http://gemfire.docs.pivotal.io/docs-gemfire/latest/getting_started/installation/install_intro.html[Installing Pivotal GemFire]. + +If you like, you can easily remove the session using `gfsh`. For example, on a Linux-based system type the following +at the command-line: + + $ gfsh + +Then, enter the following commands in _Gfsh_ ensuring to replace `70002719-3c54-4c20-82c3-e7faa6b718f3` with the value +of your SESSION cookie, or the session ID returned by the GemFire OQL query (which should match): + +.... +gfsh>connect --jmx-manager=localhost[1099] + +gfsh>query --query='SELECT * FROM /ClusteredSpringSessions.keySet' + +Result : true +startCount : 0 +endCount : 20 +Rows : 1 + +Result +------------------------------------ +70002719-3c54-4c20-82c3-e7faa6b718f3 + +NEXT_STEP_NAME : END + +gfsh>remove --region=/ClusteredSpringSessions --key="70002719-3c54-4c20-82c3-e7faa6b718f3" +.... + +NOTE: The _GemFire User Guide_ has more detailed instructions on using http://gemfire.docs.pivotal.io/docs-gemfire/latest/tools_modules/gfsh/chapter_overview.html[gfsh]. + +Now visit the application at http://localhost:8080/ again and observe that the attribute we added is no longer displayed. + +Alternatively, you can wait *30 seconds* for the session to timeout (i.e. expire) and refresh the page. Again, the +attribute we added should no longer be displayed in the table. However, keep in mind, that by refreshing the page, +you will inadvertently create a new (empty) session. If you run the query again, you will also see two session IDs, +the new and the old, since GemFire keeps a "tombstone" of the old session around. diff --git a/docs/src/docs/asciidoc/guides/xml-gemfire-p2p.adoc b/docs/src/docs/asciidoc/guides/xml-gemfire-p2p.adoc new file mode 100644 index 0000000..e4b0959 --- /dev/null +++ b/docs/src/docs/asciidoc/guides/xml-gemfire-p2p.adoc @@ -0,0 +1,210 @@ += Spring Session - HttpSession with GemFire P2P using XML (Quick Start) +John Blum, Rob Winch +:toc: + +This guide describes how to configure Pivotal GemFire as a provider in Spring Session to transparently back +a web application's `HttpSession` using XML Configuration. + +NOTE: The completed guide can be found in the <>. + +== 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-gemfire + {spring-session-version} + pom + + + org.springframework + spring-web + {spring-version} + + +---- + +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-xml-configuration]] +== Spring XML Configuration + +After adding the required dependencies and repository declarations, we can create our Spring configuration. +The Spring configuration is responsible for creating a Servlet Filter that replaces the `HttpSession` +with an implementation backed by Spring Session and GemFire. + +Add the following Spring Configuration: + +.src/main/webapp/WEB-INF/spring/session.xml +[source,xml,indent=0] +---- +include::{samples-dir}xml/gemfire-p2p/src/main/webapp/WEB-INF/spring/session.xml[tags=beans] +---- + +<1> We use the combination of `` and `GemFireHttpSessionConfiguration` because Spring Session +does not yet provide XML Namespace support (see https://github.com/spring-projects/spring-session/issues/104[gh-104]). +This creates a Spring bean with the name of `springSessionRepositoryFilter` that implements `Filter`. The filter is what +replaces the `HttpSession` with an implementation backed by Spring Session. +In this instance, Spring Session is backed by GemFire. +<2> Then, we configure a GemFire peer cache using standard GemFire System properties. We give the GemFire data node +a name using the `name` property and set `mcast-port` to 0. With the absence of a `locators` property, this data node +will be a standalone server. GemFire's `log-level` is set using an application-specific System property +(`sample.httpsession.gemfire.log-level`) that a user can specify on the command-line when running this application +using either Maven or Gradle (default is "_warning_"). +<3> Finally, we create an instance of the GemFire peer cache that embeds GemFire in the same JVM process as the running +Spring Session sample application. + +TIP: Additionally, we have configured this data node (server) as a GemFire Manager as well using GemFire-specific +JMX System properties that enable JMX client (e.g. _Gfsh_) to connect to this running data node. + +NOTE: For more information on configuring _Spring Data GemFire_, refer to the http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/[reference guide]. + +== XML Servlet Container Initialization + +Our <> created a Spring bean named `springSessionRepositoryFilter` +that implements `Filter`. The `springSessionRepositoryFilter` bean is responsible for replacing the `HttpSession` with +a custom implementation that is backed by Spring Session and GemFire. + +In order for our `Filter` to do its magic, we need to instruct Spring to load our `session.xml` configuration file. +We do this with the following configuration: + +.src/main/webapp/WEB-INF/web.xml +[source,xml,indent=0] +---- +include::{samples-dir}xml/gemfire-p2p/src/main/webapp/WEB-INF/web.xml[tags=context-param] +include::{samples-dir}xml/gemfire-p2p/src/main/webapp/WEB-INF/web.xml[tags=listeners] +---- + +The http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#context-create[ContextLoaderListener] +reads the `contextConfigLocation` context parameter value and picks up our _session.xml_ configuration file. + +Finally, we need to ensure that our Servlet Container (i.e. Tomcat) uses our `springSessionRepositoryFilter` +for every request. + +The following snippet performs this last step for us: + +.src/main/webapp/WEB-INF/web.xml +[source,xml,indent=0] +---- +include::{samples-dir}xml/gemfire-p2p/src/main/webapp/WEB-INF/web.xml[tags=springSessionRepositoryFilter] +---- + +The http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/DelegatingFilterProxy.html[DelegatingFilterProxy] +will look up a bean by the name of `springSessionRepositoryFilter` and cast it to a `Filter`. For every request that `DelegatingFilterProxy` +is invoked, the `springSessionRepositoryFilter` will be invoked. +// end::config[] + +[[httpsession-gemfire-p2p-xml-sample-app]] +== HttpSession with GemFire (P2P) using XML Sample Application + + +=== Running the httpsession-gemfire-p2p-xml Sample Application + +You can run the sample by obtaining the {download-url}[source code] and invoking the following command: + +---- +$ ./gradlew :samples:httpsession-gemfire-p2p-xml:tomcatRun [-Dsample.httpsession.gemfire.log-level=info] +---- + +You should now be able to access the application at http://localhost:8080/ + +=== Exploring the httpsession-gemfire-p2p-xml Sample Application + +Try using the application. Fill out the form with the following information: + +* **Attribute Name:** _username_ +* **Attribute Value:** _john_ + +Now click the **Set Attribute** button. You should now see the values displayed in the table. + +=== How does it work? + +We interact with the standard `HttpSession` in the `SessionServlet` shown below: + +.src/main/java/sample/SessionServlet.java +[source,java] +---- +include::{samples-dir}xml/gemfire-p2p/src/main/java/sample/SessionServlet.java[tags=class] +---- + +Instead of using Tomcat's `HttpSession`, we are actually persisting the values in GemFire. +Spring Session creates a cookie named SESSION in your browser that contains the id of your session. +Go ahead and view the cookies (click for help with https://developer.chrome.com/devtools/docs/resources#cookies[Chrome] +or https://getfirebug.com/wiki/index.php/Cookies_Panel#Cookies_List[Firefox]). + +NOTE: The following instructions assume you have a local GemFire installation. For more information on installation, +see http://gemfire.docs.pivotal.io/docs-gemfire/latest/getting_started/installation/install_intro.html[Installing Pivotal GemFire]. + +If you like, you can easily remove the session using `gfsh`. For example, on a Linux-based system type the following +at the command-line: + + $ gfsh + +Then, enter the following into _Gfsh_ ensuring to replace `70002719-3c54-4c20-82c3-e7faa6b718f3` with the value +of your SESSION cookie, or the session ID returned by the GemFire OQL query (which should match): + +.... +gfsh>connect --jmx-manager=localhost[1099] + +gfsh>query --query='SELECT * FROM /ClusteredSpringSessions.keySet' + +Result : true +startCount : 0 +endCount : 20 +Rows : 1 + +Result +------------------------------------ +70002719-3c54-4c20-82c3-e7faa6b718f3 + +NEXT_STEP_NAME : END + +gfsh>remove --region=/ClusteredSpringSessions --key="70002719-3c54-4c20-82c3-e7faa6b718f3" +.... + +NOTE: The _GemFire User Guide_ has more detailed instructions on using http://gemfire.docs.pivotal.io/docs-gemfire/latest/tools_modules/gfsh/chapter_overview.html[gfsh]. + +Now visit the application at http://localhost:8080/ and observe that the attribute we added is no longer displayed. diff --git a/docs/src/docs/asciidoc/index.adoc b/docs/src/docs/asciidoc/index.adoc new file mode 100644 index 0000000..30e1a6f --- /dev/null +++ b/docs/src/docs/asciidoc/index.adoc @@ -0,0 +1,1194 @@ + += Spring Session +Rob Winch, Vedran Pavić, Jakub Kubrynski +:doctype: book +:indexdoc-tests: {docs-test-dir}docs/IndexDocTests.java +:websocketdoc-test-dir: {docs-test-dir}docs/websocket/ +:toc: left + +[[abstract]] + +Spring Session provides an API and implementations for managing a user's session information. + +[[introduction]] +== Introduction + +Spring Session provides an API and implementations for managing a user's session information. It also provides transparent integration with: + +* <> - allows replacing the HttpSession in an application container (i.e. Tomcat) neutral way. +Additional features include: +** **Clustered Sessions** - Spring Session makes it trivial to support <> without being tied to an application container specific solution. +** **Multiple Browser Sessions** - Spring Session supports <> in a single browser instance (i.e. multiple authenticated accounts similar to Google). +** **RESTful APIs** - Spring Session allows providing session ids in headers to work with <> + +* <> - provides the ability to keep the `HttpSession` alive when receiving WebSocket messages + +== What's New in 1.3 + +Below are the highlights of what is new in Spring Session 1.3. You can find a complete list of what's new by referring to the changelogs of +https://github.com/spring-projects/spring-session/milestone/6?closed=1[1.3.0.M1], +https://github.com/spring-projects/spring-session/milestone/18?closed=1[1.3.0.M2], +https://github.com/spring-projects/spring-session/milestone/16?closed=1[1.3.0.RC1], and +https://github.com/spring-projects/spring-session/milestone/19?closed=1[1.3.0.RELEASE]. + +* First class support for http://docs.spring.io/spring-session/docs/1.3.0.RELEASE/reference/html5/#httpsession-hazelcast[Hazelcast] +* First class support for http://docs.spring.io/spring-session/docs/1.3.0.RELEASE/reference/html5/#spring-security-concurrent-sessions-how[Spring Security's concurrent session management] +* Added https://github.com/maseev/spring-session-orientdb[OrientDB Community Extension] +* https://github.com/spring-projects/spring-session/tree/1.3.0.RELEASE/samples/httpsession-redis-json[GenericJackson2JsonRedisSerializer sample] with Spring Security's new Jackson Support +* Guides now https://github.com/spring-projects/spring-session/pull/652[use Lettuce] +* `spring.session.cleanup.cron.expression` can be used to override the cleanup task’s cron expression +* Lots of performance improvements and bug fixes + +[[samples]] +== Samples and Guides (Start Here) + +If you are looking to get started with Spring Session, the best place to start is our Sample Applications. + +.Sample Applications using Spring Boot +|=== +| Source | Description | Guide + +| {gh-samples-url}boot/redis[HttpSession with Redis] +| Demonstrates how to use Spring Session to replace the `HttpSession` with Redis. +| link:guides/boot-redis.html[HttpSession with Redis Guide] + +| {gh-samples-url}boot/gemfire[HttpSession with GemFire] +| Demonstrates how to use Spring Session to replace the `HttpSession` with GemFire using a Client/Server topology. +| link:guides/boot-gemfire.html[HttpSession with GemFire Guide] + +| {gh-samples-url}boot/mongo[HttpSession with Mongo] +| Demonstrates how to use Spring Session to replace the `HttpSession` with Mongo. +| link:guides/boot-mongo.html[HttpSession with Mongo Guide] + +| {gh-samples-url}boot/jdbc[HttpSession with JDBC] +| Demonstrates how to use Spring Session to replace the `HttpSession` with a relational database store. +| link:guides/boot-jdbc.html[HttpSession with JDBC Guide] + +| {gh-samples-url}boot/findbyusername[Find by Username] +| Demonstrates how to use Spring Session to find sessions by username. +| link:guides/boot-findbyusername.html[Find by Username Guide] + +| {gh-samples-url}boot/websocket[WebSockets] +| Demonstrates how to use Spring Session with WebSockets. +| link:guides/boot-websocket.html[WebSockets Guide] + +| {gh-samples-url}boot/redis-json[HttpSession with Redis JSON serialization] +| Demonstrates how to use Spring Session to replace the `HttpSession` with Redis using JSON serialization. +| TBD + +|=== + +.Sample Applications using Spring Java based configuration +|=== +| Source | Description | Guide + +| {gh-samples-url}javaconfig/redis[HttpSession with Redis] +| Demonstrates how to use Spring Session to replace the `HttpSession` with Redis. +| link:guides/java-redis.html[HttpSession with Redis Guide] + +| {gh-samples-url}javaconfig/gemfire-clientserver[HttpSession with GemFire (Client/Server)] +| Demonstrates how to use Spring Session to replace the `HttpSession` with GemFire using a Client/Server topology. +| link:guides/java-gemfire-clientserver.html[HttpSession with GemFire (Client/Server) Guide] + +| {gh-samples-url}javaconfig/gemfire-p2p[HttpSession with GemFire (P2P)] +| Demonstrates how to use Spring Session to replace the `HttpSession` with GemFire using a P2P topology. +| link:guides/java-gemfire-p2p.html[HttpSession with GemFire (P2P) Guide] + +| {gh-samples-url}javaconfig/jdbc[HttpSession with JDBC] +| Demonstrates how to use Spring Session to replace the `HttpSession` with a relational database store. +| link:guides/java-jdbc.html[HttpSession with JDBC Guide] + +| {gh-samples-url}javaconfig/hazelcast[HttpSession with Hazelcast] +| Demonstrates how to use Spring Session to replace the `HttpSession` with Hazelcast. +| link:guides/java-hazelcast.html[HttpSession with Hazelcast Guide] + +| {gh-samples-url}javaconfig/custom-cookie[Custom Cookie] +| Demonstrates how to use Spring Session and customize the cookie. +| link:guides/java-custom-cookie.html[Custom Cookie Guide] + +| {gh-samples-url}javaconfig/security[Spring Security] +| Demonstrates how to use Spring Session with an existing Spring Security application. +| link:guides/java-security.html[Spring Security Guide] + +| {gh-samples-url}javaconfig/rest[REST] +| Demonstrates how to use Spring Session in a REST application to support authenticating with a header. +| link:guides/java-rest.html[REST Guide] + +| {gh-samples-url}javaconfig/users[Multiple Users] +| Demonstrates how to use Spring Session to manage multiple simultaneous browser sessions (i.e Google Accounts). +| link:guides/java-users.html[Multiple Users Guide] + +|=== + +.Sample Applications using Spring XML based configuration +|=== +| Source | Description | Guide + +| {gh-samples-url}xml/redis[HttpSession with Redis] +| Demonstrates how to use Spring Session to replace the `HttpSession` with a Redis store. +| link:guides/xml-redis.html[HttpSession with Redis Guide] + +| {gh-samples-url}xml/gemfire-clientserver[HttpSession with GemFire (Client/Server)] +| Demonstrates how to use Spring Session to replace the `HttpSession` with GemFire using a Client/Server topology. +| link:guides/xml-gemfire-clientserver.html[HttpSession with GemFire (Client/Server) Guide] + +| {gh-samples-url}xml/gemfire-p2p[HttpSession with GemFire (P2P)] +| Demonstrates how to use Spring Session to replace the `HttpSession` with GemFire using a P2P topology. +| link:guides/xml-gemfire-p2p.html[HttpSession with GemFire (P2P) Guide] + +| {gh-samples-url}xml/jdbc[HttpSession with JDBC] +| Demonstrates how to use Spring Session to replace the `HttpSession` with a relational database store. +| link:guides/xml-jdbc.html[HttpSession with JDBC Guide] + +|=== + +.Misc sample Applications +|=== +| Source | Description | Guide + +| {gh-samples-url}misc/grails3[Grails 3] +| Demonstrates how to use Spring Session with Grails 3. +| link:guides/grails3.html[Grails 3 Guide] + +| {gh-samples-url}misc/hazelcast[Hazelcast] +| Demonstrates how to use Spring Session with Hazelcast in a Java EE application. +| TBD + +|=== + +[[httpsession]] +== HttpSession Integration + +Spring Session provides transparent integration with `HttpSession`. +This means that developers can switch the `HttpSession` implementation out with an implementation that is backed by Spring Session. + +[[httpsession-why]] +=== Why Spring Session & HttpSession? + +We have already mentioned that Spring Session provides transparent integration with `HttpSession`, but what benefits do we get out of this? + +* **Clustered Sessions** - Spring Session makes it trivial to support <> without being tied to an application container specific solution. +* **Multiple Browser Sessions** - Spring Session supports <> in a single browser instance (i.e. multiple authenticated accounts similar to Google). +* **RESTful APIs** - Spring Session allows providing session ids in headers to work with <> + +[[httpsession-redis]] +=== HttpSession with Redis + +Using Spring Session with `HttpSession` is enabled by adding a Servlet Filter before anything that uses the `HttpSession`. +You can choose from enabling this using either: + +* <> +* <> + +[[httpsession-redis-jc]] +==== Redis Java Based Configuration + +This section describes how to use Redis to back `HttpSession` using Java based configuration. + +NOTE: The <> provides a working sample on how to integrate Spring Session and `HttpSession` using Java configuration. +You can read the basic steps for integration below, but you are encouraged to follow along with the detailed HttpSession Guide when integrating with your own application. + +include::guides/java-redis.adoc[tags=config,leveloffset=+3] + +[[httpsession-redis-xml]] +==== Redis XML Based Configuration + +This section describes how to use Redis to back `HttpSession` using XML based configuration. + +NOTE: The <> provides a working sample on how to integrate Spring Session and `HttpSession` using XML configuration. +You can read the basic steps for integration below, but you are encouraged to follow along with the detailed HttpSession XML Guide when integrating with your own application. + +include::guides/xml-redis.adoc[tags=config,leveloffset=+3] + +[[httpsession-gemfire]] +=== HttpSession with Pivotal GemFire + +When https://pivotal.io/big-data/pivotal-gemfire[Pivotal GemFire] is used with Spring Session, a web application's +`HttpSession` can be replaced with a **clustered** implementation managed by GemFire and conveniently accessed +with Spring Session's API. + +The two most common topologies to manage Spring Sessions using GemFire include: + +* <> +* <> + +Additionally, GemFire supports site-to-site replication using http://gemfire.docs.pivotal.io/docs-gemfire/topologies_and_comm/multi_site_configuration/chapter_overview.html[WAN functionality]. +The ability to configure and use GemFire's WAN support is independent of Spring Session, and is beyond the scope +of this document. More details on GemFire WAN functionality can be found http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/#bootstrap:gateway[here]. + +[[httpsession-gemfire-clientserver]] +==== GemFire Client-Server + +The http://gemfire.docs.pivotal.io/docs-gemfire/latest/topologies_and_comm/cs_configuration/chapter_overview.html[Client-Server] +topology will probably be the more common configuration preference for users when using GemFire as a provider in +Spring Session since a GemFire server will have significantly different and unique JVM heap requirements when compared +to the application. Using a client-server topology enables an application to manage (e.g. replicate) application state +independently from other application processes. + +In a client-server topology, an application using Spring Session will open a client cache connection to a (remote) +GemFire server cluster to manage and provide consistent access to all `HttpSession` state. + +You can configure a Client-Server topology with either: + +* <> +* <> + +[[httpsession-gemfire-clientserver-java]] +===== GemFire Client-Server Java-based Configuration + +This section describes how to use GemFire's Client-Server topology to back an `HttpSession` with Java-based configuration. + +NOTE: The <> provides a working sample on how to integrate +Spring Session and GemFire to replace the HttpSession using Java configuration. You can read the basic steps for +integration below, but you are encouraged to follow along with the detailed HttpSession with GemFire (Client-Server) +Guide when integrating with your own application. + +include::guides/java-gemfire-clientserver.adoc[tags=config,leveloffset=+3] + +[[http-session-gemfire-clientserver-xml]] +===== GemFire Client-Server XML-based Configuration + +This section describes how to use GemFire's Client-Server topology to back an `HttpSession` with XML-based configuration. + +NOTE: The <> provides a working sample on how to +integrate Spring Session and GemFire to replace the `HttpSession` using XML configuration. You can read the basic steps +for integration below, but you are encouraged to follow along with the detailed HttpSession with GemFire (Client-Server) +using XML Guide when integrating with your own application. + +include::guides/xml-gemfire-clientserver.adoc[tags=config,leveloffset=+3] + +[[httpsession-gemfire-p2p]] +==== GemFire Peer-To-Peer (P2P) + +Perhaps less common would be to configure the Spring Session application as a peer member in the GemFire cluster using +the http://gemfire.docs.pivotal.io/docs-gemfire/latest/topologies_and_comm/p2p_configuration/chapter_overview.html[Peer-To-Peer (P2P)] topology. +In this configuration, a Spring Session application would be an actual data node (server) in the GemFire cluster, +and **not** a cache client as before. + +One advantage to this approach is the proximity of the application to the application's state (i.e. it's data). However, +there are other effective means of accomplishing similar data dependent computations, such as using GemFire's +http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/function_exec/chapter_overview.html[Function Execution]. +Any of GemFire's other http://gemfire.docs.pivotal.io/docs-gemfire/latest/getting_started/product_intro.html[features] +can be used when GemFire is serving as a provider in Spring Session. + +P2P is very useful for both testing purposes as well as smaller, more focused and self-contained applications, +such as those found in a microservices architecture, and will most certainly improve on your application's latency, +throughput and consistency needs. + +You can configure a Peer-To-Peer (P2P) topology with either: + +* <> +* <> + +[[httpsession-gemfire-p2p-java]] +===== GemFire Peer-To-Peer (P2P) Java-based Configuration + +This section describes how to use GemFire's Peer-To-Peer (P2P) topology to back an `HttpSession` using Java-based configuration. + +NOTE: The <> provides a working sample on how to integrate +Spring Session and GemFire to replace the `HttpSession` using Java configuration. You can read the basic steps +for integration below, but you are encouraged to follow along with the detailed HttpSession with GemFire (P2P) Guide +when integrating with your own application. + +include::guides/java-gemfire-p2p.adoc[tags=config,leveloffset=+3] + +[[httpsession-gemfire-p2p-xml]] +===== GemFire Peer-To-Peer (P2P) XML-based Configuration + +This section describes how to use GemFire's Peer-To-Peer (P2P) topology to back an `HttpSession` using XML-based configuration. + +NOTE: The <> provides a working sample on how to integrate +Spring Session and GemFire to replace the `HttpSession` using XML configuration. You can read the basic steps for +integration below, but you are encouraged to follow along with the detailed HttpSession with GemFire (P2P) using XML +Guide when integrating with your own application. + +include::guides/xml-gemfire-p2p.adoc[tags=config,leveloffset=+3] + +[[httpsession-jdbc]] +=== HttpSession with JDBC + +Using Spring Session with `HttpSession` is enabled by adding a Servlet Filter before anything that uses the `HttpSession`. +You can choose from enabling this using either: + +* <> +* <> +* <> + +[[httpsession-jdbc-jc]] +==== JDBC Java Based Configuration + +This section describes how to use a relational database to back `HttpSession` using Java based configuration. + +NOTE: The <> provides a working sample on how to integrate Spring Session and `HttpSession` using Java configuration. +You can read the basic steps for integration below, but you are encouraged to follow along with the detailed HttpSession JDBC Guide when integrating with your own application. + +include::guides/java-jdbc.adoc[tags=config,leveloffset=+3] + +[[httpsession-jdbc-xml]] +==== JDBC XML Based Configuration + +This section describes how to use a relational database to back `HttpSession` using XML based configuration. + +NOTE: The <> provides a working sample on how to integrate Spring Session and `HttpSession` using XML configuration. +You can read the basic steps for integration below, but you are encouraged to follow along with the detailed HttpSession JDBC XML Guide when integrating with your own application. + +include::guides/xml-jdbc.adoc[tags=config,leveloffset=+3] + +[[httpsession-jdbc-boot]] +==== JDBC Spring Boot Based Configuration + +This section describes how to use a relational database to back `HttpSession` when using Spring Boot. + +NOTE: The <> provides a working sample on how to integrate Spring Session and `HttpSession` using Spring Boot. +You can read the basic steps for integration below, but you are encouraged to follow along with the detailed HttpSession JDBC Spring Boot Guide when integrating with your own application. + +include::guides/boot-jdbc.adoc[tags=config,leveloffset=+3] + +[[httpsession-hazelcast]] +=== HttpSession with Hazelcast + +Using Spring Session with `HttpSession` is enabled by adding a Servlet Filter before anything that uses the `HttpSession`. + +This section describes how to use Hazelcast to back `HttpSession` using Java based configuration. + +NOTE: The <> provides a working sample on how to integrate Spring Session and `HttpSession` using Java configuration. +You can read the basic steps for integration below, but you are encouraged to follow along with the detailed Hazelcast Spring Guide when integrating with your own application. + +include::guides/java-hazelcast.adoc[tags=config,leveloffset=+2] + +[[httpsession-how]] +=== How HttpSession Integration Works + +Fortunately both `HttpSession` and `HttpServletRequest` (the API for obtaining an `HttpSession`) are both interfaces. +This means that we can provide our own implementations for each of these APIs. + +NOTE: This section describes how Spring Session provides transparent integration with `HttpSession`. The intent is so that user's can understand what is happening under the covers. This functionality is already integrated and you do NOT need to implement this logic yourself. + +First we create a custom `HttpServletRequest` that returns a custom implementation of `HttpSession`. +It looks something like the following: + +[source, java] +---- +public class SessionRepositoryRequestWrapper extends HttpServletRequestWrapper { + + public SessionRepositoryRequestWrapper(HttpServletRequest original) { + super(original); + } + + public HttpSession getSession() { + return getSession(true); + } + + public HttpSession getSession(boolean createNew) { + // create an HttpSession implementation from Spring Session + } + + // ... other methods delegate to the original HttpServletRequest ... +} +---- + +Any method that returns an `HttpSession` is overridden. +All other methods are implemented by `HttpServletRequestWrapper` and simply delegate to the original `HttpServletRequest` implementation. + +We replace the `HttpServletRequest` implementation using a servlet `Filter` called `SessionRepositoryFilter`. +The pseudocode can be found below: + +[source, java] +---- +public class SessionRepositoryFilter implements Filter { + + public doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { + HttpServletRequest httpRequest = (HttpServletRequest) request; + SessionRepositoryRequestWrapper customRequest = + new SessionRepositoryRequestWrapper(httpRequest); + + chain.doFilter(customRequest, response, chain); + } + + // ... +} +---- + +By passing in a custom `HttpServletRequest` implementation into the `FilterChain` we ensure that anything invoked after our `Filter` uses the custom `HttpSession` implementation. +This highlights why it is important that Spring Session's `SessionRepositoryFilter` must be placed before anything that interacts with the `HttpSession`. + +[[httpsession-multi]] +=== Multiple HttpSessions in Single Browser + +Spring Session has the ability to support multiple sessions in a single browser instance. +This provides the ability to support authenticating with multiple users in the same browser instance (i.e. Google Accounts). + +NOTE: The <> provides a complete working example of managing multiple users in the same browser instance. +You can follow the basic steps for integration below, but you are encouraged to follow along with the detailed Manage Multiple Users Guide when integrating with your own application. + +include::guides/java-users.adoc[tags=how-does-it-work,leveloffset=+1] + +[[httpsession-rest]] +=== HttpSession & RESTful APIs + +Spring Session can work with RESTful APIs by allowing the session to be provided in a header. + + +NOTE: The <> provides a working sample on how to use Spring Session in a REST application to support authenticating with a header. +You can follow the basic steps for integration below, but you are encouraged to follow along with the detailed REST Guide when integrating with your own application. + +include::guides/java-rest.adoc[tags=config,leveloffset=+2] + +[[httpsession-httpsessionlistener]] +=== HttpSessionListener + +Spring Session supports `HttpSessionListener` by translating `SessionDestroyedEvent` and `SessionCreatedEvent` into `HttpSessionEvent` by declaring `SessionEventHttpSessionListenerAdapter`. +To use this support, you need to: + +* Ensure your `SessionRepository` implementation supports and is configured to fire `SessionDestroyedEvent` and `SessionCreatedEvent`. +* Configure `SessionEventHttpSessionListenerAdapter` as a Spring bean. +* Inject every `HttpSessionListener` into the `SessionEventHttpSessionListenerAdapter` + +If you are using the configuration support documented in <>, then all you need to do is register every `HttpSessionListener` as a bean. +For example, assume you want to support Spring Security's concurrency control and need to use `HttpSessionEventPublisher` you can simply add `HttpSessionEventPublisher` as a bean. +In Java configuration, this might look like: + +[source,java,indent=0] +---- +include::{docs-test-dir}docs/http/RedisHttpSessionConfig.java[tags=config] +---- + +In XML configuration, this might look like: + +[source,xml,indent=0] +---- +include::{docs-test-resources-dir}docs/http/HttpSessionListenerXmlTests-context.xml[tags=config] +---- + +[[websocket]] +== WebSocket Integration + +Spring Session provides transparent integration with Spring's WebSocket support. + +include::guides/boot-websocket.adoc[tags=disclaimer,leveloffset=+1] + +[[websocket-why]] +=== Why Spring Session & WebSockets? + +So why do we need Spring Session when using WebSockets? + +Consider an email application that does much of its work through HTTP requests. +However, there is also a chat application embedded within it that works over WebSocket APIs. +If a user is actively chatting with someone, we should not timeout the `HttpSession` since this would be pretty poor user experience. +However, this is exactly what https://java.net/jira/browse/WEBSOCKET_SPEC-175[JSR-356] does. + +Another issue is that according to JSR-356 if the `HttpSession` times out any WebSocket that was created with that HttpSession and an authenticated user should be forcibly closed. +This means that if we are actively chatting in our application and are not using the HttpSession, then we will also disconnect from our conversation! + +[[websocket-usage]] +=== WebSocket Usage + +The <> provides a working sample on how to integrate Spring Session with WebSockets. +You can follow the basic steps for integration below, but you are encouraged to follow along with the detailed WebSocket Guide when integrating with your own application: + +[[websocket-httpsession]] +==== HttpSession Integration + +Before using WebSocket integration, you should be sure that you have <> working first. + +include::guides/boot-websocket.adoc[tags=config,leveloffset=+2] + +[[spring-security]] +== Spring Security Integration + +Spring Session provides integration with Spring Security. + +[[spring-security-rememberme]] +=== Spring Security Remember-Me Support + +Spring Session provides integration with http://docs.spring.io/spring-security/site/docs/4.2.x/reference/htmlsingle/#remember-me[Spring Security's Remember-Me Authentication]. +The support will: + +* Change the session expiration length +* Ensure the session cookie expires at `Integer.MAX_VALUE`. +The cookie expiration is set to the largest possible value because the cookie is only set when the session is created. +If it were set to the same value as the session expiration, then the session would get renewed when the user used it but the cookie expiration would not be updated causing the expiration to be fixed. + +To configure Spring Session with Spring Security in Java Configuration use the following as a guide: + +[source,java,indent=0] +---- +include::{docs-test-dir}docs/security/RememberMeSecurityConfiguration.java[tags=http-rememberme] + } + +include::{docs-test-dir}docs/security/RememberMeSecurityConfiguration.java[tags=rememberme-bean] +---- + +An XML based configuration would look something like this: + +[source,xml,indent=0] +---- +include::{docs-test-resources-dir}docs/security/RememberMeSecurityConfigurationXmlTests-context.xml[tags=config] +---- + + +[[spring-security-concurrent-sessions]] +=== Spring Security Concurrent Session Control + + +Spring Session provides integration with Spring Security to support its concurrent session control. +This allows limiting the number of active sessions that a single user can have concurrently, but unlike the default +Spring Security support this will also work in a clustered environment. This is done by providing a custom +implementation of Spring Security's `SessionRegistry` interface. + +When using Spring Security's Java config DSL, you can configure the custom `SessionRegistry` through the +`SessionManagementConfigurer` like this: +[source,java,indent=0] +---- +include::{docs-test-dir}docs/security/SecurityConfiguration.java[tags=class] +---- + +This assumes that you've also configured Spring Session to provide a `FindByIndexNameSessionRepository` that +returns `ExpiringSession` instances. + +When using XML configuration, it would look something like this: +[source,xml,indent=0] +---- +include::{docs-test-resources-dir}docs/security/security-config.xml[tags=config] +---- + +This assumes that your Spring Session `SessionRegistry` bean is called `sessionRegistry`, which is the name used by all +`SpringHttpSessionConfiguration` subclasses. + +[[spring-security-concurrent-sessions-limitations]] +=== Limitations + +Spring Session's implementation of Spring Security's `SessionRegistry` interface does not support the `getAllPrincipals` +method, as this information cannot be retrieved using Spring Session. This method is never called by Spring Security, +so this only affects applications that access the `SessionRegistry` themselves. + +[[api]] +== API Documentation + +You can browse the complete link:../../api/[Javadoc] online. The key APIs are described below: + +[[api-session]] +=== Session + +A `Session` is a simplified `Map` of name value pairs. + +Typical usage might look like the following: + +[source,java,indent=0] +---- +include::{indexdoc-tests}[tags=repository-demo] +---- + +<1> We create a `SessionRepository` instance with a generic type, `S`, that extends `Session`. The generic type is defined in our class. +<2> We create a new `Session` using our `SessionRepository` and assign it to a variable of type `S`. +<3> We interact with the `Session`. In our example, we demonstrate saving a `User` to the `Session`. +<4> We now save the `Session`. This is why we needed the generic type `S`. The `SessionRepository` only allows saving `Session` instances that were created or retrieved using the same `SessionRepository`. This allows for the `SessionRepository` to make implementation specific optimizations (i.e. only writing attributes that have changed). +<5> We retrieve the `Session` from the `SessionRepository`. +<6> We obtain the persisted `User` from our `Session` without the need for explicitly casting our attribute. + +[[api-expiringsession]] +=== ExpiringSession + +An `ExpiringSession` extends a `Session` by providing attributes related to the `Session` instance's expiration. +If there is no need to interact with the expiration information, prefer using the more simple `Session` API. + +Typical usage might look like the following: + +[source,java,indent=0] +---- +include::{indexdoc-tests}[tags=expire-repository-demo] +---- + +<1> We create a `SessionRepository` instance with a generic type, `S`, that extends `ExpiringSession`. The generic type is defined in our class. +<2> We create a new `ExpiringSession` using our `SessionRepository` and assign it to a variable of type `S`. +<3> We interact with the `ExpiringSession`. +In our example, we demonstrate updating the amount of time the `ExpiringSession` can be inactive before it expires. +<4> We now save the `ExpiringSession`. +This is why we needed the generic type `S`. +The `SessionRepository` only allows saving `ExpiringSession` instances that were created or retrieved using the same `SessionRepository`. +This allows for the `SessionRepository` to make implementation specific optimizations (i.e. only writing attributes that have changed). +The last accessed time is automatically updated when the `ExpiringSession` is saved. +<5> We retrieve the `ExpiringSession` from the `SessionRepository`. +If the `ExpiringSession` were expired, the result would be null. + +[[api-sessionrepository]] +=== SessionRepository + +A `SessionRepository` is in charge of creating, retrieving, and persisting `Session` instances. + +If possible, developers should not interact directly with a `SessionRepository` or a `Session`. +Instead, developers should prefer interacting with `SessionRepository` and `Session` indirectly through the <> and <> integration. + +[[api-findbyindexnamesessionrepository]] +=== FindByIndexNameSessionRepository + +Spring Session's most basic API for using a `Session` is the `SessionRepository`. +This API is intentionally very simple, so that it is easy to provide additional implementations with basic functionality. + +Some `SessionRepository` implementations may choose to implement `FindByIndexNameSessionRepository` also. +For example, Spring's Redis support implements `FindByIndexNameSessionRepository`. + +The `FindByIndexNameSessionRepository` adds a single method to look up all the sessions for a particular user. +This is done by ensuring that the session attribute with the name `FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME` is populated with the username. +It is the responsibility of the developer to ensure the attribute is populated since Spring Session is not aware of the authentication mechanism being used. +An example of how this might be used can be seen below: + +[source,java,indent=0] +---- +include::{docs-test-dir}docs/FindByIndexNameSessionRepositoryTests.java[tags=set-username] +---- + +[NOTE] +==== +Some implementations of `FindByIndexNameSessionRepository` will provide hooks to automatically index other session attributes. +For example, many implementations will automatically ensure the current Spring Security user name is indexed with the index name `FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME`. +==== + +Once the session is indexed, it can be found using the following: + +[source,java,indent=0] +---- +include::{docs-test-dir}docs/FindByIndexNameSessionRepositoryTests.java[tags=findby-username] +---- + +[[api-enablespringhttpsession]] +=== EnableSpringHttpSession + +The `@EnableSpringHttpSession` annotation can be added to an `@Configuration` class to expose the `SessionRepositoryFilter` as a bean named "springSessionRepositoryFilter". +In order to leverage the annotation, a single `SessionRepository` bean must be provided. +For example: + +[source,java,indent=0] +---- +include::{docs-test-dir}docs/SpringHttpSessionConfig.java[tags=class] +---- + +It is important to note that no infrastructure for session expirations is configured for you out of the box. +This is because things like session expiration are highly implementation dependent. +This means if you require cleaning up expired sessions, you are responsible for cleaning up the expired sessions. + +[[api-redisoperationssessionrepository]] +=== RedisOperationsSessionRepository + +`RedisOperationsSessionRepository` is a `SessionRepository` that is implemented using Spring Data's `RedisOperations`. +In a web environment, this is typically used in combination with `SessionRepositoryFilter`. +The implementation supports `SessionDestroyedEvent` and `SessionCreatedEvent` through `SessionMessageListener`. + +[[api-redisoperationssessionrepository-new]] +==== Instantiating a RedisOperationsSessionRepository + +A typical example of how to create a new instance can be seen below: + +[source,java,indent=0] +---- +include::{indexdoc-tests}[tags=new-redisoperationssessionrepository] +---- + +For additional information on how to create a `RedisConnectionFactory`, refer to the Spring Data Redis Reference. + +[[api-redisoperationssessionrepository-config]] +==== EnableRedisHttpSession + +In a web environment, the simplest way to create a new `RedisOperationsSessionRepository` is to use `@EnableRedisHttpSession`. +Complete example usage can be found in the <> +You can use the following attributes to customize the configuration: + +* **maxInactiveIntervalInSeconds** - the amount of time before the session will expire in seconds +* **redisNamespace** - allows configuring an application specific namespace for the sessions. Redis keys and channel ids will start with the prefix of `spring:session::`. +* **redisFlushMode** - allows specifying when data will be written to Redis. The default is only when `save` is invoked on `SessionRepository`. +A value of `RedisFlushMode.IMMEDIATE` will write to Redis as soon as possible. + +===== Custom RedisSerializer + +You can customize the serialization by creating a Bean named `springSessionDefaultRedisSerializer` that implements `RedisSerializer`. + +==== Redis TaskExecutor + +`RedisOperationsSessionRepository` is subscribed to receive events from redis using a `RedisMessageListenerContainer`. +You can customize the way those events are dispatched, by creating a Bean named `springSessionRedisTaskExecutor` and/or a Bean `springSessionRedisSubscriptionExecutor`. +More details on configuring redis task executors can be found http://docs.spring.io/spring-data-redis/docs/current/reference/html/#redis:pubsub:subscribe:containers[here]. + +[[api-redisoperationssessionrepository-storage]] +==== Storage Details + +The sections below outline how Redis is updated for each operation. +An example of creating a new session can be found below. +The subsequent sections describe the details. + +---- +HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 \ + maxInactiveInterval 1800 \ + lastAccessedTime 1404360000000 \ + sessionAttr:attrName someAttrValue \ + sessionAttr2:attrName someAttrValue2 +EXPIRE spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe 2100 +APPEND spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe "" +EXPIRE spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe 1800 +SADD spring:session:expirations:1439245080000 expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe +EXPIRE spring:session:expirations1439245080000 2100 +---- + +===== Saving a Session + +Each session is stored in Redis as a Hash. +Each session is set and updated using the HMSET command. +An example of how each session is stored can be seen below. + + +---- +HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 \ + maxInactiveInterval 1800 \ + lastAccessedTime 1404360000000 \ + sessionAttr:attrName someAttrValue \ + sessionAttr2:attrName someAttrValue2 +---- + +In this example, the session following statements are true about the session: + +* The session id is 33fdd1b6-b496-4b33-9f7d-df96679d32fe +* The session was created at 1404360000000 in milliseconds since midnight of 1/1/1970 GMT. +* The session expires in 1800 seconds (30 minutes). +* The session was last accessed at 1404360000000 in milliseconds since midnight of 1/1/1970 GMT. +* The session has two attributes. +The first is "attrName" with the value of "someAttrValue". +The second session attribute is named "attrName2" with the value of "someAttrValue2". + +[[api-redisoperationssessionrepository-writes]] +===== Optimized Writes + +The `Session` instances managed by `RedisOperationsSessionRepository` keeps track of the properties that have changed and only updates those. +This means if an attribute is written once and read many times we only need to write that attribute once. +For example, assume the session attribute "sessionAttr2" from earlier was updated. +The following would be executed upon saving: + +---- +HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe sessionAttr:attrName2 newValue +---- + +[[api-redisoperationssessionrepository-expiration]] +===== Session Expiration + +An expiration is associated to each session using the EXPIRE command based upon the `ExpiringSession.getMaxInactiveInterval()`. +For example: + +---- +EXPIRE spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe 2100 +---- + +You will note that the expiration that is set is 5 minutes after the session actually expires. +This is necessary so that the value of the session can be accessed when the session expires. +An expiration is set on the session itself five minutes after it actually expires to ensure it is cleaned up, but only after we perform any necessary processing. + +[NOTE] +==== +The `SessionRepository.getSession(String)` method ensures that no expired sessions will be returned. +This means there is no need to check the expiration before using a session. +==== + +Spring Session relies on the delete and expired http://redis.io/topics/notifications[keyspace notifications] from Redis to fire a <> and <> respectively. +It is the `SessionDeletedEvent` or `SessionExpiredEvent` that ensures resources associated with the Session are cleaned up. +For example, when using Spring Session's WebSocket support the Redis expired or delete event is what triggers any WebSocket connections associated with the session to be closed. + +Expiration is not tracked directly on the session key itself since this would mean the session data would no longer be available. Instead a special session expires key is used. In our example the expires key is: + +---- +APPEND spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe "" +EXPIRE spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe 1800 +---- + +When a session expires key is deleted or expires, the keyspace notification triggers a lookup of the actual session and a SessionDestroyedEvent is fired. + +One problem with relying on Redis expiration exclusively is that Redis makes no guarantee of when the expired event will be fired if they key has not been accessed. +Specifically the background task that Redis uses to clean up expired keys is a low priority task and may not trigger the key expiration. +For additional details see http://redis.io/topics/notifications[Timing of expired events] section in the Redis documentation. + +To circumvent the fact that expired events are not guaranteed to happen we can ensure that each key is accessed when it is expected to expire. +This means that if the TTL is expired on the key, Redis will remove the key and fire the expired event when we try to access they key. + +For this reason, each session expiration is also tracked to the nearest minute. +This allows a background task to access the potentially expired sessions to ensure that Redis expired events are fired in a more deterministic fashion. +For example: + +---- +SADD spring:session:expirations:1439245080000 expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe +EXPIRE spring:session:expirations1439245080000 2100 +---- + +The background task will then use these mappings to explicitly request each key. +By accessing they key, rather than deleting it, we ensure that Redis deletes the key for us only if the TTL is expired. + +[NOTE] +==== +We do not explicitly delete the keys since in some instances there may be a race condition that incorrectly identifies a key as expired when it is not. +Short of using distributed locks (which would kill our performance) there is no way to ensure the consistency of the expiration mapping. +By simply accessing the key, we ensure that the key is only removed if the TTL on that key is expired. +==== + + +[[api-redisoperationssessionrepository-sessiondestroyedevent]] +==== SessionDeletedEvent and SessionExpiredEvent + +`SessionDeletedEvent` and `SessionExpiredEvent` are both types of `SessionDestroyedEvent`. + +`RedisOperationsSessionRepository` supports firing a `SessionDeletedEvent` whenever a `Session` is deleted or a `SessionExpiredEvent` when it expires. +This is necessary to ensure resources associated with the `Session` are properly cleaned up. + +For example, when integrating with WebSockets the `SessionDestroyedEvent` is in charge of closing any active WebSocket connections. + +Firing `SessionDeletedEvent` or `SessionExpiredEvent` is made available through the `SessionMessageListener` which listens to http://redis.io/topics/notifications[Redis Keyspace events]. +In order for this to work, Redis Keyspace events for Generic commands and Expired events needs to be enabled. +For example: + +[source,bash] +---- +redis-cli config set notify-keyspace-events Egx +---- + +If you are using `@EnableRedisHttpSession` the `SessionMessageListener` and enabling the necessary Redis Keyspace events is done automatically. +However, in a secured Redis enviornment the config command is disabled. +This means that Spring Session cannot configure Redis Keyspace events for you. +To disable the automatic configuration add `ConfigureRedisAction.NO_OP` as a bean. + +For example, Java Configuration can use the following: + +[source,java,indent=0] +---- +include::{docs-test-dir}docs/RedisHttpSessionConfigurationNoOpConfigureRedisActionTests.java[tags=configure-redis-action] +---- + +XML Configuration can use the following: + +[source,xml,indent=0] +---- +include::{docs-test-resources-dir}docs/HttpSessionConfigurationNoOpConfigureRedisActionXmlTests-context.xml[tags=configure-redis-action] +---- + +[[api-redisoperationssessionrepository-sessioncreatedevent]] +==== SessionCreatedEvent + +When a session is created an event is sent to Redis with the channel of `spring:session:channel:created:33fdd1b6-b496-4b33-9f7d-df96679d32fe` +such that `33fdd1b6-b496-4b33-9f7d-df96679d32fe` is the session id. The body of the event will be the session that was created. + +If registered as a MessageListener (default), then `RedisOperationsSessionRepository` will then translate the Redis message into a `SessionCreatedEvent`. + +[[api-redisoperationssessionrepository-cli]] +==== Viewing the Session in Redis + +After http://redis.io/topics/quickstart[installing redis-cli], you can inspect the values in Redis http://redis.io/commands#hash[using the redis-cli]. +For example, enter the following into a terminal: + +[source,bash] +---- +$ redis-cli +redis 127.0.0.1:6379> keys * +1) "spring:session:sessions:4fc39ce3-63b3-4e17-b1c4-5e1ed96fb021" <1> +2) "spring:session:expirations:1418772300000" <2> +---- + +<1> The suffix of this key is the session identifier of the Spring Session. +<2> This key contains all the session ids that should be deleted at the time `1418772300000`. + +You can also view the attributes of each session. + +[source,bash] +---- +redis 127.0.0.1:6379> hkeys spring:session:sessions:4fc39ce3-63b3-4e17-b1c4-5e1ed96fb021 +1) "lastAccessedTime" +2) "creationTime" +3) "maxInactiveInterval" +4) "sessionAttr:username" +redis 127.0.0.1:6379> hget spring:session:sessions:4fc39ce3-63b3-4e17-b1c4-5e1ed96fb021 sessionAttr:username +"\xac\xed\x00\x05t\x00\x03rob" +---- + +[[api-gemfireoperationssessionrepository]] +=== GemFireOperationsSessionRepository + +`GemFireOperationsSessionRepository` is a `SessionRepository` that is implemented using Spring Data's `GemFireOperationsSessionRepository`. +In a web environment, this is typically used in combination with `SessionRepositoryFilter`. +The implementation supports `SessionDestroyedEvent` and `SessionCreatedEvent` through `SessionMessageListener`. + +[[api-gemfireoperationssessionrepository-indexing]] +==== Using Indexes with GemFire + +While best practices concerning the proper definition of indexes that positively impact GemFire's performance is beyond +the scope of this document, it is important to realize that Spring Session Data GemFire creates and uses indexes to +query and find Sessions efficiently. + +Out-of-the-box, Spring Session Data GemFire creates 1 Hash-typed Index on the principal name. There are two different buit in +strategies for finding the principal name. The first strategy is that the value of the session attribute with the name +`FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME` will be indexed to the same index name. For example: + +[source,java,indent=0] +---- +include::{docs-itest-dir}docs/http/HttpSessionGemFireIndexingITests.java[tags=findbyindexname-set] +include::{docs-itest-dir}docs/http/HttpSessionGemFireIndexingITests.java[tags=findbyindexname-get] +---- + +[[api-gemfireoperationssessionrepository-indexing-security]] +==== Using Indexes with GemFire & Spring Security + +Alternatively, Spring Session Data GemFire will map Spring Security's current `Authentication#getName()` to the index +`FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME`. For example, if you are using Spring Security you can +find the current user's sessions using: + +[source,java,indent=0] +---- +include::{docs-itest-dir}docs/http/HttpSessionGemFireIndexingITests.java[tags=findbyspringsecurityindexname-context] +include::{docs-itest-dir}docs/http/HttpSessionGemFireIndexingITests.java[tags=findbyspringsecurityindexname-get] +---- + +[[api-gemfireoperationssessionrepository-indexing-custom]] +==== Using Custom Indexes with GemFire + +This enables developers using the `GemFireOperationsSessionRepository` programmatically to query and find all Sessions +with a given principal name efficiently. + +Additionally, Spring Session Data GemFire will create a Range-based Index on the implementing Session's Map-type +`attributes` property (i.e. on any arbitrary Session attribute) when a developer identifies 1 or more named Session +attributes that should be indexed by GemFire. + +Sessions attributes to index can be specified with the `indexableSessionAttributes` attribute on the `@EnableGemFireHttpSession` +annotation. A developer adds this annotation to their Spring application `@Configuration` class when s/he wishes to +enable Spring Session support for HttpSession backed by GemFire. + +For example, the following configuration: + +[source,java,indent=0] +---- +include::{docs-itest-dir}docs/http/gemfire/indexablesessionattributes/GemFireHttpSessionConfig.java[tags=class-start] + // ... +} +---- + +will allow searching for sessions using the following: + +[source,java,indent=0] +---- +include::{docs-itest-dir}docs/http/gemfire/indexablesessionattributes/HttpSessionGemFireIndexingCustomITests.java[tags=findbyindexname-set] +include::{docs-itest-dir}docs/http/gemfire/indexablesessionattributes/HttpSessionGemFireIndexingCustomITests.java[tags=findbyindexname-get] +---- + +NOTE: Only Session attribute names identified in the `@EnableGemFireHttpSession` annotation's `indexableSessionAttributes` +attribute will have an Index defined. All other Session attributes will not be indexed. + +However, there is one caveat. Any values stored in indexable Session attributes must implement the `java.lang.Comparable` +interface. If those object values do not implement `Comparable`, then GemFire will throw an error on startup when the +Index is defined for Regions with persistent Session data, or when an attempt is made at runtime to assign the indexable +Session attribute a value that is not `Comparable` and the Session is saved to GemFire. + +NOTE: Any Session attribute that is not indexed may store non-`Comparable` values. + +To learn more about GemFire's Range-based Indexes, see http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/query_index/creating_map_indexes.html[Creating Indexes on Map Fields]. + +To learn more about GemFire Indexing in general, see http://gemfire.docs.pivotal.io/docs-gemfire/latest/developing/query_index/query_index.html[Working with Indexes]. + + +[[api-mapsessionrepository]] +=== MapSessionRepository + +The `MapSessionRepository` allows for persisting `ExpiringSession` in a `Map` with the key being the `ExpiringSession` id and the value being the `ExpiringSession`. +The implementation can be used with a `ConcurrentHashMap` as a testing or convenience mechanism. +Alternatively, it can be used with distributed `Map` implementations. For example, it can be used with Hazelcast. + +[[api-mapsessionrepository-new]] +==== Instantiating MapSessionRepository + +Creating a new instance is as simple as: + +[source,java,indent=0] +---- +include::{indexdoc-tests}[tags=new-mapsessionrepository] +---- + +[[api-mapsessionrepository-hazelcast]] +==== Using Spring Session and Hazlecast + +The <> is a complete application demonstrating using Spring Session with Hazelcast. + +To run it use the following: + + ./gradlew :samples:hazelcast:tomcatRun + +The <> is a complete application demonstrating using Spring Session with Hazelcast and Spring Security. + +It includes example Hazelcast `MapListener` implementations that support firing `SessionCreatedEvent`, `SessionDeletedEvent` and `SessionExpiredEvent`. + +To run it use the following: + + ./gradlew :samples:hazelcast-spring:tomcatRun + +[[api-jdbcoperationssessionrepository]] +=== JdbcOperationsSessionRepository + +`JdbcOperationsSessionRepository` is a `SessionRepository` implementation that uses Spring's `JdbcOperations` to store sessions in a relational database. +In a web environment, this is typically used in combination with `SessionRepositoryFilter`. +Please note that this implementation does not support publishing of session events. + +[[api-jdbcoperationssessionrepository-new]] +==== Instantiating a JdbcOperationsSessionRepository + +A typical example of how to create a new instance can be seen below: + +[source,java,indent=0] +---- +include::{indexdoc-tests}[tags=new-jdbcoperationssessionrepository] +---- + +For additional information on how to create and configure `JdbcTemplate` and `PlatformTransactionManager`, refer to the http://docs.spring.io/spring/docs/current/spring-framework-reference/html/spring-data-tier.html[Spring Framework Reference Documentation]. + +[[api-jdbcoperationssessionrepository-config]] +==== EnableJdbcHttpSession + +In a web environment, the simplest way to create a new `JdbcOperationsSessionRepository` is to use `@EnableJdbcHttpSession`. +Complete example usage can be found in the <> +You can use the following attributes to customize the configuration: + +* **tableName** - the name of database table used by Spring Session to store sessions +* **maxInactiveIntervalInSeconds** - the amount of time before the session will expire in seconds + +===== Custom LobHandler + +You can customize the BLOB handling by creating a Bean named `springSessionLobHandler` that implements `LobHandler`. + +===== Custom ConversionService + +You can customize the default serialization and deserialization of the session by providing a `ConversionService` instance. +When working in a typical Spring environment, the default `ConversionService` Bean (named `conversionService`) will be automatically picked up and used for serialization and deserialization. +However, you can override the default `ConversionService` by providing a Bean named `springSessionConversionService`. + +[[api-jdbcoperationssessionrepository-storage]] +==== Storage Details + +By default, this implementation uses `SPRING_SESSION` and `SPRING_SESSION_ATTRIBUTES` tables to store sessions. +Note that the table name can be easily customized as already described. In that case the table used to store attributes will be named using the provided table name, suffixed with `_ATTRIBUTES`. +If further customizations are needed, SQL queries used by the repository can be customized using `set*Query` setter methods. In this case you need to manually configure the `sessionRepository` bean. + +Due to the differences between the various database vendors, especially when it comes to storing binary data, make sure to use SQL script specific to your database. +Scripts for most major database vendors are packaged as `org/springframework/session/jdbc/schema-\*.sql`, where `*` is the target database type. + +For example, with PostgreSQL database you would use the following schema script: + +[source,sql,indent=0] +---- +include::{session-main-resources-dir}org/springframework/session/jdbc/schema-postgresql.sql[] +---- + +And with MySQL database: + +[source,sql,indent=0] +---- +include::{session-main-resources-dir}org/springframework/session/jdbc/schema-mysql.sql[] +---- + +==== Transaction management + +All JDBC operations in `JdbcOperationsSessionRepository` are executed in a transactional manner. +Transactions are executed with propagation set to `REQUIRES_NEW` in order to avoid unexpected behavior due to interference with existing transactions (for example, executing `save` operation in a thread that already participates in a read-only transaction). + +[[api-hazelcastsessionrepository]] +=== HazelcastSessionRepository + +`HazelcastSessionRepository` is a `SessionRepository` implementation that stores sessions in Hazelcast's distributed `IMap`. +In a web environment, this is typically used in combination with `SessionRepositoryFilter`. + +[[api-hazelcastsessionrepository-new]] +==== Instantiating a HazelcastSessionRepository + +A typical example of how to create a new instance can be seen below: + +[source,java,indent=0] +---- +include::{indexdoc-tests}[tags=new-hazelcastsessionrepository] +---- + +For additional information on how to create and configure Hazelcast instance, refer to the http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#hazelcast-configuration[Hazelcast documentation]. + +[[api-enablehazelcasthttpsession]] +==== EnableHazelcastHttpSession + +If you wish to use http://hazelcast.org/[Hazelcast] as your backing source for the `SessionRepository`, then the `@EnableHazelcastHttpSession` annotation +can be added to an `@Configuration` class. This extends the functionality provided by the `@EnableSpringHttpSession` annotation but makes the `SessionRepository` for you in Hazelcast. +You must provide a single `HazelcastInstance` bean for the configuration to work. +Complete configuration example can be found in the <> + +[[api-enablehazelcasthttpsession-customize]] +==== Basic Customization +You can use the following attributes on `@EnableHazelcastHttpSession` to customize the configuration: + +* **maxInactiveIntervalInSeconds** - the amount of time before the session will expire in seconds. Default is 1800 seconds (30 minutes) +* **sessionMapName** - the name of the distributed `Map` that will be used in Hazelcast to store the session data. + +[[api-enablehazelcasthttpsession-events]] +==== Session Events +Using a `MapListener` to respond to entries being added, evicted, and removed from the distributed `Map`, these events will trigger +publishing `SessionCreatedEvent`, `SessionExpiredEvent`, and `SessionDeletedEvent` events respectively using the `ApplicationEventPublisher`. + +[[api-enablehazelcasthttpsession-storage]] +==== Storage Details + +Sessions will be stored in a distributed `IMap` in Hazelcast. +The `IMap` interface methods will be used to `get()` and `put()` Sessions. +Additionally, `values()` method is used to support `FindByIndexNameSessionRepository#findByIndexNameAndIndexValue` operation, together with appropriate `ValueExtractor` that needs to be registered with Hazelcast. Refer to <> for more details on this configuration. +The expiration of a session in the `IMap` is handled by Hazelcast's support for setting the time to live on an entry when it is `put()` into the `IMap`. Entries (sessions) that have been idle longer than the time to live will be automatically removed from the `IMap`. + +You shouldn't need to configure any settings such as `max-idle-seconds` or `time-to-live-seconds` for the `IMap` within the Hazelcast configuration. + +Note that if you use Hazelcast's `MapStore` to persist your sessions `IMap` there are some limitations when reloading the sessions from `MapStore`: + +* reload triggers `EntryAddedListener` which results in `SessionCreatedEvent` being re-published +* reload uses default TTL for a given `IMap` which results in sessions losing their original TTL + +[[community]] +== Spring Session Community + +We are glad to consider you a part of our community. +Please find additional information below. + +[[community-support]] +=== Support + +You can get help by asking questions on http://stackoverflow.com/questions/tagged/spring-session[StackOverflow with the tag spring-session]. +Similarly we encourage helping others by answering questions on StackOverflow. + +[[community-source]] +=== Source Code + +Our source code can be found on github at https://github.com/spring-projects/spring-session/ + +[[community-issues]] +=== Issue Tracking + +We track issues in github issues at https://github.com/spring-projects/spring-session/issues + +[[community-contributing]] +=== Contributing + +We appreciate https://help.github.com/articles/using-pull-requests/[Pull Requests]. + +[[community-license]] +=== License + +Spring Session is Open Source software released under the http://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0 license]. + +[[community-extensions]] +=== Community Extensions +https://github.com/maseev/spring-session-orientdb[Spring Session OrientDB] +http://infinispan.org/docs/dev/user_guide/user_guide.html#externalizing_session_using_spring_session[Spring Session Infinispan] + +[[minimum-requirements]] +== Minimum Requirements + +The minimum requirements for Spring Session are: + +* Java 5+ +* If you are running in a Servlet Container (not required), Servlet 2.5+ +* If you are using other Spring libraries (not required), the minimum required version is Spring 3.2.14. +While we re-run all unit tests against Spring 3.2.x, we recommend using the latest Spring 4.x version when possible. +* `@EnableRedisHttpSession` requires Redis 2.8+. This is necessary to support <> + +[NOTE] +==== +At its core Spring Session only has a required dependency on `spring-jcl`. +For an example of using Spring Session without any other Spring dependencies, refer to the <> application. +==== diff --git a/docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java b/docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java new file mode 100644 index 0000000..20510cc --- /dev/null +++ b/docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java @@ -0,0 +1,102 @@ +/* + * Copyright 2014-2016 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 docs.http; + +import java.util.Map; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.gemfire.config.annotation.PeerCacheApplication; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.security.web.context.HttpSessionSecurityContextRepository; +import org.springframework.session.ExpiringSession; +import org.springframework.session.FindByIndexNameSessionRepository; +import org.springframework.session.data.gemfire.GemFireOperationsSessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Rob Winch + * @author John Blum + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = HttpSessionGemFireIndexingITests.Config.class) +public class HttpSessionGemFireIndexingITests { + + @Autowired + private GemFireOperationsSessionRepository sessionRepository; + + @Test + public void findByIndexName() { + ExpiringSession session = this.sessionRepository.createSession(); + String username = "HttpSessionGemFireIndexingITests-findByIndexName-username"; + + // tag::findbyindexname-set[] + String indexName = FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME; + + session.setAttribute(indexName, username); + // end::findbyindexname-set[] + + this.sessionRepository.save(session); + + // tag::findbyindexname-get[] + Map idToSessions = + this.sessionRepository.findByIndexNameAndIndexValue(indexName, username); + // end::findbyindexname-get[] + + assertThat(idToSessions.keySet()).containsOnly(session.getId()); + + this.sessionRepository.delete(session.getId()); + } + + @Test + @WithMockUser("HttpSessionGemFireIndexingITests-findBySpringSecurityIndexName") + public void findBySpringSecurityIndexName() { + ExpiringSession session = this.sessionRepository.createSession(); + + // tag::findbyspringsecurityindexname-context[] + SecurityContext context = SecurityContextHolder.getContext(); + Authentication authentication = context.getAuthentication(); + // end::findbyspringsecurityindexname-context[] + + session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, context); + this.sessionRepository.save(session); + + // tag::findbyspringsecurityindexname-get[] + String indexName = FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME; + Map idToSessions = + this.sessionRepository.findByIndexNameAndIndexValue(indexName, authentication.getName()); + // end::findbyspringsecurityindexname-get[] + + assertThat(idToSessions.keySet()).containsOnly(session.getId()); + + this.sessionRepository.delete(session.getId()); + } + + @PeerCacheApplication(name = "HttpSessionGemFireIndexingITests", logLevel = "error") + @EnableGemFireHttpSession(regionName = "HttpSessionGemFireIndexingTestRegion") + static class Config { + } +} diff --git a/docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/HttpSessionGemFireIndexingCustomITests.java b/docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/HttpSessionGemFireIndexingCustomITests.java new file mode 100644 index 0000000..1d96d02 --- /dev/null +++ b/docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/HttpSessionGemFireIndexingCustomITests.java @@ -0,0 +1,72 @@ +/* + * Copyright 2014-2016 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 docs.http.gemfire.indexablesessionattributes; + +import java.util.Map; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.gemfire.config.annotation.PeerCacheApplication; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.GemFireOperationsSessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Rob Winch + * @author John Blum + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = HttpSessionGemFireIndexingCustomITests.Config.class) +public class HttpSessionGemFireIndexingCustomITests { + + @Autowired + private GemFireOperationsSessionRepository sessionRepository; + + @Test + public void findByIndexName() { + ExpiringSession session = this.sessionRepository.createSession(); + String attrValue = "HttpSessionGemFireIndexingCustomITests-findByIndexName"; + + // tag::findbyindexname-set[] + String indexName = "name1"; + session.setAttribute(indexName, attrValue); + // end::findbyindexname-set[] + + this.sessionRepository.save(session); + + // tag::findbyindexname-get[] + Map idToSessions = + this.sessionRepository.findByIndexNameAndIndexValue(indexName, attrValue); + // end::findbyindexname-get[] + + assertThat(idToSessions.keySet()).containsOnly(session.getId()); + + this.sessionRepository.delete(session.getId()); + } + + @PeerCacheApplication(name = "HttpSessionGemFireIndexingCustomITests", logLevel = "error") + @EnableGemFireHttpSession(indexableSessionAttributes = { "name1", "name2", "name3" }, + regionName = "HttpSessionGemFireIndexingCustomTestRegion") + static class Config { + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..d1aa81c --- /dev/null +++ b/gradle.properties @@ -0,0 +1,3 @@ +springBootVersion=2.0.0.BUILD-SNAPSHOT +version=2.0.0.BUILD-SNAPSHOT +springIoVersion=Cairo-BUILD-SNAPSHOT diff --git a/gradle/spring3.gradle b/gradle/spring3.gradle new file mode 100644 index 0000000..651b9e4 --- /dev/null +++ b/gradle/spring3.gradle @@ -0,0 +1,39 @@ +configurations { + spring3TestRuntime.extendsFrom testRuntime +} + +configurations.spring3TestRuntime { + resolutionStrategy.eachDependency { DependencyResolveDetails details -> + if (details.requested.group == 'org.springframework' + && details.requested.name != 'spring-websocket' + && details.requested.name != 'spring-messaging') { + details.useVersion '3.2.18.RELEASE' + } + if (details.requested.group == 'org.springframework.data') { + if (details.requested.name == 'spring-data-commons') { + details.useVersion '1.12.1.RELEASE' + } + if (details.requested.name == 'spring-data-gemfire') { + details.useVersion '1.8.1.RELEASE' + } + if (details.requested.name == 'spring-data-keyvalue') { + details.useVersion '1.1.1.RELEASE' + } + if (details.requested.name == 'spring-data-redis') { + details.useVersion '1.7.1.RELEASE' + } + } + } +} + +task spring3Test(type: Test) { + jvmArgs = ['-ea', '-Xmx500m', '-XX:MaxPermSize=128M'] + classpath = sourceSets.test.output + sourceSets.main.output + configurations.spring3TestRuntime + exclude "org/springframework/session/web/socket/**" + reports { + html.destination = project.file("$buildDir/spring3-test-results/") + junitXml.destination = project.file("$buildDir/reports/spring3-tests/") + } +} + +//check.dependsOn spring3Test diff --git a/samples/boot/gemfire/spring-session-sample-boot-gemfire.gradle b/samples/boot/gemfire/spring-session-sample-boot-gemfire.gradle new file mode 100644 index 0000000..7f9c2fb --- /dev/null +++ b/samples/boot/gemfire/spring-session-sample-boot-gemfire.gradle @@ -0,0 +1,87 @@ +apply plugin: 'io.spring.convention.spring-sample-boot' +apply plugin: "application" + +dependencies { + compile project(':spring-session-data-geode') + compile "org.springframework.boot:spring-boot-starter-thymeleaf" + compile "org.springframework.boot:spring-boot-starter-web" + compile "org.webjars:bootstrap" + compile "org.webjars:webjars-locator" + + runtime "org.springframework.shell:spring-shell" + + testCompile "org.springframework.boot:spring-boot-starter-test" + + integrationTestCompile seleniumDependencies + + integrationTestRuntime "org.springframework.shell:spring-shell" +} + +run { + doFirst { + mainClassName = 'sample.server.GemFireServer' + } +} + +bootJar { + mainClass = 'sample.client.Application' +} + +task runGemFireServer() { + doLast { + ext.port = reservePort() + + println "Starting GemFire Server on port [$port] ..." + + def out = new StringBuilder() + def err = new StringBuilder() + + String classpath = sourceSets.main.runtimeClasspath.collect { it }.join(File.pathSeparator) + + String[] commandLine = [ + 'java', '-server', '-ea', '-classpath', classpath, + //"-Dgemfire.log-file=gemfire-server.log", + //"-Dgemfire.log-level=config", + "-Dspring-session-data-gemfire.cache.server.port=$port", + "-Dspring-session-data-gemfire.log.level=" + + System.getProperty('spring-session-data-gemfire.log.level', 'warning'), + 'sample.server.GemFireServer' + ] + + //println commandLine + + ext.process = commandLine.execute() + //ext.process = new ProcessBuilder().command(commandLine).redirectErrorStream(true).start(); + + ext.process.consumeProcessOutput(out, err) + + //println 'OUT: ' + out + //println 'ERR: ' + err + } +} + + +integrationTest { + dependsOn runGemFireServer + doFirst { + def port = reservePort() + systemProperties['management.port'] = 0 + systemProperties['server.port'] = port + //systemProperties['gemfire.log-file'] = "gemfire-client.log" + //systemProperties['gemfire.log-level'] = "config" + systemProperties['spring-session-data-gemfire.cache.server.port'] = runGemFireServer.port + systemProperties['spring-session-data-gemfire.log.level'] = System.getProperty("spring-session-data-gemfire.log.level", "warning") + } + doLast { + println 'Stopping GemFire Server...' + runGemFireServer.process?.destroyForcibly() + } +} + + +def reservePort() { + def socket = new ServerSocket(0) + def result = socket.localPort + socket.close() + result +} diff --git a/samples/boot/gemfire/src/integration-test/java/sample/AttributeTests.java b/samples/boot/gemfire/src/integration-test/java/sample/AttributeTests.java new file mode 100644 index 0000000..6db2fac --- /dev/null +++ b/samples/boot/gemfire/src/integration-test/java/sample/AttributeTests.java @@ -0,0 +1,76 @@ +/* + * Copyright 2014-2017 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; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openqa.selenium.WebDriver; +import sample.client.Application; +import sample.pages.HomePage; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.MOCK) +@AutoConfigureMockMvc +public class AttributeTests { + + @Autowired + private MockMvc mockMvc; + + private WebDriver driver; + + @Before + public void setup() { + this.driver = MockMvcHtmlUnitDriverBuilder.mockMvcSetup(this.mockMvc).build(); + } + + @After + public void tearDown() { + this.driver.quit(); + } + + @Test + public void noAttributes() { + HomePage home = HomePage.go(this.driver, HomePage.class); + assertThat(home.attributes().size()).isEqualTo(0); + } + + @Test + public void createAttribute() { + HomePage home = HomePage.go(this.driver, HomePage.class); + home = home.form() + .attributeName("a") + .attributeValue("b") + .submit(HomePage.class); + assertThat(home.attributes()).extracting("attributeName").containsOnly("requestCount", "a"); + assertThat(home.attributes()).extracting("attributeValue").containsOnly("1", "b"); + } +} diff --git a/samples/boot/gemfire/src/integration-test/java/sample/pages/HomePage.java b/samples/boot/gemfire/src/integration-test/java/sample/pages/HomePage.java new file mode 100644 index 0000000..0f43fda --- /dev/null +++ b/samples/boot/gemfire/src/integration-test/java/sample/pages/HomePage.java @@ -0,0 +1,151 @@ +/* + * Copyright 2014-2017 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.pages; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.openqa.selenium.By; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.SearchContext; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.DefaultElementLocatorFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + * @author Rob Winch + */ +public class HomePage { + + private WebDriver driver; + + @FindBy(tagName = "form") + WebElement form; + + @FindBy(css = "table tbody tr") + List trs; + + List attributes; + + public HomePage(WebDriver driver) { + this.driver = driver; + this.attributes = new ArrayList(); + } + + private static void get(WebDriver driver, String get) { + String baseUrl = "http://localhost:" + System.getProperty("app.port", "8080"); + driver.get(baseUrl + get); + } + + public static T go(WebDriver driver, Class page) { + get(driver, "/"); + return PageFactory.initElements(driver, page); + } + + public void containCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").contains(cookieName); + } + + public void doesNotContainCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").doesNotContain(cookieName); + } + + public HomePage logout() { + WebElement logout = this.driver + .findElement(By.cssSelector("input[type=\"submit\"]")); + logout.click(); + return PageFactory.initElements(this.driver, HomePage.class); + } + + public List attributes() { + List rows = new ArrayList(); + for (WebElement tr : this.trs) { + rows.add(new Attribute(tr)); + } + this.attributes.addAll(rows); + return this.attributes; + } + + public Form form() { + return new Form(this.form); + } + + public class Form { + @FindBy(name = "attributeName") + WebElement attributeName; + + @FindBy(name = "attributeValue") + WebElement attributeValue; + + @FindBy(css = "input[type=\"submit\"]") + WebElement submit; + + public Form(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + public Form attributeName(String text) { + this.attributeName.sendKeys(text); + return this; + } + + public Form attributeValue(String text) { + this.attributeValue.sendKeys(text); + return this; + } + + public T submit(Class page) { + this.submit.click(); + return PageFactory.initElements(HomePage.this.driver, page); + } + } + + public static class Attribute { + @FindBy(xpath = ".//td[1]") + WebElement attributeName; + + @FindBy(xpath = ".//td[2]") + WebElement attributeValue; + + public Attribute(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + /** + * @return the attributeName + */ + public String getAttributeName() { + return this.attributeName.getText(); + } + + /** + * @return the attributeValue + */ + public String getAttributeValue() { + return this.attributeValue.getText(); + } + } + +} diff --git a/samples/boot/gemfire/src/main/java/sample/client/Application.java b/samples/boot/gemfire/src/main/java/sample/client/Application.java new file mode 100644 index 0000000..b296d2a --- /dev/null +++ b/samples/boot/gemfire/src/main/java/sample/client/Application.java @@ -0,0 +1,336 @@ +/* + * Copyright 2014-2016 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.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +import javax.servlet.http.HttpSession; + +import org.apache.geode.cache.Region; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.Pool; +import org.apache.geode.cache.client.PoolManager; +import org.apache.geode.cache.client.internal.PoolImpl; +import org.apache.geode.management.membership.ClientMembership; +import org.apache.geode.management.membership.ClientMembershipEvent; +import org.apache.geode.management.membership.ClientMembershipListenerAdapter; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; +import org.springframework.data.gemfire.config.xml.GemfireConstants; +import org.springframework.data.gemfire.support.ConnectionEndpoint; +import org.springframework.data.gemfire.util.CollectionUtils; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * A Spring Boot, GemFire cache client, web application that reveals the current state of the HTTP Session. + * + * @author John Blum + * @see javax.servlet.http.HttpSession + * @see org.springframework.boot.SpringApplication + * @see org.springframework.boot.autoconfigure.SpringBootApplication + * @see org.springframework.context.annotation.Bean + * @see org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession + * @see org.springframework.stereotype.Controller + * @see org.apache.geode.cache.client.ClientCache + * @see org.apache.geode.cache.client.Pool + * @since 1.2.1 + */ +// tag::class[] +@SpringBootApplication +@EnableGemFireHttpSession(poolName = "DEFAULT")// <1> +@Controller +public class Application { + + static final long DEFAULT_TIMEOUT = TimeUnit.SECONDS.toMillis(60); + + static final CountDownLatch LATCH = new CountDownLatch(1); + + static final String DEFAULT_GEMFIRE_LOG_LEVEL = "warning"; + static final String GEMFIRE_DEFAULT_POOL_NAME = "DEFAULT"; + static final String INDEX_TEMPLATE_VIEW_NAME = "index"; + static final String PING_RESPONSE = "PONG"; + static final String REQUEST_COUNT_ATTRIBUTE_NAME = "requestCount"; + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { // <2> + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", applicationName()); + //gemfireProperties.setProperty("log-file", "gemfire-client.log"); + gemfireProperties.setProperty("log-level", logLevel()); + + return gemfireProperties; + } + + String applicationName() { + return "spring-session-data-gemfire-boot-sample.".concat(getClass().getSimpleName()); + } + + String logLevel() { + return System.getProperty("spring-session-data-gemfire.log.level", DEFAULT_GEMFIRE_LOG_LEVEL); + } + + @Bean + ClientCacheFactoryBean gemfireCache( + @Value("${spring-session-data-gemfire.cache.server.host:localhost}") String host, + @Value("${spring-session-data-gemfire.cache.server.port:12480}") int port) { // <3> + + ClientCacheFactoryBean gemfireCache = new ClientCacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + // GemFire Pool settings <4> + gemfireCache.setKeepAlive(false); + gemfireCache.setPingInterval(TimeUnit.SECONDS.toMillis(5)); + gemfireCache.setReadTimeout(intValue(TimeUnit.SECONDS.toMillis(15))); + gemfireCache.setRetryAttempts(1); + gemfireCache.setSubscriptionEnabled(true); + gemfireCache.setThreadLocalConnections(false); + gemfireCache.setServers(Collections.singletonList(newConnectionEndpoint(host, port))); + + registerClientMembershipListener(); // <5> + + return gemfireCache; + } + + int intValue(Number number) { + return number.intValue(); + } + + ConnectionEndpoint newConnectionEndpoint(String host, int port) { + return new ConnectionEndpoint(host, port); + } + + void registerClientMembershipListener() { + ClientMembership.registerClientMembershipListener(new ClientMembershipListenerAdapter() { + @Override + public void memberJoined(ClientMembershipEvent event) { + LATCH.countDown(); + } + }); + } + + @Bean + BeanPostProcessor gemfireClientServerReadyBeanPostProcessor( + @Value("${spring-session-data-gemfire.cache.server.host:localhost}") final String host, + @Value("${spring-session-data-gemfire.cache.server.port:12480}") final int port) { // <5> + + return new BeanPostProcessor() { + + private final AtomicBoolean checkGemFireServerIsRunning = new AtomicBoolean(true); + private final AtomicReference defaultPool = new AtomicReference(null); + + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + if (shouldCheckWhetherGemFireServerIsRunning(bean, beanName)) { + try { + validateCacheClientNotified(); + validateCacheClientSubscriptionQueueConnectionEstablished(); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + return bean; + } + + private boolean shouldCheckWhetherGemFireServerIsRunning(Object bean, String beanName) { + return (isGemFireRegion(bean, beanName) + ? checkGemFireServerIsRunning.compareAndSet(true, false) + : whenGemFireCache(bean, beanName)); + } + + private boolean isGemFireRegion(Object bean, String beanName) { + return (GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME.equals(beanName) + || bean instanceof Region); + } + + private boolean whenGemFireCache(Object bean, String beanName) { + if (bean instanceof ClientCache) { + defaultPool.compareAndSet(null, ((ClientCache) bean).getDefaultPool()); + } + + return false; + } + + private void validateCacheClientNotified() throws InterruptedException { + boolean didNotTimeout = LATCH.await(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS); + + Assert.state(didNotTimeout, String.format( + "GemFire Cache Server failed to start on host [%s] and port [%d]", host, port)); + } + + @SuppressWarnings("all") + private void validateCacheClientSubscriptionQueueConnectionEstablished() throws InterruptedException { + boolean cacheClientSubscriptionQueueConnectionEstablished = false; + + Pool pool = defaultIfNull(this.defaultPool.get(), GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME, + GEMFIRE_DEFAULT_POOL_NAME); + + if (pool instanceof PoolImpl) { + long timeout = (System.currentTimeMillis() + DEFAULT_TIMEOUT); + + while (System.currentTimeMillis() < timeout + && !((PoolImpl) pool).isPrimaryUpdaterAlive()) { + + synchronized (pool) { + TimeUnit.MILLISECONDS.timedWait(pool, 500L); + } + + } + + cacheClientSubscriptionQueueConnectionEstablished |= + ((PoolImpl) pool).isPrimaryUpdaterAlive(); + } + + Assert.state(cacheClientSubscriptionQueueConnectionEstablished, String.format( + "Cache client subscription queue connection not established; GemFire Pool was [%s];" + + " GemFire Pool configuration was [locators = %s, servers = %s]", + pool, pool.getLocators(), pool.getServers())); + } + + private Pool defaultIfNull(Pool pool, String... poolNames) { + for (String poolName : poolNames) { + pool = (pool != null ? pool : PoolManager.find(poolName)); + } + + return pool; + } + + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + return bean; + } + }; + } + + @RequestMapping("/") + public String index() { // <6> + return INDEX_TEMPLATE_VIEW_NAME; + } + + @RequestMapping(method = RequestMethod.GET, path = "/ping") + @ResponseBody + public String ping() { // <7> + return PING_RESPONSE; + } + + @RequestMapping(method = RequestMethod.POST, path = "/session") + public String session(HttpSession session, ModelMap modelMap, + @RequestParam(name = "attributeName", required = false) String name, + @RequestParam(name = "attributeValue", required = false) String value) { // <8> + + modelMap.addAttribute("sessionAttributes", attributes(setAttribute(updateRequestCount(session), name, value))); + + return INDEX_TEMPLATE_VIEW_NAME; + } + // end::class[] + + /* (non-Javadoc) */ + @SuppressWarnings("all") + 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; + } + } + + /* (non-Javadoc) */ + Integer nullSafeIncrement(Integer value) { + return (nullSafeIntValue(value) + 1); + } + + /* (non-Javadoc) */ + int nullSafeIntValue(Number value) { + return (value != null ? value.intValue() : 0); + } + + /* (non-Javadoc) */ + HttpSession setAttribute(HttpSession session, String attributeName, String attributeValue) { + if (isSet(attributeName, attributeValue)) { + session.setAttribute(attributeName, attributeValue); + } + + return session; + } + + /* (non-Javadoc) */ + boolean isSet(String... values) { + boolean set = true; + + for (String value : values) { + set &= StringUtils.hasText(value); + } + + return set; + } + + /* (non-Javadoc) */ + Map attributes(HttpSession session) { + Map sessionAttributes = new HashMap(); + + for (String attributeName : toIterable(session.getAttributeNames())) { + sessionAttributes.put(attributeName, String.valueOf(session.getAttribute(attributeName))); + } + + return sessionAttributes; + } + + /* (non-Javadoc) */ + Iterable toIterable(final Enumeration enumeration) { + return new Iterable() { + public Iterator iterator() { + return (enumeration == null ? Collections.emptyIterator() + : CollectionUtils.toIterator(enumeration)); + } + }; + } +} diff --git a/samples/boot/gemfire/src/main/java/sample/server/GemFireServer.java b/samples/boot/gemfire/src/main/java/sample/server/GemFireServer.java new file mode 100644 index 0000000..0f65756 --- /dev/null +++ b/samples/boot/gemfire/src/main/java/sample/server/GemFireServer.java @@ -0,0 +1,110 @@ +/* + * Copyright 2014-2016 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.server; + +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.Cache; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.data.gemfire.server.CacheServerFactoryBean; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; + +/** + * A Spring Boot application bootstrapping a GemFire Cache Server JVM process. + * + * @author John Blum + * @see org.springframework.boot.SpringApplication + * @see org.springframework.boot.autoconfigure.SpringBootApplication + * @see org.springframework.context.annotation.Bean + * @see org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession + * @see org.apache.geode.cache.Cache + * @since 1.2.1 + */ +// tag::class[] +@SpringBootApplication +@EnableGemFireHttpSession(maxInactiveIntervalInSeconds = 20) // <1> +public class GemFireServer { + + static final String DEFAULT_GEMFIRE_LOG_LEVEL = "warning"; + + public static void main(String[] args) { + SpringApplication springApplication = new SpringApplication(GemFireServer.class); + springApplication.setWebEnvironment(false); + springApplication.run(args); + } + + @Bean + static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { // <2> + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", applicationName()); + //gemfireProperties.setProperty("log-file", "gemfire-server.log"); + gemfireProperties.setProperty("log-level", logLevel()); + //gemfireProperties.setProperty("jmx-manager", "true"); + //gemfireProperties.setProperty("jmx-manager-start", "true"); + + return gemfireProperties; + } + + String applicationName() { + return "spring-session-data-gemfire-boot-sample:".concat(getClass().getSimpleName()); + } + + String logLevel() { + return System.getProperty("spring-session-data-gemfire.log.level", DEFAULT_GEMFIRE_LOG_LEVEL); + } + + @Bean + CacheFactoryBean gemfireCache() { // <3> + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + CacheServerFactoryBean gemfireCacheServer(Cache gemfireCache, + @Value("${spring-session-data-gemfire.cache.server.bind-address:localhost}") String bindAddress, + @Value("${spring-session-data-gemfire.cache.server.hostname-for-clients:localhost}") String hostnameForClients, + @Value("${spring-session-data-gemfire.cache.server.port:12480}") int port) { // <4> + + CacheServerFactoryBean gemfireCacheServer = new CacheServerFactoryBean(); + + gemfireCacheServer.setAutoStartup(true); + gemfireCacheServer.setBindAddress(bindAddress); + gemfireCacheServer.setCache(gemfireCache); + gemfireCacheServer.setHostNameForClients(hostnameForClients); + gemfireCacheServer.setMaxTimeBetweenPings(Long.valueOf(TimeUnit.SECONDS.toMillis(60)).intValue()); + gemfireCacheServer.setPort(port); + + return gemfireCacheServer; + } +} +// end::class[] diff --git a/samples/boot/gemfire/src/main/java/sample/server/NativeGemFireServer.java b/samples/boot/gemfire/src/main/java/sample/server/NativeGemFireServer.java new file mode 100644 index 0000000..80d11e3 --- /dev/null +++ b/samples/boot/gemfire/src/main/java/sample/server/NativeGemFireServer.java @@ -0,0 +1,186 @@ +/* + * Copyright 2014-2016 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.server; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Properties; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.CacheFactory; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.ExpirationAttributes; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionFactory; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.server.CacheServer; + +import org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; +import org.springframework.util.StringUtils; + +/** + * The {@link NativeGemFireServer} class uses the GemFire API to create a GemFire (cache) instance. + * + * @author John Blum + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.server.CacheServer + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @since 1.3.0 + */ +@SuppressWarnings("unused") +public final class NativeGemFireServer implements Runnable { + + private static final int GEMFIRE_CACHE_SERVER_PORT = + Integer.getInteger("spring-session-data-gemfire.cache.server.port", 12480); + + private static final String GEMFIRE_CACHE_SERVER_HOST = "localhost"; + private static final String GEMFIRE_CACHE_SERVER_HOSTNAME_FOR_CLIENTS = GEMFIRE_CACHE_SERVER_HOST; + private static final String GEMFIRE_LOG_FILENAME_PATTERN = + String.format("%s", NativeGemFireServer.class.getSimpleName()).concat("-%s.log"); + + public static void main(String[] args) { + newNativeGemFireServer(args).run(); + } + + private final String[] args; + + private static File newGemFireLogFile(String suffix) { + return new File(String.format(GEMFIRE_LOG_FILENAME_PATTERN, suffix)); + } + + private static NativeGemFireServer newNativeGemFireServer(String[] args) { + return new NativeGemFireServer(args); + } + + private static String[] nullSafeStringArray(String[] array) { + return (array != null ? array.clone() : new String[0]); + } + + private static void writeStringTo(File file, String fileContents) { + PrintWriter fileWriter = null; + + try { + fileWriter = new PrintWriter(new BufferedWriter(new FileWriter(file, true)), true); + fileWriter.println(fileContents); + fileWriter.flush(); + } + catch (IOException e) { + throw new RuntimeException(String.format("Failed to write [%s] to file [%s]", fileContents, file), e); + } + finally { + if (fileWriter != null) { + fileWriter.close(); + } + } + } + private NativeGemFireServer(String[] args) { + this.args = nullSafeStringArray(args); + } + + /** + * @inheritDoc + */ + public void run() { + run(this.args); + } + + private void run(String[] args) { + try { + writeStringTo(newGemFireLogFile("stdout"), "Before"); + + registerShutdownHook(addCacheServer(createRegion(gemfireCache( + gemfireProperties(applicationName()))))); + + writeStringTo(newGemFireLogFile("stdout"), "After"); + } + catch (Throwable e) { + writeStringTo(newGemFireLogFile("stderr"), e.toString()); + } + } + + private String applicationName() { + return applicationName(null); + } + + private String applicationName(String applicationName) { + return StringUtils.hasText(applicationName) ? applicationName + : "spring-session-data-gemfire.boot.sample." + NativeGemFireServer.class.getSimpleName(); + } + + private Properties gemfireProperties(String applicationName) { + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", applicationName); + gemfireProperties.setProperty("log-file", "gemfire-server.log"); + gemfireProperties.setProperty("log-level", "config"); + //gemfireProperties.setProperty("jmx-manager", "true"); + //gemfireProperties.setProperty("jmx-manager-start", "true"); + + return gemfireProperties; + } + + private Cache gemfireCache(Properties gemfireProperties) { + return new CacheFactory(gemfireProperties).create(); + } + + private Cache createRegion(Cache gemfireCache) { + RegionFactory regionFactory = + gemfireCache.createRegionFactory(RegionShortcut.PARTITION); + + regionFactory.setKeyConstraint(Object.class); + regionFactory.setValueConstraint(AbstractGemFireOperationsSessionRepository.GemFireSession.class); + regionFactory.setStatisticsEnabled(true); + regionFactory.setEntryIdleTimeout(newExpirationAttributes(1800, ExpirationAction.INVALIDATE)); + + Region region = regionFactory.create( + GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + + return gemfireCache; + } + + private ExpirationAttributes newExpirationAttributes(int expirationTime, ExpirationAction expirationAction) { + return new ExpirationAttributes(expirationTime, expirationAction); + } + + private Cache addCacheServer(Cache gemfireCache) throws IOException { + CacheServer cacheServer = gemfireCache.addCacheServer(); + + cacheServer.setBindAddress(GEMFIRE_CACHE_SERVER_HOST); + cacheServer.setHostnameForClients(GEMFIRE_CACHE_SERVER_HOSTNAME_FOR_CLIENTS); + cacheServer.setPort(GEMFIRE_CACHE_SERVER_PORT); + cacheServer.start(); + + return gemfireCache; + } + + private Cache registerShutdownHook(final Cache gemfireCache) { + Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { + public void run() { + if (gemfireCache != null) { + gemfireCache.close(); + } + } + })); + + return gemfireCache; + } +} diff --git a/samples/boot/gemfire/src/main/resources/templates/index.html b/samples/boot/gemfire/src/main/resources/templates/index.html new file mode 100644 index 0000000..e84fe93 --- /dev/null +++ b/samples/boot/gemfire/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
+
+ + diff --git a/samples/javaconfig/gemfire-clientserver/spring-session-sample-javaconfig-gemfire-clientserver.gradle b/samples/javaconfig/gemfire-clientserver/spring-session-sample-javaconfig-gemfire-clientserver.gradle new file mode 100644 index 0000000..580676e --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/spring-session-sample-javaconfig-gemfire-clientserver.gradle @@ -0,0 +1,22 @@ +apply plugin: 'io.spring.convention.spring-sample-war' +apply plugin: "gemfire-server" + +dependencies { + compile project(':spring-session-data-geode') + compile "org.springframework:spring-web" + compile "org.webjars:bootstrap" + compile "org.webjars:webjars-taglib" + compile jstlDependencies + compile slf4jDependencies + + providedCompile "javax.servlet:javax.servlet-api" + + runtime "org.springframework.shell:spring-shell" + + testCompile "junit:junit" + testCompile "org.assertj:assertj-core" + + integrationTestCompile seleniumDependencies + + integrationTestRuntime "org.springframework.shell:spring-shell" +} \ No newline at end of file diff --git a/samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java b/samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java new file mode 100644 index 0000000..83138ff --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014-2017 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; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.htmlunit.HtmlUnitDriver; +import sample.pages.HomePage; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + */ +public class AttributeTests { + + private WebDriver driver; + + @Before + public void setup() { + this.driver = new HtmlUnitDriver(); + } + + @After + public void tearDown() { + this.driver.quit(); + } + + @Test + public void noAttributes() { + HomePage home = HomePage.go(this.driver, HomePage.class); + assertThat(home.attributes().size()).isEqualTo(0); + } + + @Test + public void createAttribute() { + HomePage home = HomePage.go(this.driver, HomePage.class); + home = home.form() + .attributeName("a") + .attributeValue("b") + .submit(HomePage.class); + assertThat(home.attributes()).extracting("attributeName").containsOnly("a"); + assertThat(home.attributes()).extracting("attributeValue").containsOnly("b"); + } + +} diff --git a/samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java b/samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java new file mode 100644 index 0000000..0f43fda --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java @@ -0,0 +1,151 @@ +/* + * Copyright 2014-2017 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.pages; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.openqa.selenium.By; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.SearchContext; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.DefaultElementLocatorFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + * @author Rob Winch + */ +public class HomePage { + + private WebDriver driver; + + @FindBy(tagName = "form") + WebElement form; + + @FindBy(css = "table tbody tr") + List trs; + + List attributes; + + public HomePage(WebDriver driver) { + this.driver = driver; + this.attributes = new ArrayList(); + } + + private static void get(WebDriver driver, String get) { + String baseUrl = "http://localhost:" + System.getProperty("app.port", "8080"); + driver.get(baseUrl + get); + } + + public static T go(WebDriver driver, Class page) { + get(driver, "/"); + return PageFactory.initElements(driver, page); + } + + public void containCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").contains(cookieName); + } + + public void doesNotContainCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").doesNotContain(cookieName); + } + + public HomePage logout() { + WebElement logout = this.driver + .findElement(By.cssSelector("input[type=\"submit\"]")); + logout.click(); + return PageFactory.initElements(this.driver, HomePage.class); + } + + public List attributes() { + List rows = new ArrayList(); + for (WebElement tr : this.trs) { + rows.add(new Attribute(tr)); + } + this.attributes.addAll(rows); + return this.attributes; + } + + public Form form() { + return new Form(this.form); + } + + public class Form { + @FindBy(name = "attributeName") + WebElement attributeName; + + @FindBy(name = "attributeValue") + WebElement attributeValue; + + @FindBy(css = "input[type=\"submit\"]") + WebElement submit; + + public Form(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + public Form attributeName(String text) { + this.attributeName.sendKeys(text); + return this; + } + + public Form attributeValue(String text) { + this.attributeValue.sendKeys(text); + return this; + } + + public T submit(Class page) { + this.submit.click(); + return PageFactory.initElements(HomePage.this.driver, page); + } + } + + public static class Attribute { + @FindBy(xpath = ".//td[1]") + WebElement attributeName; + + @FindBy(xpath = ".//td[2]") + WebElement attributeValue; + + public Attribute(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + /** + * @return the attributeName + */ + public String getAttributeName() { + return this.attributeName.getText(); + } + + /** + * @return the attributeValue + */ + public String getAttributeValue() { + return this.attributeValue.getText(); + } + } + +} diff --git a/samples/javaconfig/gemfire-clientserver/src/main/java/sample/ClientConfig.java b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/ClientConfig.java new file mode 100644 index 0000000..2c73b8c --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/ClientConfig.java @@ -0,0 +1,216 @@ +/* + * Copyright 2014-2016 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; + +import java.util.Collections; +import java.util.Properties; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +import org.apache.geode.cache.Region; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.Pool; +import org.apache.geode.cache.client.PoolManager; +import org.apache.geode.cache.client.internal.PoolImpl; +import org.apache.geode.management.membership.ClientMembership; +import org.apache.geode.management.membership.ClientMembershipEvent; +import org.apache.geode.management.membership.ClientMembershipListenerAdapter; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; +import org.springframework.data.gemfire.config.xml.GemfireConstants; +import org.springframework.data.gemfire.support.ConnectionEndpoint; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; +import org.springframework.util.Assert; + +// tag::class[] +@EnableGemFireHttpSession(maxInactiveIntervalInSeconds = 30, poolName = "DEFAULT") // <1> +public class ClientConfig { + + static final long DEFAULT_TIMEOUT = TimeUnit.SECONDS.toMillis(60); + + static final CountDownLatch LATCH = new CountDownLatch(1); + + static final String DEFAULT_GEMFIRE_LOG_LEVEL = "warning"; + static final String GEMFIRE_DEFAULT_POOL_NAME = "DEFAULT"; + static final String PROXY_HOST = "dummy.example.com"; + static final String PROXY_PORT = "3128"; + + @Bean + static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { // <2> + Properties gemfireProperties = new Properties(); + gemfireProperties.setProperty("name", applicationName()); + // gemfireProperties.setProperty("log-file", "gemfire-client.log"); + gemfireProperties.setProperty("log-level", logLevel()); + return gemfireProperties; + } + + String applicationName() { + return "spring-session-data-gemfire-clientserver-javaconfig-sample:".concat(getClass().getSimpleName()); + } + + String logLevel() { + return System.getProperty("spring.session.data.gemfire.log-level", DEFAULT_GEMFIRE_LOG_LEVEL); + } + + @Bean + ClientCacheFactoryBean gemfireCache( + @Value("${spring.session.data.gemfire.host:" + ServerConfig.SERVER_HOST + "}") String host, + @Value("${spring.session.data.gemfire.port:" + ServerConfig.SERVER_PORT + "}") int port) { // <3> + + ClientCacheFactoryBean clientCacheFactory = new ClientCacheFactoryBean(); + + clientCacheFactory.setClose(true); + clientCacheFactory.setProperties(gemfireProperties()); + + // GemFire Pool settings <4> + clientCacheFactory.setKeepAlive(false); + clientCacheFactory.setPingInterval(TimeUnit.SECONDS.toMillis(5)); + clientCacheFactory.setReadTimeout(intValue(TimeUnit.SECONDS.toMillis(15))); + clientCacheFactory.setRetryAttempts(1); + clientCacheFactory.setSubscriptionEnabled(true); + clientCacheFactory.setThreadLocalConnections(false); + clientCacheFactory.setServers(Collections.singletonList(newConnectionEndpoint(host, port))); + + registerClientMembershipListener(); // <5> + + return clientCacheFactory; + } + + int intValue(Number number) { + return number.intValue(); + } + + ConnectionEndpoint newConnectionEndpoint(String host, int port) { + return new ConnectionEndpoint(host, port); + } + + void registerClientMembershipListener() { + ClientMembership.registerClientMembershipListener( + new ClientMembershipListenerAdapter() { + @Override + public void memberJoined(ClientMembershipEvent event) { + LATCH.countDown(); + } + }); + } + + @Bean + BeanPostProcessor gemfireClientServerReadyBeanPostProcessor( + @Value("${spring-session-data-gemfire.cache.server.host:localhost}") final String host, + @Value("${spring-session-data-gemfire.cache.server.port:12480}") final int port) { // <5> + + return new BeanPostProcessor() { + + private final AtomicBoolean checkGemFireServerIsRunning = new AtomicBoolean(true); + private final AtomicReference defaultPool = new AtomicReference(null); + + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + if (shouldCheckWhetherGemFireServerIsRunning(bean, beanName)) { + try { + validateCacheClientNotified(); + validateCacheClientSubscriptionQueueConnectionEstablished(); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + return bean; + } + + private boolean shouldCheckWhetherGemFireServerIsRunning(Object bean, String beanName) { + return (isGemFireRegion(bean, beanName) + ? checkGemFireServerIsRunning.compareAndSet(true, false) + : whenGemFireCache(bean, beanName)); + } + + private boolean isGemFireRegion(Object bean, String beanName) { + return (GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME.equals(beanName) + || bean instanceof Region); + } + + private boolean whenGemFireCache(Object bean, String beanName) { + if (bean instanceof ClientCache) { + defaultPool.compareAndSet(null, ((ClientCache) bean).getDefaultPool()); + } + + return false; + } + + private void validateCacheClientNotified() throws InterruptedException { + boolean didNotTimeout = LATCH.await(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS); + + Assert.state(didNotTimeout, String.format( + "GemFire Cache Server failed to start on host [%s] and port [%d]", host, port)); + } + + @SuppressWarnings("all") + private void validateCacheClientSubscriptionQueueConnectionEstablished() throws InterruptedException { + boolean cacheClientSubscriptionQueueConnectionEstablished = false; + + Pool pool = defaultIfNull(this.defaultPool.get(), GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME, + GEMFIRE_DEFAULT_POOL_NAME); + + if (pool instanceof PoolImpl) { + long timeout = (System.currentTimeMillis() + DEFAULT_TIMEOUT); + + while (System.currentTimeMillis() < timeout + && !((PoolImpl) pool).isPrimaryUpdaterAlive()) { + + synchronized (pool) { + TimeUnit.MILLISECONDS.timedWait(pool, 500L); + } + + } + + cacheClientSubscriptionQueueConnectionEstablished |= + ((PoolImpl) pool).isPrimaryUpdaterAlive(); + } + + Assert.state(cacheClientSubscriptionQueueConnectionEstablished, String.format( + "Cache client subscription queue connection not established; GemFire Pool was [%s];" + + " GemFire Pool configuration was [locators = %s, servers = %s]", + pool, pool.getLocators(), pool.getServers())); + } + + private Pool defaultIfNull(Pool pool, String... poolNames) { + for (String poolName : poolNames) { + pool = (pool != null ? pool : PoolManager.find(poolName)); + } + + return pool; + } + + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + return bean; + } + }; + } + // end::class[] +} diff --git a/samples/javaconfig/gemfire-clientserver/src/main/java/sample/Initializer.java b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/Initializer.java new file mode 100644 index 0000000..bc5a71c --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/Initializer.java @@ -0,0 +1,28 @@ +/* + * Copyright 2014-2016 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; + +import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; + +// tag::class[] +public class Initializer extends AbstractHttpSessionApplicationInitializer { // <1> + + public Initializer() { + super(ClientConfig.class); // <2> + } +} +// end::class[] diff --git a/samples/javaconfig/gemfire-clientserver/src/main/java/sample/ServerConfig.java b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/ServerConfig.java new file mode 100644 index 0000000..6bca62d --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/ServerConfig.java @@ -0,0 +1,99 @@ +/* + * Copyright 2014-2016 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; + +import java.io.IOException; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.Cache; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.data.gemfire.server.CacheServerFactoryBean; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; + +// tag::class[] +@EnableGemFireHttpSession(maxInactiveIntervalInSeconds = 30) // <1> +public class ServerConfig { + + static final int SERVER_PORT = 12480; + + static final String DEFAULT_GEMFIRE_LOG_LEVEL = "warning"; + static final String SERVER_HOST = "localhost"; + + @SuppressWarnings("resource") + public static void main(String[] args) throws IOException { // <5> + new AnnotationConfigApplicationContext(ServerConfig.class).registerShutdownHook(); + } + + @Bean + static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { // <2> + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", applicationName()); + gemfireProperties.setProperty("mcast-port", "0"); + // gemfireProperties.setProperty("log-file", "gemfire-server.log"); + gemfireProperties.setProperty("log-level", logLevel()); + // gemfireProperties.setProperty("jmx-manager", "true"); + // gemfireProperties.setProperty("jmx-manager-start", "true"); + + return gemfireProperties; + } + + String applicationName() { + return "samples:httpsession-gemfire-clientserver:".concat(getClass().getSimpleName()); + } + + String logLevel() { + return System.getProperty("sample.httpsession.gemfire.log-level", DEFAULT_GEMFIRE_LOG_LEVEL); + } + + @Bean + CacheFactoryBean gemfireCache() { // <3> + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + CacheServerFactoryBean gemfireCacheServer(Cache gemfireCache, + @Value("${spring.session.data.gemfire.port:" + SERVER_PORT + "}") int port) { // <4> + + CacheServerFactoryBean gemfireCacheServer = new CacheServerFactoryBean(); + + gemfireCacheServer.setAutoStartup(true); + gemfireCacheServer.setBindAddress(SERVER_HOST); + gemfireCacheServer.setCache(gemfireCache); + gemfireCacheServer.setHostNameForClients(SERVER_HOST); + gemfireCacheServer.setMaxTimeBetweenPings(Long.valueOf(TimeUnit.SECONDS.toMillis(60)).intValue()); + gemfireCacheServer.setPort(port); + + return gemfireCacheServer; + } +} +// end::class[] diff --git a/samples/javaconfig/gemfire-clientserver/src/main/java/sample/SessionServlet.java b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/SessionServlet.java new file mode 100644 index 0000000..98f3ae8 --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/src/main/java/sample/SessionServlet.java @@ -0,0 +1,42 @@ +/* + * Copyright 2014-2016 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; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +// tag::class[] +@WebServlet("/session") +public class SessionServlet extends HttpServlet { + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String attributeName = request.getParameter("attributeName"); + String attributeValue = request.getParameter("attributeValue"); + request.getSession().setAttribute(attributeName, attributeValue); + response.sendRedirect(request.getContextPath() + "/"); + } + + private static final long serialVersionUID = 2878267318695777395L; +} +// tag::end[] diff --git a/samples/javaconfig/gemfire-clientserver/src/main/webapp/META-INF/MANIFEST.MF b/samples/javaconfig/gemfire-clientserver/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e69de29 diff --git a/samples/javaconfig/gemfire-clientserver/src/main/webapp/index.jsp b/samples/javaconfig/gemfire-clientserver/src/main/webapp/index.jsp new file mode 100644 index 0000000..5d24a6b --- /dev/null +++ b/samples/javaconfig/gemfire-clientserver/src/main/webapp/index.jsp @@ -0,0 +1,50 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="wj" uri="http://www.webjars.org/tags" %> + + + + 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
+
+ + diff --git a/samples/javaconfig/gemfire-p2p/spring-session-sample-javaconfig-gemfire-p2p.gradle b/samples/javaconfig/gemfire-p2p/spring-session-sample-javaconfig-gemfire-p2p.gradle new file mode 100644 index 0000000..7cddfd7 --- /dev/null +++ b/samples/javaconfig/gemfire-p2p/spring-session-sample-javaconfig-gemfire-p2p.gradle @@ -0,0 +1,19 @@ +apply plugin: 'io.spring.convention.spring-sample-war' + +dependencies { + compile project(':spring-session-data-geode') + compile "org.springframework:spring-web" + compile "org.webjars:bootstrap" + compile "org.webjars:webjars-taglib" + compile jstlDependencies + compile slf4jDependencies + + providedCompile "javax.servlet:javax.servlet-api" + + testCompile "junit:junit" + + integrationTestCompile seleniumDependencies + integrationTestCompile "org.assertj:assertj-core" + + integrationTestRuntime "org.springframework.shell:spring-shell" +} diff --git a/samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java b/samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java new file mode 100644 index 0000000..83138ff --- /dev/null +++ b/samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014-2017 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; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.htmlunit.HtmlUnitDriver; +import sample.pages.HomePage; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + */ +public class AttributeTests { + + private WebDriver driver; + + @Before + public void setup() { + this.driver = new HtmlUnitDriver(); + } + + @After + public void tearDown() { + this.driver.quit(); + } + + @Test + public void noAttributes() { + HomePage home = HomePage.go(this.driver, HomePage.class); + assertThat(home.attributes().size()).isEqualTo(0); + } + + @Test + public void createAttribute() { + HomePage home = HomePage.go(this.driver, HomePage.class); + home = home.form() + .attributeName("a") + .attributeValue("b") + .submit(HomePage.class); + assertThat(home.attributes()).extracting("attributeName").containsOnly("a"); + assertThat(home.attributes()).extracting("attributeValue").containsOnly("b"); + } + +} diff --git a/samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java b/samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java new file mode 100644 index 0000000..0f43fda --- /dev/null +++ b/samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java @@ -0,0 +1,151 @@ +/* + * Copyright 2014-2017 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.pages; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.openqa.selenium.By; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.SearchContext; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.DefaultElementLocatorFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + * @author Rob Winch + */ +public class HomePage { + + private WebDriver driver; + + @FindBy(tagName = "form") + WebElement form; + + @FindBy(css = "table tbody tr") + List trs; + + List attributes; + + public HomePage(WebDriver driver) { + this.driver = driver; + this.attributes = new ArrayList(); + } + + private static void get(WebDriver driver, String get) { + String baseUrl = "http://localhost:" + System.getProperty("app.port", "8080"); + driver.get(baseUrl + get); + } + + public static T go(WebDriver driver, Class page) { + get(driver, "/"); + return PageFactory.initElements(driver, page); + } + + public void containCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").contains(cookieName); + } + + public void doesNotContainCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").doesNotContain(cookieName); + } + + public HomePage logout() { + WebElement logout = this.driver + .findElement(By.cssSelector("input[type=\"submit\"]")); + logout.click(); + return PageFactory.initElements(this.driver, HomePage.class); + } + + public List attributes() { + List rows = new ArrayList(); + for (WebElement tr : this.trs) { + rows.add(new Attribute(tr)); + } + this.attributes.addAll(rows); + return this.attributes; + } + + public Form form() { + return new Form(this.form); + } + + public class Form { + @FindBy(name = "attributeName") + WebElement attributeName; + + @FindBy(name = "attributeValue") + WebElement attributeValue; + + @FindBy(css = "input[type=\"submit\"]") + WebElement submit; + + public Form(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + public Form attributeName(String text) { + this.attributeName.sendKeys(text); + return this; + } + + public Form attributeValue(String text) { + this.attributeValue.sendKeys(text); + return this; + } + + public T submit(Class page) { + this.submit.click(); + return PageFactory.initElements(HomePage.this.driver, page); + } + } + + public static class Attribute { + @FindBy(xpath = ".//td[1]") + WebElement attributeName; + + @FindBy(xpath = ".//td[2]") + WebElement attributeValue; + + public Attribute(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + /** + * @return the attributeName + */ + public String getAttributeName() { + return this.attributeName.getText(); + } + + /** + * @return the attributeValue + */ + public String getAttributeValue() { + return this.attributeValue.getText(); + } + } + +} diff --git a/samples/javaconfig/gemfire-p2p/src/main/java/sample/Config.java b/samples/javaconfig/gemfire-p2p/src/main/java/sample/Config.java new file mode 100644 index 0000000..7be4704 --- /dev/null +++ b/samples/javaconfig/gemfire-p2p/src/main/java/sample/Config.java @@ -0,0 +1,53 @@ +/* + * Copyright 2014-2016 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; + +import java.util.Properties; + +import org.springframework.context.annotation.Bean; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; + +// tag::class[] +@EnableGemFireHttpSession // <1> +public class Config { + + @Bean + Properties gemfireProperties() { // <2> + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", "GemFireP2PHttpSessionSample"); + gemfireProperties.setProperty("mcast-port", "0"); + gemfireProperties.setProperty("log-level", + System.getProperty("sample.httpsession.gemfire.log-level", "warning")); + gemfireProperties.setProperty("jmx-manager", "true"); + gemfireProperties.setProperty("jmx-manager-start", "true"); + + return gemfireProperties; + } + + @Bean + CacheFactoryBean gemfireCache() { // <3> + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } +} +// end::class[] diff --git a/samples/javaconfig/gemfire-p2p/src/main/java/sample/Initializer.java b/samples/javaconfig/gemfire-p2p/src/main/java/sample/Initializer.java new file mode 100644 index 0000000..b7472d1 --- /dev/null +++ b/samples/javaconfig/gemfire-p2p/src/main/java/sample/Initializer.java @@ -0,0 +1,28 @@ +/* + * Copyright 2014-2016 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; + +import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; + +// tag::class[] +public class Initializer extends AbstractHttpSessionApplicationInitializer { // <1> + + public Initializer() { + super(Config.class); // <2> + } +} +// end::class[] diff --git a/samples/javaconfig/gemfire-p2p/src/main/java/sample/SessionServlet.java b/samples/javaconfig/gemfire-p2p/src/main/java/sample/SessionServlet.java new file mode 100644 index 0000000..98f3ae8 --- /dev/null +++ b/samples/javaconfig/gemfire-p2p/src/main/java/sample/SessionServlet.java @@ -0,0 +1,42 @@ +/* + * Copyright 2014-2016 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; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +// tag::class[] +@WebServlet("/session") +public class SessionServlet extends HttpServlet { + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String attributeName = request.getParameter("attributeName"); + String attributeValue = request.getParameter("attributeValue"); + request.getSession().setAttribute(attributeName, attributeValue); + response.sendRedirect(request.getContextPath() + "/"); + } + + private static final long serialVersionUID = 2878267318695777395L; +} +// tag::end[] diff --git a/samples/javaconfig/gemfire-p2p/src/main/webapp/META-INF/MANIFEST.MF b/samples/javaconfig/gemfire-p2p/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e69de29 diff --git a/samples/javaconfig/gemfire-p2p/src/main/webapp/index.jsp b/samples/javaconfig/gemfire-p2p/src/main/webapp/index.jsp new file mode 100644 index 0000000..5d24a6b --- /dev/null +++ b/samples/javaconfig/gemfire-p2p/src/main/webapp/index.jsp @@ -0,0 +1,50 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="wj" uri="http://www.webjars.org/tags" %> + + + + 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
+
+ + diff --git a/samples/xml/gemfire-clientserver/spring-session-sample-xml-gemfire-clientserver.gradle b/samples/xml/gemfire-clientserver/spring-session-sample-xml-gemfire-clientserver.gradle new file mode 100644 index 0000000..013e75f --- /dev/null +++ b/samples/xml/gemfire-clientserver/spring-session-sample-xml-gemfire-clientserver.gradle @@ -0,0 +1,22 @@ +apply plugin: 'io.spring.convention.spring-sample-war' +apply plugin: "gemfire-server" + +dependencies { + compile project(':spring-session-data-geode') + compile "org.springframework:spring-web" + compile "org.webjars:bootstrap" + compile "org.webjars:webjars-taglib" + compile jstlDependencies + compile slf4jDependencies + + providedCompile "javax.servlet:javax.servlet-api" + + runtime "org.springframework.shell:spring-shell" + + testCompile "junit:junit" + testCompile "org.assertj:assertj-core" + + integrationTestCompile seleniumDependencies + + integrationTestRuntime "org.springframework.shell:spring-shell" +} diff --git a/samples/xml/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java b/samples/xml/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java new file mode 100644 index 0000000..83138ff --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014-2017 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; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.htmlunit.HtmlUnitDriver; +import sample.pages.HomePage; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + */ +public class AttributeTests { + + private WebDriver driver; + + @Before + public void setup() { + this.driver = new HtmlUnitDriver(); + } + + @After + public void tearDown() { + this.driver.quit(); + } + + @Test + public void noAttributes() { + HomePage home = HomePage.go(this.driver, HomePage.class); + assertThat(home.attributes().size()).isEqualTo(0); + } + + @Test + public void createAttribute() { + HomePage home = HomePage.go(this.driver, HomePage.class); + home = home.form() + .attributeName("a") + .attributeValue("b") + .submit(HomePage.class); + assertThat(home.attributes()).extracting("attributeName").containsOnly("a"); + assertThat(home.attributes()).extracting("attributeValue").containsOnly("b"); + } + +} diff --git a/samples/xml/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java b/samples/xml/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java new file mode 100644 index 0000000..0f43fda --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java @@ -0,0 +1,151 @@ +/* + * Copyright 2014-2017 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.pages; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.openqa.selenium.By; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.SearchContext; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.DefaultElementLocatorFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + * @author Rob Winch + */ +public class HomePage { + + private WebDriver driver; + + @FindBy(tagName = "form") + WebElement form; + + @FindBy(css = "table tbody tr") + List trs; + + List attributes; + + public HomePage(WebDriver driver) { + this.driver = driver; + this.attributes = new ArrayList(); + } + + private static void get(WebDriver driver, String get) { + String baseUrl = "http://localhost:" + System.getProperty("app.port", "8080"); + driver.get(baseUrl + get); + } + + public static T go(WebDriver driver, Class page) { + get(driver, "/"); + return PageFactory.initElements(driver, page); + } + + public void containCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").contains(cookieName); + } + + public void doesNotContainCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").doesNotContain(cookieName); + } + + public HomePage logout() { + WebElement logout = this.driver + .findElement(By.cssSelector("input[type=\"submit\"]")); + logout.click(); + return PageFactory.initElements(this.driver, HomePage.class); + } + + public List attributes() { + List rows = new ArrayList(); + for (WebElement tr : this.trs) { + rows.add(new Attribute(tr)); + } + this.attributes.addAll(rows); + return this.attributes; + } + + public Form form() { + return new Form(this.form); + } + + public class Form { + @FindBy(name = "attributeName") + WebElement attributeName; + + @FindBy(name = "attributeValue") + WebElement attributeValue; + + @FindBy(css = "input[type=\"submit\"]") + WebElement submit; + + public Form(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + public Form attributeName(String text) { + this.attributeName.sendKeys(text); + return this; + } + + public Form attributeValue(String text) { + this.attributeValue.sendKeys(text); + return this; + } + + public T submit(Class page) { + this.submit.click(); + return PageFactory.initElements(HomePage.this.driver, page); + } + } + + public static class Attribute { + @FindBy(xpath = ".//td[1]") + WebElement attributeName; + + @FindBy(xpath = ".//td[2]") + WebElement attributeValue; + + public Attribute(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + /** + * @return the attributeName + */ + public String getAttributeName() { + return this.attributeName.getText(); + } + + /** + * @return the attributeValue + */ + public String getAttributeValue() { + return this.attributeValue.getText(); + } + } + +} diff --git a/samples/xml/gemfire-clientserver/src/main/java/sample/Application.java b/samples/xml/gemfire-clientserver/src/main/java/sample/Application.java new file mode 100644 index 0000000..4c477df --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/java/sample/Application.java @@ -0,0 +1,33 @@ +/* + * Copyright 2014-2016 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; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; + +@SuppressWarnings("resource") +// tag::class[] +@Configuration // <1> +@ImportResource("META-INF/spring/session-server.xml") // <2> +public class Application { + + public static void main(String[] args) { + new AnnotationConfigApplicationContext(Application.class).registerShutdownHook(); + } +} +// tag::end[] diff --git a/samples/xml/gemfire-clientserver/src/main/java/sample/GemFireClientServerReadyBeanPostProcessor.java b/samples/xml/gemfire-clientserver/src/main/java/sample/GemFireClientServerReadyBeanPostProcessor.java new file mode 100644 index 0000000..ab51f0b --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/java/sample/GemFireClientServerReadyBeanPostProcessor.java @@ -0,0 +1,148 @@ +/* + * Copyright 2014-2016 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; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +import org.apache.geode.cache.Region; +import org.apache.geode.cache.client.Pool; +import org.apache.geode.cache.client.PoolManager; +import org.apache.geode.cache.client.internal.PoolImpl; +import org.apache.geode.management.membership.ClientMembership; +import org.apache.geode.management.membership.ClientMembershipEvent; +import org.apache.geode.management.membership.ClientMembershipListenerAdapter; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.data.gemfire.config.xml.GemfireConstants; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; +import org.springframework.util.Assert; + +public class GemFireClientServerReadyBeanPostProcessor implements BeanPostProcessor { + + private static final long DEFAULT_TIMEOUT = TimeUnit.SECONDS.toMillis(60); + + private static final CountDownLatch LATCH = new CountDownLatch(1); + + private static final String GEMFIRE_DEFAULT_POOL_NAME = "DEFAULT"; + + static { + ClientMembership.registerClientMembershipListener( + new ClientMembershipListenerAdapter() { + @Override + public void memberJoined(ClientMembershipEvent event) { + LATCH.countDown(); + } + } + ); + } + + @Value("${spring.session.data.gemfire.port:${application.gemfire.client-server.port}}") + private int port; + + @Value("${application.gemfire.client-server.host:localhost}") + private String host; + + private final AtomicBoolean checkGemFireServerIsRunning = new AtomicBoolean(true); + private final AtomicReference gemfirePool = new AtomicReference(null); + + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + if (shouldCheckWhetherGemFireServerIsRunning(bean, beanName)) { + try { + validateCacheClientNotified(); + validateCacheClientSubscriptionQueueConnectionEstablished(); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + return bean; + } + + private boolean shouldCheckWhetherGemFireServerIsRunning(Object bean, String beanName) { + return (isGemFireRegion(bean, beanName) + ? this.checkGemFireServerIsRunning.compareAndSet(true, false) + : whenGemFirePool(bean, beanName)); + } + + private boolean isGemFireRegion(Object bean, String beanName) { + return (GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME.equals(beanName) + || bean instanceof Region); + } + + private boolean whenGemFirePool(Object bean, String beanName) { + if (bean instanceof Pool) { + this.gemfirePool.compareAndSet(null, (Pool) bean); + } + + return false; + } + + private void validateCacheClientNotified() throws InterruptedException { + boolean didNotTimeout = LATCH.await(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS); + + Assert.state(didNotTimeout, String.format( + "GemFire Cache Server failed to start on host [%s] and port [%d]", this.host, this.port)); + } + + @SuppressWarnings("all") + private void validateCacheClientSubscriptionQueueConnectionEstablished() throws InterruptedException { + boolean cacheClientSubscriptionQueueConnectionEstablished = false; + + Pool pool = defaultIfNull(this.gemfirePool.get(), + GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME, GEMFIRE_DEFAULT_POOL_NAME); + + if (pool instanceof PoolImpl) { + long timeout = (System.currentTimeMillis() + DEFAULT_TIMEOUT); + + while (System.currentTimeMillis() < timeout + && !((PoolImpl) pool).isPrimaryUpdaterAlive()) { + + synchronized (pool) { + TimeUnit.MILLISECONDS.timedWait(pool, 500L); + } + + } + + cacheClientSubscriptionQueueConnectionEstablished |= + ((PoolImpl) pool).isPrimaryUpdaterAlive(); + } + + Assert.state(cacheClientSubscriptionQueueConnectionEstablished, String.format( + "Cache client subscription queue connection not established; GemFire Pool was [%s];" + + " GemFire Pool configuration was [locators = %s, servers = %s]", + pool, pool.getLocators(), pool.getServers())); + } + + private Pool defaultIfNull(Pool pool, String... poolNames) { + for (String poolName : poolNames) { + pool = (pool != null ? pool : PoolManager.find(poolName)); + } + + return pool; + } + + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + return bean; + } +} +// tag::end[] diff --git a/samples/xml/gemfire-clientserver/src/main/java/sample/SessionServlet.java b/samples/xml/gemfire-clientserver/src/main/java/sample/SessionServlet.java new file mode 100644 index 0000000..b030339 --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/java/sample/SessionServlet.java @@ -0,0 +1,40 @@ +/* + * Copyright 2014-2016 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; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +// tag::class[] +public class SessionServlet extends HttpServlet { + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String attributeName = request.getParameter("attributeName"); + String attributeValue = request.getParameter("attributeValue"); + request.getSession().setAttribute(attributeName, attributeValue); + response.sendRedirect(request.getContextPath() + "/"); + } + + private static final long serialVersionUID = 2878267318695777395L; +} +// tag::end[] diff --git a/samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/application.properties b/samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/application.properties new file mode 100644 index 0000000..98fbf19 --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/application.properties @@ -0,0 +1,2 @@ +application.gemfire.client-server.host=localhost +application.gemfire.client-server.port=12480 diff --git a/samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/session-server.xml b/samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/session-server.xml new file mode 100644 index 0000000..6426b7f --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/session-server.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + GemFireClientServerHttpSessionXmlSample + 0 + + ${spring.session.data.gemfire.log-level:warning} + + + + + + + + + + + + + + diff --git a/samples/xml/gemfire-clientserver/src/main/webapp/META-INF/MANIFEST.MF b/samples/xml/gemfire-clientserver/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e69de29 diff --git a/samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/spring/session-client.xml b/samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/spring/session-client.xml new file mode 100644 index 0000000..bde07b3 --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/spring/session-client.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + ${spring.session.data.gemfire.log-level:warning} + + + + + + + + + + + + + + + diff --git a/samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/web.xml b/samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..3d1d375 --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,53 @@ + + + + + + contextConfigLocation + /WEB-INF/spring/session-client.xml + + + + + + springSessionRepositoryFilter + org.springframework.web.filter.DelegatingFilterProxy + + + springSessionRepositoryFilter + /* + REQUEST + ERROR + + + + + + + org.springframework.web.context.ContextLoaderListener + + + + + session + sample.SessionServlet + + + + session + /session + + + + index.jsp + + diff --git a/samples/xml/gemfire-clientserver/src/main/webapp/index.jsp b/samples/xml/gemfire-clientserver/src/main/webapp/index.jsp new file mode 100644 index 0000000..5d24a6b --- /dev/null +++ b/samples/xml/gemfire-clientserver/src/main/webapp/index.jsp @@ -0,0 +1,50 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="wj" uri="http://www.webjars.org/tags" %> + + + + 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
+
+ + diff --git a/samples/xml/gemfire-p2p/spring-session-sample-xml-gemfire-p2p.gradle b/samples/xml/gemfire-p2p/spring-session-sample-xml-gemfire-p2p.gradle new file mode 100644 index 0000000..7cddfd7 --- /dev/null +++ b/samples/xml/gemfire-p2p/spring-session-sample-xml-gemfire-p2p.gradle @@ -0,0 +1,19 @@ +apply plugin: 'io.spring.convention.spring-sample-war' + +dependencies { + compile project(':spring-session-data-geode') + compile "org.springframework:spring-web" + compile "org.webjars:bootstrap" + compile "org.webjars:webjars-taglib" + compile jstlDependencies + compile slf4jDependencies + + providedCompile "javax.servlet:javax.servlet-api" + + testCompile "junit:junit" + + integrationTestCompile seleniumDependencies + integrationTestCompile "org.assertj:assertj-core" + + integrationTestRuntime "org.springframework.shell:spring-shell" +} diff --git a/samples/xml/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java b/samples/xml/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java new file mode 100644 index 0000000..83138ff --- /dev/null +++ b/samples/xml/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014-2017 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; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.htmlunit.HtmlUnitDriver; +import sample.pages.HomePage; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + */ +public class AttributeTests { + + private WebDriver driver; + + @Before + public void setup() { + this.driver = new HtmlUnitDriver(); + } + + @After + public void tearDown() { + this.driver.quit(); + } + + @Test + public void noAttributes() { + HomePage home = HomePage.go(this.driver, HomePage.class); + assertThat(home.attributes().size()).isEqualTo(0); + } + + @Test + public void createAttribute() { + HomePage home = HomePage.go(this.driver, HomePage.class); + home = home.form() + .attributeName("a") + .attributeValue("b") + .submit(HomePage.class); + assertThat(home.attributes()).extracting("attributeName").containsOnly("a"); + assertThat(home.attributes()).extracting("attributeValue").containsOnly("b"); + } + +} diff --git a/samples/xml/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java b/samples/xml/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java new file mode 100644 index 0000000..0f43fda --- /dev/null +++ b/samples/xml/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java @@ -0,0 +1,151 @@ +/* + * Copyright 2014-2017 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.pages; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.openqa.selenium.By; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.SearchContext; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.DefaultElementLocatorFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Eddú Meléndez + * @author Rob Winch + */ +public class HomePage { + + private WebDriver driver; + + @FindBy(tagName = "form") + WebElement form; + + @FindBy(css = "table tbody tr") + List trs; + + List attributes; + + public HomePage(WebDriver driver) { + this.driver = driver; + this.attributes = new ArrayList(); + } + + private static void get(WebDriver driver, String get) { + String baseUrl = "http://localhost:" + System.getProperty("app.port", "8080"); + driver.get(baseUrl + get); + } + + public static T go(WebDriver driver, Class page) { + get(driver, "/"); + return PageFactory.initElements(driver, page); + } + + public void containCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").contains(cookieName); + } + + public void doesNotContainCookie(String cookieName) { + Set cookies = this.driver.manage().getCookies(); + assertThat(cookies).extracting("name").doesNotContain(cookieName); + } + + public HomePage logout() { + WebElement logout = this.driver + .findElement(By.cssSelector("input[type=\"submit\"]")); + logout.click(); + return PageFactory.initElements(this.driver, HomePage.class); + } + + public List attributes() { + List rows = new ArrayList(); + for (WebElement tr : this.trs) { + rows.add(new Attribute(tr)); + } + this.attributes.addAll(rows); + return this.attributes; + } + + public Form form() { + return new Form(this.form); + } + + public class Form { + @FindBy(name = "attributeName") + WebElement attributeName; + + @FindBy(name = "attributeValue") + WebElement attributeValue; + + @FindBy(css = "input[type=\"submit\"]") + WebElement submit; + + public Form(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + public Form attributeName(String text) { + this.attributeName.sendKeys(text); + return this; + } + + public Form attributeValue(String text) { + this.attributeValue.sendKeys(text); + return this; + } + + public T submit(Class page) { + this.submit.click(); + return PageFactory.initElements(HomePage.this.driver, page); + } + } + + public static class Attribute { + @FindBy(xpath = ".//td[1]") + WebElement attributeName; + + @FindBy(xpath = ".//td[2]") + WebElement attributeValue; + + public Attribute(SearchContext context) { + PageFactory.initElements(new DefaultElementLocatorFactory(context), this); + } + + /** + * @return the attributeName + */ + public String getAttributeName() { + return this.attributeName.getText(); + } + + /** + * @return the attributeValue + */ + public String getAttributeValue() { + return this.attributeValue.getText(); + } + } + +} diff --git a/samples/xml/gemfire-p2p/src/main/java/sample/SessionServlet.java b/samples/xml/gemfire-p2p/src/main/java/sample/SessionServlet.java new file mode 100644 index 0000000..f37983b --- /dev/null +++ b/samples/xml/gemfire-p2p/src/main/java/sample/SessionServlet.java @@ -0,0 +1,40 @@ +/* + * Copyright 2014-2016 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; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +// tag::class[] +public class SessionServlet extends HttpServlet { + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String attributeName = request.getParameter("attributeName"); + String attributeValue = request.getParameter("attributeValue"); + request.getSession().setAttribute(attributeName, attributeValue); + response.sendRedirect(request.getContextPath() + "/"); + } + + private static final long serialVersionUID = 2878267318695777395L; +} +// end::class[] diff --git a/samples/xml/gemfire-p2p/src/main/webapp/META-INF/MANIFEST.MF b/samples/xml/gemfire-p2p/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e69de29 diff --git a/samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/spring/session.xml b/samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/spring/session.xml new file mode 100644 index 0000000..2e408ab --- /dev/null +++ b/samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/spring/session.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + GemFireP2PHttpSessionXmlSample + 0 + ${sample.httpsession.gemfire.log-level:warning} + true + true + + + + + + + diff --git a/samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/web.xml b/samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..fd09adf --- /dev/null +++ b/samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,57 @@ + + + + + + contextConfigLocation + + /WEB-INF/spring/*.xml + + + + + + + springSessionRepositoryFilter + org.springframework.web.filter.DelegatingFilterProxy + + + springSessionRepositoryFilter + /* + REQUEST + ERROR + + + + + + + + org.springframework.web.context.ContextLoaderListener + + + + + + session + sample.SessionServlet + + + + session + /session + + + + index.jsp + + diff --git a/samples/xml/gemfire-p2p/src/main/webapp/index.jsp b/samples/xml/gemfire-p2p/src/main/webapp/index.jsp new file mode 100644 index 0000000..2398c07 --- /dev/null +++ b/samples/xml/gemfire-p2p/src/main/webapp/index.jsp @@ -0,0 +1,50 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="wj" uri="http://www.webjars.org/tags" %> + + + + 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
+
+ + diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..3f23445 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,26 @@ +rootProject.name = 'spring-session-data-geode-build' + + +FileTree buildFiles = fileTree(rootDir) { + include '**/*.gradle' + exclude '**/gradle', 'settings.gradle', 'buildSrc', '/build.gradle', '.*' +} + +String rootDirPath = rootDir.absolutePath + File.separator +buildFiles.each { File buildFile -> + + boolean isDefaultName = 'build.gradle'.equals(buildFile.name) + if(isDefaultName) { + String buildFilePath = buildFile.parentFile.absolutePath + String projectPath = buildFilePath.replace(rootDirPath, '').replaceAll(File.separator, ':') + include projectPath + } else { + String projectName = buildFile.name.replace('.gradle', ''); + String projectPath = ':' + projectName; + include projectPath + def project = findProject("${projectPath}") + project.name = projectName + project.projectDir = buildFile.parentFile + project.buildFileName = buildFile.name + } +} diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$1.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$1.class new file mode 100644 index 0000000..4321192 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$1.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$2.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$2.class new file mode 100644 index 0000000..444bea0 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$2.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$3.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$3.class new file mode 100644 index 0000000..493be7d Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$3.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$Condition.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$Condition.class new file mode 100644 index 0000000..0d902eb Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$Condition.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener$1.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener$1.class new file mode 100644 index 0000000..25e7b7d Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener$1.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener.class new file mode 100644 index 0000000..b57fd1f Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.class new file mode 100644 index 0000000..c5df7d8 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireClientConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireClientConfiguration.class new file mode 100644 index 0000000..c1c32d6 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireClientConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireServerConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireServerConfiguration.class new file mode 100644 index 0000000..60d10de Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireServerConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.class new file mode 100644 index 0000000..6fbc856 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireClientConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireClientConfiguration.class new file mode 100644 index 0000000..a46e629 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireClientConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireServerConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireServerConfiguration.class new file mode 100644 index 0000000..b2552ef Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireServerConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.class new file mode 100644 index 0000000..4ce13cf Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireClientConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireClientConfiguration.class new file mode 100644 index 0000000..c1d4ff6 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireClientConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireServerConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireServerConfiguration.class new file mode 100644 index 0000000..487bcdc Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireServerConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.class new file mode 100644 index 0000000..d2d971e Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$Person.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$Person.class new file mode 100644 index 0000000..1336b80 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$Person.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration.class new file mode 100644 index 0000000..a0522cf Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.class new file mode 100644 index 0000000..badfbb0 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireClientConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireClientConfiguration.class new file mode 100644 index 0000000..269922f Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireClientConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireServerConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireServerConfiguration.class new file mode 100644 index 0000000..551e78f Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireServerConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.class new file mode 100644 index 0000000..2a2be26 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration.class new file mode 100644 index 0000000..ec605e8 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.class new file mode 100644 index 0000000..5028d03 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration.class new file mode 100644 index 0000000..93dae9c Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.class new file mode 100644 index 0000000..8d0cac6 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.class differ diff --git a/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.class b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.class new file mode 100644 index 0000000..e88a920 Binary files /dev/null and b/spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$1.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$1.class new file mode 100644 index 0000000..8e029f1 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$1.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSession.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSession.class new file mode 100644 index 0000000..0e17e01 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSession.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes$1.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes$1.class new file mode 100644 index 0000000..5394999 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes$1.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes.class new file mode 100644 index 0000000..406db18 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributesInstantiator.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributesInstantiator.class new file mode 100644 index 0000000..df8baf7 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributesInstantiator.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionInstantiator.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionInstantiator.class new file mode 100644 index 0000000..869efb9 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionInstantiator.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.class new file mode 100644 index 0000000..a966b8f Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.class new file mode 100644 index 0000000..0d498c7 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.class new file mode 100644 index 0000000..00824b3 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.class new file mode 100644 index 0000000..a8fb9a5 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.class new file mode 100644 index 0000000..3a4d606 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.class new file mode 100644 index 0000000..5eb8f7f Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils$1.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils$1.class new file mode 100644 index 0000000..42a938b Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils$1.class differ diff --git a/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils.class b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils.class new file mode 100644 index 0000000..67a4870 Binary files /dev/null and b/spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$1.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$1.class new file mode 100644 index 0000000..b324a38 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$1.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$10.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$10.class new file mode 100644 index 0000000..6a5f196 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$10.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$11.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$11.class new file mode 100644 index 0000000..0a4fc6e Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$11.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$12.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$12.class new file mode 100644 index 0000000..65bd609 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$12.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$13.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$13.class new file mode 100644 index 0000000..afeb09f Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$13.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$14.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$14.class new file mode 100644 index 0000000..a1d9a17 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$14.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$15.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$15.class new file mode 100644 index 0000000..5e02037 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$15.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$16.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$16.class new file mode 100644 index 0000000..ea3f2d5 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$16.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$17.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$17.class new file mode 100644 index 0000000..ca5b90a Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$17.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$18.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$18.class new file mode 100644 index 0000000..ac1571a Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$18.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$19.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$19.class new file mode 100644 index 0000000..0cdaba8 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$19.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$2.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$2.class new file mode 100644 index 0000000..b27bee0 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$2.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$20.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$20.class new file mode 100644 index 0000000..f0f1472 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$20.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$21.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$21.class new file mode 100644 index 0000000..c185f54 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$21.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$22.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$22.class new file mode 100644 index 0000000..2b26fa2 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$22.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$23.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$23.class new file mode 100644 index 0000000..8c68e41 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$23.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$24.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$24.class new file mode 100644 index 0000000..61573a4 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$24.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$25.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$25.class new file mode 100644 index 0000000..6fcdf56 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$25.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$3.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$3.class new file mode 100644 index 0000000..3c338de Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$3.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$4.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$4.class new file mode 100644 index 0000000..35c1d8a Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$4.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$5.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$5.class new file mode 100644 index 0000000..2b77793 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$5.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$6.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$6.class new file mode 100644 index 0000000..25e5bc3 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$6.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$7.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$7.class new file mode 100644 index 0000000..8287b5b Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$7.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$8.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$8.class new file mode 100644 index 0000000..24eb4e7 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$8.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$9.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$9.class new file mode 100644 index 0000000..521ff74 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$9.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$TestGemFireOperationsSessionRepository.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$TestGemFireOperationsSessionRepository.class new file mode 100644 index 0000000..f13a58f Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$TestGemFireOperationsSessionRepository.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$ThreadSafeSessionTest.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$ThreadSafeSessionTest.class new file mode 100644 index 0000000..053fa1a Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$ThreadSafeSessionTest.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$Tombstone.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$Tombstone.class new file mode 100644 index 0000000..4ac1ad5 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$Tombstone.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.class new file mode 100644 index 0000000..563296b Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$1.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$1.class new file mode 100644 index 0000000..8a75dc0 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$1.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$2.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$2.class new file mode 100644 index 0000000..a3002e8 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$2.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$3.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$3.class new file mode 100644 index 0000000..9ff38f0 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$3.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$4.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$4.class new file mode 100644 index 0000000..1cec660 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$4.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$GemfireOperationsAccessor.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$GemfireOperationsAccessor.class new file mode 100644 index 0000000..5ddd2cc Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$GemfireOperationsAccessor.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.class new file mode 100644 index 0000000..7e6790e Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.class new file mode 100644 index 0000000..10c8654 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest$1.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest$1.class new file mode 100644 index 0000000..a9c702b Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest$1.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.class new file mode 100644 index 0000000..47567e3 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$1.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$1.class new file mode 100644 index 0000000..bc0ce06 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$1.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$2.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$2.class new file mode 100644 index 0000000..e91e585 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$2.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.class new file mode 100644 index 0000000..4867f2e Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.class differ diff --git a/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/support/GemFireUtilsTest.class b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/support/GemFireUtilsTest.class new file mode 100644 index 0000000..2cd2b79 Binary files /dev/null and b/spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/support/GemFireUtilsTest.class differ diff --git a/spring-session-data-geode/build/docs/javadoc/allclasses-frame.html b/spring-session-data-geode/build/docs/javadoc/allclasses-frame.html new file mode 100644 index 0000000..62482d0 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/allclasses-frame.html @@ -0,0 +1,29 @@ + + + + + +All Classes (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + +

All Classes

+ + + diff --git a/spring-session-data-geode/build/docs/javadoc/allclasses-noframe.html b/spring-session-data-geode/build/docs/javadoc/allclasses-noframe.html new file mode 100644 index 0000000..3b30b97 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/allclasses-noframe.html @@ -0,0 +1,29 @@ + + + + + +All Classes (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + +

All Classes

+ + + diff --git a/spring-session-data-geode/build/docs/javadoc/constant-values.html b/spring-session-data-geode/build/docs/javadoc/constant-values.html new file mode 100644 index 0000000..fae14d7 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/constant-values.html @@ -0,0 +1,259 @@ + + + + + +Constant Field Values (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

org.springframework.*

+ + + +
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/deprecated-list.html b/spring-session-data-geode/build/docs/javadoc/deprecated-list.html new file mode 100644 index 0000000..795e898 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/deprecated-list.html @@ -0,0 +1,122 @@ + + + + + +Deprecated List (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + + + diff --git a/spring-session-data-geode/build/docs/javadoc/help-doc.html b/spring-session-data-geode/build/docs/javadoc/help-doc.html new file mode 100644 index 0000000..f0d2e2c --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/help-doc.html @@ -0,0 +1,223 @@ + + + + + +API Help (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + + + diff --git a/spring-session-data-geode/build/docs/javadoc/index-all.html b/spring-session-data-geode/build/docs/javadoc/index-all.html new file mode 100644 index 0000000..24772fb --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/index-all.html @@ -0,0 +1,841 @@ + + + + + +Index (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + +
+ + + + + + + +
+ + +
A C D E F G H I L N O P R S T  + + +

A

+
+
AbstractGemFireOperationsSessionRepository - Class in org.springframework.session.data.gemfire
+
+
AbstractGemFireOperationsSessionRepository is an abstract base class encapsulating functionality + common to all implementations that support SessionRepository operations backed by Apache Geode.
+
+
AbstractGemFireOperationsSessionRepository(GemfireOperations) - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Constructs an instance of AbstractGemFireOperationsSessionRepository with a + required GemfireOperations instance used to perform GemFire data access operations + and interactions supporting the SessionRepository operations.
+
+
AbstractGemFireOperationsSessionRepository.GemFireSession - Class in org.springframework.session.data.gemfire
+
+
GemFireSession is a GemFire representation model of a Spring ExpiringSession + that stores and manages Session state information in GemFire.
+
+
AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes - Class in org.springframework.session.data.gemfire
+
+
The GemFireSessionAttributes class is a container for Session attributes implementing + both the DataSerializable and Delta GemFire interfaces for efficient + storage and distribution (replication) in GemFire.
+
+
AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator - Class in org.springframework.session.data.gemfire
+
+
GemFireSessionAttributesInstantiator is a GemFire Instantiator use to instantiate instances + of the AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes object used in GemFire's data serialization framework when + persisting Session attributes state in GemFire.
+
+
AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator - Class in org.springframework.session.data.gemfire
+
+
GemFireSessionInstantiator is a GemFire Instantiator use to instantiate instances + of the AbstractGemFireOperationsSessionRepository.GemFireSession object used in GemFire's data serialization framework when + persisting Session state in GemFire.
+
+
afterCreate(EntryEvent<Object, ExpiringSession>) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Callback method triggered when an entry is created in the GemFire cache Region.
+
+
afterDestroy(EntryEvent<Object, ExpiringSession>) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Callback method triggered when an entry is destroyed in the GemFire cache + Region.
+
+
afterInvalidate(EntryEvent<Object, ExpiringSession>) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Callback method triggered when an entry is invalidated in the GemFire cache + Region.
+
+
afterPropertiesSet() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Callback method during Spring bean initialization that will capture the fully-qualified name + of the GemFire cache Region used to manage Session state and register this SessionRepository + as a GemFire CacheListener.
+
+
afterPropertiesSet() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Post-construction initialization callback to create, configure and initialize the + GemFire cache Region used to store, replicate (distribute) and manage + Session state.
+
+
afterPropertiesSet() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
allowJavaSerialization() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
allowJavaSerialization() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
+ + + +

C

+
+
close(Closeable) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Null-safe method to close the given Closeable object.
+
+
compareTo(ExpiringSession) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
copy(ExpiringSession) - Static method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
create(int) - Static method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
create() - Static method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator
+
 
+
create() - Static method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator
+
 
+
createSession() - Method in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
+
Constructs a new ExpiringSession instance backed by GemFire.
+
+
+ + + +

D

+
+
DEFAULT_ALLOW_JAVA_SERIALIZATION - Static variable in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
DEFAULT_ALLOW_JAVA_SERIALIZATION - Static variable in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
DEFAULT_CLIENT_REGION_SHORTCUT - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
The default ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions.
+
+
DEFAULT_CLIENT_REGION_SHORTCUT - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
 
+
DEFAULT_GEMFIRE_POOL_NAME - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Name of the GemFire Pool used by the client Region for managing Session state information.
+
+
DEFAULT_GEMFIRE_POOL_NAME - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
 
+
DEFAULT_INDEXABLE_SESSION_ATTRIBUTES - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
The default names of all Session attributes that should be indexed by GemFire.
+
+
DEFAULT_INDEXABLE_SESSION_ATTRIBUTES - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
The default maximum interval in seconds in which a Session can remain inactive + before it is considered expired.
+
+
DEFAULT_SERVER_REGION_SHORTCUT - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
The default RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions.
+
+
DEFAULT_SERVER_REGION_SHORTCUT - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
 
+
DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
The default name of the Gemfire (Client)Cache Region used to store Sessions.
+
+
DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
 
+
delete(Session) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Deletes the given Session from GemFire.
+
+
delete(String) - Method in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
+
Deletes (removes) any existing ExpiringSession from GemFire.
+
+
+ + + +

E

+
+
EnableGemFireHttpSession - Annotation Type in org.springframework.session.data.gemfire.config.annotation.web.http
+
+
Add this annotation to a Spring @Configuration class to expose the SessionRepositoryFilter + as a bean named springSessionRepositoryFilter back the HttpSession + by Pivotal GemFire or Apache Geode.
+
+
entrySet() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
equals(Object) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
+ + + +

F

+
+
FIND_SESSIONS_BY_INDEX_NAME_VALUE_QUERY - Static variable in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
 
+
FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY - Static variable in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
 
+
findByIndexNameAndIndexValue(String, String) - Method in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
+
Looks up all available Sessions with the particular attribute indexed by name + having the given value.
+
+
from(ExpiringSession) - Static method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
from(Session) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
from(AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
fromData(DataInput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
fromData(DataInput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
fromDelta(DataInput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
fromDelta(DataInput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
+ + + +

G

+
+
GemFireCacheTypeAwareRegionFactoryBean<K,V> - Class in org.springframework.session.data.gemfire.config.annotation.web.http.support
+
+
The GemFireCacheTypeAwareRegionFactoryBean class is a Spring FactoryBean + used to construct, configure and initialize the GemFire cache Region used to + store and manage Session state.
+
+
GemFireCacheTypeAwareRegionFactoryBean() - Constructor for class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
 
+
GemFireHttpSessionConfiguration - Class in org.springframework.session.data.gemfire.config.annotation.web.http
+
+
The GemFireHttpSessionConfiguration class is a Spring @Configuration class + used to configure and initialize Pivotal GemFire/Apache Geode as a clustered, replicated and distributed + HttpSession provider implementation in Spring ExpiringSession.
+
+
GemFireHttpSessionConfiguration() - Constructor for class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
 
+
GemFireOperationsSessionRepository - Class in org.springframework.session.data.gemfire
+
+
The GemFireOperationsSessionRepository class is a Spring SessionRepository implementation + that interfaces with and uses GemFire to back and store Spring Sessions.
+
+
GemFireOperationsSessionRepository(GemfireOperations) - Constructor for class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
+
Constructs an instance of GemFireOperationsSessionRepository initialized with the + required GemfireOperations object used to perform data access operations to manage + Session state.
+
+
GemFireSession() - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
GemFireSession(String) - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
GemFireSession(ExpiringSession) - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
GemFireSessionAttributes() - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
GemFireSessionAttributes(Object) - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
GemFireSessionAttributesInstantiator(Class<? extends DataSerializable>, int) - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator
+
 
+
GemFireSessionInstantiator(Class<? extends DataSerializable>, int) - Constructor for class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator
+
 
+
GemFireUtils - Class in org.springframework.session.data.gemfire.support
+
+
GemFireUtils is an abstract, extensible utility class for working with GemFire types + and functionality and is used by Spring Session's GemFire adapter support classes.
+
+
GemFireUtils() - Constructor for class org.springframework.session.data.gemfire.support.GemFireUtils
+
 
+
getApplicationEventPublisher() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Gets the ApplicationEventPublisher used to publish Session events corresponding to + GemFire cache events.
+
+
getAttribute(String) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getAttribute(String) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
getAttributeNames() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getAttributeNames() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
getAttributes() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getBeanClassLoader() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Gets a reference to the ClassLoader used to load bean definition class + types in a Spring context.
+
+
getBeanFactory() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Gets a reference to the Spring BeanFactory responsible for + creating GemFire components.
+
+
getClientRegionShortcut() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Gets the ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions.
+
+
getClientRegionShortcut() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns the Region data policy used by the GemFire cache client to manage + Session state.
+
+
getCreationTime() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getFullyQualifiedRegionName() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Gets the fully-qualified name of the GemFire cache Region used to store and + manage Session data.
+
+
getGemfireCache() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns a reference to the GemFire cache used to construct the appropriate + Region.
+
+
getId() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getIndexableSessionAttributes() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Get the names of all Session attributes that should be indexed by GemFire.
+
+
getIndexableSessionAttributes() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
getIndexableSessionAttributesAsGemFireIndexExpression() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
+
Gets the names of all Session attributes that will be indexed by GemFire as single, comma-delimited + String value constituting the Index expression of the Index definition.
+
+
getLastAccessedTime() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getMaxInactiveIntervalInSeconds() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getMaxInactiveIntervalInSeconds() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Gets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
+
+
getMaxInactiveIntervalInSeconds() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Gets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
+
+
getObject() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns a reference to the constructed GemFire cache Region used to store + and manage Session state.
+
+
getObject() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
getObjectType() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns the specific type of GemFire cache Region this factory creates when + initialized or Region.class when uninitialized.
+
+
getObjectType() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
getPoolName() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Returns the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
+
+
getPoolName() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
+
+
getPrincipalName() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
getRegionAttributes() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns the GemFire RegionAttributes used to configure the GemFire cache + Region used to store and manage Session state.
+
+
getRegionName() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns the configured name of the GemFire cache Region use to store and + manage Session state.
+
+
getRegionName() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
getServerRegionShortcut() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Gets the RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions.
+
+
getServerRegionShortcut() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns the Region data policy used by the GemFire peer cache to manage + Session state.
+
+
getSession(String) - Method in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
+
Gets a copy of an existing, non-expired ExpiringSession by ID.
+
+
getSpringSessionGemFireRegionName() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Gets the name of the Gemfire (Client)Cache Region used to store Sessions.
+
+
getTemplate() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Gets a reference to the GemfireOperations (template) used to perform data access + operations and other interactions on the GemFire cache Region backing this + SessionRepository.
+
+
+ + + +

H

+
+
handleCreated(String, ExpiringSession) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Causes Session created events to be published to the Spring application context.
+
+
handleDeleted(String, ExpiringSession) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Causes Session deleted events to be published to the Spring application context.
+
+
handleDestroyed(String, ExpiringSession) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Causes Session destroyed events to be published to the Spring application context.
+
+
handleExpired(String, ExpiringSession) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Causes Session expired events to be published to the Spring application context.
+
+
hasDelta() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
hasDelta() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
hashCode() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
+ + + +

I

+
+
isClient(GemFireCache) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Determines whether the GemFire cache is a client.
+
+
isExpired() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
isIndexableSessionAttributesConfigured() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
+
Determines whether any indexable Session attributes were configured for this FactoryBean.
+
+
isLocal(ClientRegionShortcut) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Determines whether the given ClientRegionShortcut is local only.
+
+
isPeer(GemFireCache) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Determines whether the GemFire cache is a peer.
+
+
isProxy(ClientRegionShortcut) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Determines whether the client ClientRegionShortcut is a proxy-based + shortcut.
+
+
isProxy(Region<?, ?>) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Determines whether the given Region is a PROXY, which would be indicated by the Region + having a DataPolicy of DataPolicy.EMPTY.
+
+
isProxy(RegionShortcut) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Determines whether the peer RegionShortcut is a proxy-based shortcut.
+
+
isSingleton() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Returns true indicating the GemFire cache Region created by this factory is + the sole instance.
+
+
isSingleton() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
+ + + +

L

+
+
logger - Variable in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
 
+
+ + + +

N

+
+
newClientRegion(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Constructs a GemFire cache Region using the client-server GemFire topology + to store and manage Session state in a GemFire server cluster accessible from a + GemFire cache client.
+
+
newIndex() - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
+
Constructs a GemFire Index over the attributes of the HttpSession.
+
+
newInstance() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator
+
 
+
newInstance() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator
+
 
+
newServerRegion(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Constructs a GemFire cache Region using a peer-to-peer (p2p) GemFire + topology to store and manage Session state in a GemFire server cluster accessible + from a GemFire cache client.
+
+
+ + + +

O

+
+
org.springframework.session.data.gemfire - package org.springframework.session.data.gemfire
+
 
+
org.springframework.session.data.gemfire.config.annotation.web.http - package org.springframework.session.data.gemfire.config.annotation.web.http
+
 
+
org.springframework.session.data.gemfire.config.annotation.web.http.support - package org.springframework.session.data.gemfire.config.annotation.web.http.support
+
 
+
org.springframework.session.data.gemfire.support - package org.springframework.session.data.gemfire.support
+
 
+
+ + + +

P

+
+
prepareQuery(String) - Method in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
+
Prepares the appropriate GemFire OQL query based on the indexed Session attribute + name.
+
+
principalNameIndex(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Defines a GemFire Index bean on the GemFire cache Region storing and managing Sessions, + specifically on the 'principalName' property for quick lookup of Sessions by 'principalName'.
+
+
publishEvent(ApplicationEvent) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Publishes the specified ApplicationEvent to the Spring application context.
+
+
+ + + +

R

+
+
registerInterests(boolean) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Decides whether interests will be registered for all keys.
+
+
removeAttribute(String) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
removeAttribute(String) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
+ + + +

S

+
+
save(ExpiringSession) - Method in class org.springframework.session.data.gemfire.GemFireOperationsSessionRepository
+
+
Saves the specified ExpiringSession to GemFire.
+
+
sessionAttributesIndex(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Defines a GemFire Index bean on the GemFire cache Region storing and managing Sessions, + specifically on all Session attributes for quick lookup and queries on Session attribute names + with a given value.
+
+
SessionAttributesIndexFactoryBean - Class in org.springframework.session.data.gemfire.config.annotation.web.http.support
+
+
The SessionAttributesIndexFactoryBean class is a Spring FactoryBean that creates a GemFire Index + on the session attributes of the HttpSession object.
+
+
SessionAttributesIndexFactoryBean() - Constructor for class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
sessionRegion(GemFireCache, RegionAttributes<Object, ExpiringSession>) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Defines a Spring GemFire Cache Region + bean used to store and manage Sessions using either a client-server or peer-to-peer + (p2p) topology.
+
+
sessionRegionAttributes(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Defines a Spring GemFire RegionAttributes bean used to configure and + initialize the GemFire cache Region storing Sessions.
+
+
sessionRegionTemplate(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Defines a Spring GemfireTemplate bean used to interact with GemFire's (Client)Cache + Region storing Sessions.
+
+
sessionRepository(GemfireOperations) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Defines the Spring SessionRepository bean used to interact with GemFire as a Spring + Session provider.
+
+
setApplicationEventPublisher(ApplicationEventPublisher) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Sets the ApplicationEventPublisher used to publish Session events corresponding to + GemFire cache events.
+
+
setAttribute(String, Object) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
setAttribute(String, Object) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
setBeanClassLoader(ClassLoader) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Sets a reference to the ClassLoader used to load bean definition class + types in a Spring context.
+
+
setBeanFactory(BeanFactory) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Sets a reference to the Spring BeanFactory responsible for + creating GemFire components.
+
+
setBeanFactory(BeanFactory) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
setBeanName(String) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
setClientRegionShortcut(ClientRegionShortcut) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Sets the ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions.
+
+
setClientRegionShortcut(ClientRegionShortcut) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Sets the Region data policy used by the GemFire cache client to manage + Session state.
+
+
setGemfireCache(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Sets a reference to the GemFire cache used to construct the appropriate + Region.
+
+
setGemFireCache(GemFireCache) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
setImportMetadata(AnnotationMetadata) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Callback with the AnnotationMetadata of the class containing @Import + annotation that imported this @Configuration class.
+
+
setIndexableSessionAttributes(String[]) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Sets the names of all Session attributes that should be indexed by GemFire.
+
+
setIndexableSessionAttributes(String[]) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
setLastAccessedTime(long) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
setMaxInactiveIntervalInSeconds(int) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
setMaxInactiveIntervalInSeconds(int) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Sets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
+
+
setMaxInactiveIntervalInSeconds(int) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Sets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
+
+
setPoolName(String) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Sets the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
+
+
setPoolName(String) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Sets the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
+
+
setPrincipalName(String) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
setRegionAttributes(RegionAttributes<K, V>) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Sets the GemFire RegionAttributes used to configure the GemFire cache + Region used to store and manage Session state.
+
+
setRegionName(String) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Sets the name of the GemFire cache Region use to store and manage Session + state.
+
+
setRegionName(String) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
+
 
+
setServerRegionShortcut(RegionShortcut) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Sets the RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions.
+
+
setServerRegionShortcut(RegionShortcut) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean
+
+
Sets the Region data policy used by the GemFire peer cache to manage + Session state.
+
+
setSpringSessionGemFireRegionName(String) - Method in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
+
Sets the name of the Gemfire (Client)Cache Region used to store Sessions.
+
+
SPRING_SECURITY_CONTEXT - Static variable in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
SPRING_SESSION_GEMFIRE_REGION_KEY_CONSTRAINT - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
 
+
SPRING_SESSION_GEMFIRE_REGION_VALUE_CONSTRAINT - Static variable in class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
+
 
+
+ + + +

T

+
+
TO_STRING_DATE_FORMAT - Static variable in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
toData(DataOutput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
toData(DataOutput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
toDelta(DataOutput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
toDelta(DataOutput) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
toRegionPath(String) - Static method in class org.springframework.session.data.gemfire.support.GemFireUtils
+
+
Converts a Region name to a Region path.
+
+
toString() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
+
 
+
toString() - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
+
 
+
touch(T) - Method in class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
+
+
Updates the ExpiringSession.setLastAccessedTime(long) property of the ExpiringSession.
+
+
+A C D E F G H I L N O P R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/spring-session-data-geode/build/docs/javadoc/index.html b/spring-session-data-geode/build/docs/javadoc/index.html new file mode 100644 index 0000000..a489be4 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/index.html @@ -0,0 +1,75 @@ + + + + + +spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSession.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSession.html new file mode 100644 index 0000000..deb389b --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSession.html @@ -0,0 +1,833 @@ + + + + + +AbstractGemFireOperationsSessionRepository.GemFireSession (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire
+

Class AbstractGemFireOperationsSessionRepository.GemFireSession

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<org.springframework.session.ExpiringSession>, org.apache.geode.DataSerializable, org.apache.geode.Delta, org.springframework.session.ExpiringSession, org.springframework.session.Session
    +
    +
    +
    Enclosing class:
    +
    AbstractGemFireOperationsSessionRepository
    +
    +
    +
    +
    public static class AbstractGemFireOperationsSessionRepository.GemFireSession
    +extends java.lang.Object
    +implements java.lang.Comparable<org.springframework.session.ExpiringSession>, org.apache.geode.DataSerializable, org.apache.geode.Delta, org.springframework.session.ExpiringSession
    +
    GemFireSession is a GemFire representation model of a Spring ExpiringSession + that stores and manages Session state information in GemFire. This class implements + GemFire's DataSerializable interface to better handle replication of Session + state information across the GemFire cluster.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_ALLOW_JAVA_SERIALIZATION

        +
        protected static final boolean DEFAULT_ALLOW_JAVA_SERIALIZATION
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        TO_STRING_DATE_FORMAT

        +
        protected static final java.text.DateFormat TO_STRING_DATE_FORMAT
        +
      • +
      + + + +
        +
      • +

        SPRING_SECURITY_CONTEXT

        +
        protected static final java.lang.String SPRING_SECURITY_CONTEXT
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireSession

        +
        protected GemFireSession()
        +
      • +
      + + + +
        +
      • +

        GemFireSession

        +
        protected GemFireSession(java.lang.String id)
        +
      • +
      + + + +
        +
      • +

        GemFireSession

        +
        protected GemFireSession(org.springframework.session.ExpiringSession session)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + + + + + + + + + + + + + +
        +
      • +

        allowJavaSerialization

        +
        protected boolean allowJavaSerialization()
        +
      • +
      + + + +
        +
      • +

        getId

        +
        public java.lang.String getId()
        +
        +
        Specified by:
        +
        getId in interface org.springframework.session.Session
        +
        +
      • +
      + + + +
        +
      • +

        getCreationTime

        +
        public long getCreationTime()
        +
        +
        Specified by:
        +
        getCreationTime in interface org.springframework.session.ExpiringSession
        +
        +
      • +
      + + + +
        +
      • +

        setAttribute

        +
        public void setAttribute(java.lang.String attributeName,
        +                         java.lang.Object attributeValue)
        +
        +
        Specified by:
        +
        setAttribute in interface org.springframework.session.Session
        +
        +
      • +
      + + + +
        +
      • +

        removeAttribute

        +
        public void removeAttribute(java.lang.String attributeName)
        +
        +
        Specified by:
        +
        removeAttribute in interface org.springframework.session.Session
        +
        +
      • +
      + + + +
        +
      • +

        getAttribute

        +
        public <T> T getAttribute(java.lang.String attributeName)
        +
        +
        Specified by:
        +
        getAttribute in interface org.springframework.session.Session
        +
        +
      • +
      + + + +
        +
      • +

        getAttributeNames

        +
        public java.util.Set<java.lang.String> getAttributeNames()
        +
        +
        Specified by:
        +
        getAttributeNames in interface org.springframework.session.Session
        +
        +
      • +
      + + + + + + + +
        +
      • +

        isExpired

        +
        public boolean isExpired()
        +
        +
        Specified by:
        +
        isExpired in interface org.springframework.session.ExpiringSession
        +
        +
      • +
      + + + +
        +
      • +

        setLastAccessedTime

        +
        public void setLastAccessedTime(long lastAccessedTime)
        +
        +
        Specified by:
        +
        setLastAccessedTime in interface org.springframework.session.ExpiringSession
        +
        +
      • +
      + + + +
        +
      • +

        getLastAccessedTime

        +
        public long getLastAccessedTime()
        +
        +
        Specified by:
        +
        getLastAccessedTime in interface org.springframework.session.ExpiringSession
        +
        +
      • +
      + + + +
        +
      • +

        setMaxInactiveIntervalInSeconds

        +
        public void setMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds)
        +
        +
        Specified by:
        +
        setMaxInactiveIntervalInSeconds in interface org.springframework.session.ExpiringSession
        +
        +
      • +
      + + + +
        +
      • +

        getMaxInactiveIntervalInSeconds

        +
        public int getMaxInactiveIntervalInSeconds()
        +
        +
        Specified by:
        +
        getMaxInactiveIntervalInSeconds in interface org.springframework.session.ExpiringSession
        +
        +
      • +
      + + + +
        +
      • +

        setPrincipalName

        +
        public void setPrincipalName(java.lang.String principalName)
        +
      • +
      + + + +
        +
      • +

        getPrincipalName

        +
        public java.lang.String getPrincipalName()
        +
      • +
      + + + +
        +
      • +

        toData

        +
        public void toData(java.io.DataOutput out)
        +            throws java.io.IOException
        +
        +
        Specified by:
        +
        toData in interface org.apache.geode.DataSerializable
        +
        Throws:
        +
        java.io.IOException
        +
        +
      • +
      + + + +
        +
      • +

        fromData

        +
        public void fromData(java.io.DataInput in)
        +              throws java.lang.ClassNotFoundException,
        +                     java.io.IOException
        +
        +
        Specified by:
        +
        fromData in interface org.apache.geode.DataSerializable
        +
        Throws:
        +
        java.lang.ClassNotFoundException
        +
        java.io.IOException
        +
        +
      • +
      + + + +
        +
      • +

        hasDelta

        +
        public boolean hasDelta()
        +
        +
        Specified by:
        +
        hasDelta in interface org.apache.geode.Delta
        +
        +
      • +
      + + + +
        +
      • +

        toDelta

        +
        public void toDelta(java.io.DataOutput out)
        +             throws java.io.IOException
        +
        +
        Specified by:
        +
        toDelta in interface org.apache.geode.Delta
        +
        Throws:
        +
        java.io.IOException
        +
        +
      • +
      + + + +
        +
      • +

        fromDelta

        +
        public void fromDelta(java.io.DataInput in)
        +               throws java.io.IOException
        +
        +
        Specified by:
        +
        fromDelta in interface org.apache.geode.Delta
        +
        Throws:
        +
        java.io.IOException
        +
        +
      • +
      + + + +
        +
      • +

        compareTo

        +
        public int compareTo(org.springframework.session.ExpiringSession session)
        +
        +
        Specified by:
        +
        compareTo in interface java.lang.Comparable<org.springframework.session.ExpiringSession>
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals(java.lang.Object obj)
        +
        +
        Overrides:
        +
        equals in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        +
        Overrides:
        +
        hashCode in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes.html new file mode 100644 index 0000000..01c7558 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes.html @@ -0,0 +1,611 @@ + + + + + +AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire
+

Class AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.util.AbstractMap<java.lang.String,java.lang.Object>
    • +
    • +
        +
      • org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.util.Map<java.lang.String,java.lang.Object>, org.apache.geode.DataSerializable, org.apache.geode.Delta
    +
    +
    +
    Enclosing class:
    +
    AbstractGemFireOperationsSessionRepository
    +
    +
    +
    +
    public static class AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes
    +extends java.util.AbstractMap<java.lang.String,java.lang.Object>
    +implements org.apache.geode.DataSerializable, org.apache.geode.Delta
    +
    The GemFireSessionAttributes class is a container for Session attributes implementing + both the DataSerializable and Delta GemFire interfaces for efficient + storage and distribution (replication) in GemFire. Additionally, GemFireSessionAttributes + extends AbstractMap providing Map-like behavior since attributes of a Session + are effectively a name to value mapping.
    +
    +
    See Also:
    +
    AbstractMap, +DataSerializable, +DataSerializer, +Delta, +Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Nested Class Summary

      +
        +
      • + + +

        Nested classes/interfaces inherited from class java.util.AbstractMap

        +java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>
      • +
      +
        +
      • + + +

        Nested classes/interfaces inherited from interface org.apache.geode.DataSerializable

        +org.apache.geode.DataSerializable.Replaceable
      • +
      +
        +
      • + + +

        Nested classes/interfaces inherited from interface java.util.Map

        +java.util.Map.Entry<K,V>
      • +
      +
    • +
    + + + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      protected booleanallowJavaSerialization() 
      java.util.Set<java.util.Map.Entry<java.lang.String,java.lang.Object>>entrySet() 
      voidfrom(AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes) 
      voidfrom(org.springframework.session.Session session) 
      voidfromData(java.io.DataInput in) 
      voidfromDelta(java.io.DataInput in) 
      <T> TgetAttribute(java.lang.String attributeName) 
      java.util.Set<java.lang.String>getAttributeNames() 
      booleanhasDelta() 
      voidremoveAttribute(java.lang.String attributeName) 
      voidsetAttribute(java.lang.String attributeName, + java.lang.Object attributeValue) 
      voidtoData(java.io.DataOutput out) 
      voidtoDelta(java.io.DataOutput out) 
      java.lang.StringtoString() 
      +
        +
      • + + +

        Methods inherited from class java.util.AbstractMap

        +clear, clone, containsKey, containsValue, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +finalize, getClass, notify, notifyAll, wait, wait, wait
      • +
      +
        +
      • + + +

        Methods inherited from interface java.util.Map

        +compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_ALLOW_JAVA_SERIALIZATION

        +
        protected static final boolean DEFAULT_ALLOW_JAVA_SERIALIZATION
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireSessionAttributes

        +
        protected GemFireSessionAttributes()
        +
      • +
      + + + +
        +
      • +

        GemFireSessionAttributes

        +
        protected GemFireSessionAttributes(java.lang.Object lock)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setAttribute

        +
        public void setAttribute(java.lang.String attributeName,
        +                         java.lang.Object attributeValue)
        +
      • +
      + + + +
        +
      • +

        removeAttribute

        +
        public void removeAttribute(java.lang.String attributeName)
        +
      • +
      + + + +
        +
      • +

        getAttribute

        +
        public <T> T getAttribute(java.lang.String attributeName)
        +
      • +
      + + + +
        +
      • +

        getAttributeNames

        +
        public java.util.Set<java.lang.String> getAttributeNames()
        +
      • +
      + + + +
        +
      • +

        allowJavaSerialization

        +
        protected boolean allowJavaSerialization()
        +
      • +
      + + + +
        +
      • +

        entrySet

        +
        public java.util.Set<java.util.Map.Entry<java.lang.String,java.lang.Object>> entrySet()
        +
        +
        Specified by:
        +
        entrySet in interface java.util.Map<java.lang.String,java.lang.Object>
        +
        Specified by:
        +
        entrySet in class java.util.AbstractMap<java.lang.String,java.lang.Object>
        +
        +
      • +
      + + + +
        +
      • +

        from

        +
        public void from(org.springframework.session.Session session)
        +
      • +
      + + + + + + + +
        +
      • +

        toData

        +
        public void toData(java.io.DataOutput out)
        +            throws java.io.IOException
        +
        +
        Specified by:
        +
        toData in interface org.apache.geode.DataSerializable
        +
        Throws:
        +
        java.io.IOException
        +
        +
      • +
      + + + +
        +
      • +

        fromData

        +
        public void fromData(java.io.DataInput in)
        +              throws java.io.IOException,
        +                     java.lang.ClassNotFoundException
        +
        +
        Specified by:
        +
        fromData in interface org.apache.geode.DataSerializable
        +
        Throws:
        +
        java.io.IOException
        +
        java.lang.ClassNotFoundException
        +
        +
      • +
      + + + +
        +
      • +

        hasDelta

        +
        public boolean hasDelta()
        +
        +
        Specified by:
        +
        hasDelta in interface org.apache.geode.Delta
        +
        +
      • +
      + + + +
        +
      • +

        toDelta

        +
        public void toDelta(java.io.DataOutput out)
        +             throws java.io.IOException
        +
        +
        Specified by:
        +
        toDelta in interface org.apache.geode.Delta
        +
        Throws:
        +
        java.io.IOException
        +
        +
      • +
      + + + +
        +
      • +

        fromDelta

        +
        public void fromDelta(java.io.DataInput in)
        +               throws org.apache.geode.InvalidDeltaException,
        +                      java.io.IOException
        +
        +
        Specified by:
        +
        fromDelta in interface org.apache.geode.Delta
        +
        Throws:
        +
        org.apache.geode.InvalidDeltaException
        +
        java.io.IOException
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        +
        Overrides:
        +
        toString in class java.util.AbstractMap<java.lang.String,java.lang.Object>
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator.html new file mode 100644 index 0000000..4721d1b --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator.html @@ -0,0 +1,307 @@ + + + + + +AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire
+

Class AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.geode.Instantiator
    • +
    • +
        +
      • org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator
      • +
      +
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireSessionAttributesInstantiator

        +
        public GemFireSessionAttributesInstantiator(java.lang.Class<? extends org.apache.geode.DataSerializable> type,
        +                                            int id)
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator.html new file mode 100644 index 0000000..fcfe16b --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator.html @@ -0,0 +1,307 @@ + + + + + +AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire
+

Class AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.geode.Instantiator
    • +
    • +
        +
      • org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator
      • +
      +
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireSessionInstantiator

        +
        public GemFireSessionInstantiator(java.lang.Class<? extends org.apache.geode.DataSerializable> type,
        +                                  int id)
        +
      • +
      +
    • +
    + + +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.html new file mode 100644 index 0000000..0734c11 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.html @@ -0,0 +1,864 @@ + + + + + +AbstractGemFireOperationsSessionRepository (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire
+

Class AbstractGemFireOperationsSessionRepository

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.geode.cache.util.CacheListenerAdapter<java.lang.Object,org.springframework.session.ExpiringSession>
    • +
    • +
        +
      • org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    org.apache.geode.cache.CacheCallback, org.apache.geode.cache.CacheListener<java.lang.Object,org.springframework.session.ExpiringSession>, org.springframework.beans.factory.Aware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationEventPublisherAware, org.springframework.session.FindByIndexNameSessionRepository<org.springframework.session.ExpiringSession>, org.springframework.session.SessionRepository<org.springframework.session.ExpiringSession>
    +
    +
    +
    Direct Known Subclasses:
    +
    GemFireOperationsSessionRepository
    +
    +
    +
    +
    public abstract class AbstractGemFireOperationsSessionRepository
    +extends org.apache.geode.cache.util.CacheListenerAdapter<java.lang.Object,org.springframework.session.ExpiringSession>
    +implements org.springframework.context.ApplicationEventPublisherAware, org.springframework.session.FindByIndexNameSessionRepository<org.springframework.session.ExpiringSession>, org.springframework.beans.factory.InitializingBean
    +
    AbstractGemFireOperationsSessionRepository is an abstract base class encapsulating functionality + common to all implementations that support SessionRepository operations backed by Apache Geode.
    +
    +
    Since:
    +
    1.1.0
    +
    See Also:
    +
    DataSerializable, +DataSerializer, +Delta, +Instantiator, +Region, +CacheListenerAdapter, +InitializingBean, +ApplicationEventPublisher, +ApplicationEventPublisherAware, +GemfireOperations, +Expression, +ExpiringSession, +FindByIndexNameSessionRepository, +Session, +SessionRepository, +GemFireHttpSessionConfiguration, +EnableGemFireHttpSession
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      protected org.apache.commons.logging.Loglogger 
      +
        +
      • + + +

        Fields inherited from interface org.springframework.session.FindByIndexNameSessionRepository

        +PRINCIPAL_NAME_INDEX_NAME
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      AbstractGemFireOperationsSessionRepository(org.springframework.data.gemfire.GemfireOperations template) +
      Constructs an instance of AbstractGemFireOperationsSessionRepository with a + required GemfireOperations instance used to perform GemFire data access operations + and interactions supporting the SessionRepository operations.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voidafterCreate(org.apache.geode.cache.EntryEvent<java.lang.Object,org.springframework.session.ExpiringSession> event) +
      Callback method triggered when an entry is created in the GemFire cache Region.
      +
      voidafterDestroy(org.apache.geode.cache.EntryEvent<java.lang.Object,org.springframework.session.ExpiringSession> event) +
      Callback method triggered when an entry is destroyed in the GemFire cache + Region.
      +
      voidafterInvalidate(org.apache.geode.cache.EntryEvent<java.lang.Object,org.springframework.session.ExpiringSession> event) +
      Callback method triggered when an entry is invalidated in the GemFire cache + Region.
      +
      voidafterPropertiesSet() +
      Callback method during Spring bean initialization that will capture the fully-qualified name + of the GemFire cache Region used to manage Session state and register this SessionRepository + as a GemFire CacheListener.
      +
      protected org.springframework.session.ExpiringSessiondelete(org.springframework.session.Session session) +
      Deletes the given Session from GemFire.
      +
      protected org.springframework.context.ApplicationEventPublishergetApplicationEventPublisher() +
      Gets the ApplicationEventPublisher used to publish Session events corresponding to + GemFire cache events.
      +
      protected java.lang.StringgetFullyQualifiedRegionName() +
      Gets the fully-qualified name of the GemFire cache Region used to store and + manage Session data.
      +
      intgetMaxInactiveIntervalInSeconds() +
      Gets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
      +
      org.springframework.data.gemfire.GemfireOperationsgetTemplate() +
      Gets a reference to the GemfireOperations (template) used to perform data access + operations and other interactions on the GemFire cache Region backing this + SessionRepository.
      +
      protected voidhandleCreated(java.lang.String sessionId, + org.springframework.session.ExpiringSession session) +
      Causes Session created events to be published to the Spring application context.
      +
      protected voidhandleDeleted(java.lang.String sessionId, + org.springframework.session.ExpiringSession session) +
      Causes Session deleted events to be published to the Spring application context.
      +
      protected voidhandleDestroyed(java.lang.String sessionId, + org.springframework.session.ExpiringSession session) +
      Causes Session destroyed events to be published to the Spring application context.
      +
      protected voidhandleExpired(java.lang.String sessionId, + org.springframework.session.ExpiringSession session) +
      Causes Session expired events to be published to the Spring application context.
      +
      protected voidpublishEvent(org.springframework.context.ApplicationEvent event) +
      Publishes the specified ApplicationEvent to the Spring application context.
      +
      voidsetApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher) +
      Sets the ApplicationEventPublisher used to publish Session events corresponding to + GemFire cache events.
      +
      voidsetMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds) +
      Sets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
      +
      protected <T extends org.springframework.session.ExpiringSession>
      T
      touch(T expiringSession) +
      Updates the ExpiringSession.setLastAccessedTime(long) property of the ExpiringSession.
      +
      +
        +
      • + + +

        Methods inherited from class org.apache.geode.cache.util.CacheListenerAdapter

        +afterRegionClear, afterRegionCreate, afterRegionDestroy, afterRegionInvalidate, afterRegionLive, afterUpdate, close
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
        +
      • + + +

        Methods inherited from interface org.springframework.session.FindByIndexNameSessionRepository

        +findByIndexNameAndIndexValue
      • +
      +
        +
      • + + +

        Methods inherited from interface org.springframework.session.SessionRepository

        +createSession, delete, getSession, save
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        logger

        +
        protected final org.apache.commons.logging.Log logger
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AbstractGemFireOperationsSessionRepository

        +
        public AbstractGemFireOperationsSessionRepository(org.springframework.data.gemfire.GemfireOperations template)
        +
        Constructs an instance of AbstractGemFireOperationsSessionRepository with a + required GemfireOperations instance used to perform GemFire data access operations + and interactions supporting the SessionRepository operations.
        +
        +
        Parameters:
        +
        template - the GemfireOperations instance used to interact with GemFire.
        +
        See Also:
        +
        GemfireOperations
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setApplicationEventPublisher

        +
        public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher)
        +
        Sets the ApplicationEventPublisher used to publish Session events corresponding to + GemFire cache events.
        +
        +
        Specified by:
        +
        setApplicationEventPublisher in interface org.springframework.context.ApplicationEventPublisherAware
        +
        Parameters:
        +
        applicationEventPublisher - the Spring ApplicationEventPublisher used to + publish Session-based events.
        +
        See Also:
        +
        ApplicationEventPublisher
        +
        +
      • +
      + + + +
        +
      • +

        getApplicationEventPublisher

        +
        protected org.springframework.context.ApplicationEventPublisher getApplicationEventPublisher()
        +
        Gets the ApplicationEventPublisher used to publish Session events corresponding to + GemFire cache events.
        +
        +
        Returns:
        +
        the Spring ApplicationEventPublisher used to publish Session-based events.
        +
        See Also:
        +
        ApplicationEventPublisher
        +
        +
      • +
      + + + +
        +
      • +

        getFullyQualifiedRegionName

        +
        protected java.lang.String getFullyQualifiedRegionName()
        +
        Gets the fully-qualified name of the GemFire cache Region used to store and + manage Session data.
        +
        +
        Returns:
        +
        a String indicating the fully qualified name of the GemFire cache + Region used to store and manage Session data.
        +
        +
      • +
      + + + +
        +
      • +

        setMaxInactiveIntervalInSeconds

        +
        public void setMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds)
        +
        Sets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
        +
        +
        Parameters:
        +
        maxInactiveIntervalInSeconds - an integer value specifying the maximum + interval in seconds that a Session can remain inactive before it is considered + expired.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxInactiveIntervalInSeconds

        +
        public int getMaxInactiveIntervalInSeconds()
        +
        Gets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
        +
        +
        Returns:
        +
        an integer value specifying the maximum interval in seconds that a Session + can remain inactive before it is considered expired.
        +
        +
      • +
      + + + +
        +
      • +

        getTemplate

        +
        public org.springframework.data.gemfire.GemfireOperations getTemplate()
        +
        Gets a reference to the GemfireOperations (template) used to perform data access + operations and other interactions on the GemFire cache Region backing this + SessionRepository.
        +
        +
        Returns:
        +
        a reference to the GemfireOperations used to interact with GemFire.
        +
        See Also:
        +
        GemfireOperations
        +
        +
      • +
      + + + +
        +
      • +

        afterPropertiesSet

        +
        public void afterPropertiesSet()
        +                        throws java.lang.Exception
        +
        Callback method during Spring bean initialization that will capture the fully-qualified name + of the GemFire cache Region used to manage Session state and register this SessionRepository + as a GemFire CacheListener. + + Additionally, this method registers GemFire Instantiators for the AbstractGemFireOperationsSessionRepository.GemFireSession + and AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes types to optimize GemFire's instantiation logic on deserialization + using the data serialization framework when accessing the Session's state stored in GemFire.
        +
        +
        Specified by:
        +
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        +
        Throws:
        +
        java.lang.Exception - if an error occurs during the initialization process.
        +
        +
      • +
      + + + +
        +
      • +

        afterCreate

        +
        public void afterCreate(org.apache.geode.cache.EntryEvent<java.lang.Object,org.springframework.session.ExpiringSession> event)
        +
        Callback method triggered when an entry is created in the GemFire cache Region.
        +
        +
        Specified by:
        +
        afterCreate in interface org.apache.geode.cache.CacheListener<java.lang.Object,org.springframework.session.ExpiringSession>
        +
        Overrides:
        +
        afterCreate in class org.apache.geode.cache.util.CacheListenerAdapter<java.lang.Object,org.springframework.session.ExpiringSession>
        +
        Parameters:
        +
        event - EntryEvent containing the details of the cache Region operation.
        +
        See Also:
        +
        EntryEvent, +handleCreated(String, ExpiringSession)
        +
        +
      • +
      + + + +
        +
      • +

        afterDestroy

        +
        public void afterDestroy(org.apache.geode.cache.EntryEvent<java.lang.Object,org.springframework.session.ExpiringSession> event)
        +
        Callback method triggered when an entry is destroyed in the GemFire cache + Region.
        +
        +
        Specified by:
        +
        afterDestroy in interface org.apache.geode.cache.CacheListener<java.lang.Object,org.springframework.session.ExpiringSession>
        +
        Overrides:
        +
        afterDestroy in class org.apache.geode.cache.util.CacheListenerAdapter<java.lang.Object,org.springframework.session.ExpiringSession>
        +
        Parameters:
        +
        event - an EntryEvent containing the details of the cache operation.
        +
        See Also:
        +
        EntryEvent, +handleDestroyed(String, ExpiringSession)
        +
        +
      • +
      + + + +
        +
      • +

        afterInvalidate

        +
        public void afterInvalidate(org.apache.geode.cache.EntryEvent<java.lang.Object,org.springframework.session.ExpiringSession> event)
        +
        Callback method triggered when an entry is invalidated in the GemFire cache + Region.
        +
        +
        Specified by:
        +
        afterInvalidate in interface org.apache.geode.cache.CacheListener<java.lang.Object,org.springframework.session.ExpiringSession>
        +
        Overrides:
        +
        afterInvalidate in class org.apache.geode.cache.util.CacheListenerAdapter<java.lang.Object,org.springframework.session.ExpiringSession>
        +
        Parameters:
        +
        event - an EntryEvent containing the details of the cache operation.
        +
        See Also:
        +
        EntryEvent, +handleExpired(String, ExpiringSession)
        +
        +
      • +
      + + + +
        +
      • +

        delete

        +
        protected org.springframework.session.ExpiringSession delete(org.springframework.session.Session session)
        +
        Deletes the given Session from GemFire.
        +
        +
        Parameters:
        +
        session - Session to delete.
        +
        Returns:
        +
        null.
        +
        See Also:
        +
        Session, +SessionRepository.delete(String)
        +
        +
      • +
      + + + +
        +
      • +

        handleCreated

        +
        protected void handleCreated(java.lang.String sessionId,
        +                             org.springframework.session.ExpiringSession session)
        +
        Causes Session created events to be published to the Spring application context.
        +
        +
        Parameters:
        +
        sessionId - a String indicating the ID of the Session.
        +
        session - a reference to the Session triggering the event.
        +
        See Also:
        +
        SessionCreatedEvent, +ExpiringSession, +publishEvent(ApplicationEvent)
        +
        +
      • +
      + + + +
        +
      • +

        handleDeleted

        +
        protected void handleDeleted(java.lang.String sessionId,
        +                             org.springframework.session.ExpiringSession session)
        +
        Causes Session deleted events to be published to the Spring application context.
        +
        +
        Parameters:
        +
        sessionId - a String indicating the ID of the Session.
        +
        session - a reference to the Session triggering the event.
        +
        See Also:
        +
        SessionDeletedEvent, +ExpiringSession, +publishEvent(ApplicationEvent)
        +
        +
      • +
      + + + +
        +
      • +

        handleDestroyed

        +
        protected void handleDestroyed(java.lang.String sessionId,
        +                               org.springframework.session.ExpiringSession session)
        +
        Causes Session destroyed events to be published to the Spring application context.
        +
        +
        Parameters:
        +
        sessionId - a String indicating the ID of the Session.
        +
        session - a reference to the Session triggering the event.
        +
        See Also:
        +
        SessionDestroyedEvent, +ExpiringSession, +publishEvent(ApplicationEvent)
        +
        +
      • +
      + + + +
        +
      • +

        handleExpired

        +
        protected void handleExpired(java.lang.String sessionId,
        +                             org.springframework.session.ExpiringSession session)
        +
        Causes Session expired events to be published to the Spring application context.
        +
        +
        Parameters:
        +
        sessionId - a String indicating the ID of the Session.
        +
        session - a reference to the Session triggering the event.
        +
        See Also:
        +
        SessionExpiredEvent, +ExpiringSession, +publishEvent(ApplicationEvent)
        +
        +
      • +
      + + + +
        +
      • +

        publishEvent

        +
        protected void publishEvent(org.springframework.context.ApplicationEvent event)
        +
        Publishes the specified ApplicationEvent to the Spring application context.
        +
        +
        Parameters:
        +
        event - the ApplicationEvent to publish.
        +
        See Also:
        +
        ApplicationEventPublisher.publishEvent(ApplicationEvent), +ApplicationEvent
        +
        +
      • +
      + + + + + +
        +
      • +

        touch

        +
        protected <T extends org.springframework.session.ExpiringSession> T touch(T expiringSession)
        +
        Updates the ExpiringSession.setLastAccessedTime(long) property of the ExpiringSession.
        +
        +
        Type Parameters:
        +
        T - Class sub-type of the ExpiringSession.
        +
        Parameters:
        +
        expiringSession - ExpiringSession to touch.
        +
        Returns:
        +
        the ExpiringSession.
        +
        See Also:
        +
        ExpiringSession.setLastAccessedTime(long)
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.html new file mode 100644 index 0000000..b3231cc --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.html @@ -0,0 +1,551 @@ + + + + + +GemFireOperationsSessionRepository (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire
+

Class GemFireOperationsSessionRepository

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    org.apache.geode.cache.CacheCallback, org.apache.geode.cache.CacheListener<java.lang.Object,org.springframework.session.ExpiringSession>, org.springframework.beans.factory.Aware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationEventPublisherAware, org.springframework.session.FindByIndexNameSessionRepository<org.springframework.session.ExpiringSession>, org.springframework.session.SessionRepository<org.springframework.session.ExpiringSession>
    +
    +
    +
    +
    public class GemFireOperationsSessionRepository
    +extends AbstractGemFireOperationsSessionRepository
    +
    The GemFireOperationsSessionRepository class is a Spring SessionRepository implementation + that interfaces with and uses GemFire to back and store Spring Sessions.
    +
    +
    Since:
    +
    1.1.0
    +
    See Also:
    +
    GemfireOperations, +ExpiringSession, +AbstractGemFireOperationsSessionRepository
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        FIND_SESSIONS_BY_INDEX_NAME_VALUE_QUERY

        +
        protected static final java.lang.String FIND_SESSIONS_BY_INDEX_NAME_VALUE_QUERY
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY

        +
        protected static final java.lang.String FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireOperationsSessionRepository

        +
        public GemFireOperationsSessionRepository(org.springframework.data.gemfire.GemfireOperations template)
        +
        Constructs an instance of GemFireOperationsSessionRepository initialized with the + required GemfireOperations object used to perform data access operations to manage + Session state.
        +
        +
        Parameters:
        +
        template - the GemfireOperations object used to access and manage Session + state in GemFire.
        +
        See Also:
        +
        GemfireOperations
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        findByIndexNameAndIndexValue

        +
        public java.util.Map<java.lang.String,org.springframework.session.ExpiringSession> findByIndexNameAndIndexValue(java.lang.String indexName,
        +                                                                                                                java.lang.String indexValue)
        +
        Looks up all available Sessions with the particular attribute indexed by name + having the given value.
        +
        +
        Parameters:
        +
        indexName - name of the indexed Session attribute. (e.g. + FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME + ).
        +
        indexValue - value of the indexed Session attribute to search on (e.g. + username).
        +
        Returns:
        +
        a mapping of Session ID to Session instances.
        +
        See Also:
        +
        ExpiringSession, +Map, +prepareQuery(String)
        +
        +
      • +
      + + + +
        +
      • +

        prepareQuery

        +
        protected java.lang.String prepareQuery(java.lang.String indexName)
        +
        Prepares the appropriate GemFire OQL query based on the indexed Session attribute + name.
        +
        +
        Parameters:
        +
        indexName - a String indicating the name of the indexed Session attribute.
        +
        Returns:
        +
        an appropriate GemFire OQL statement for querying on a particular indexed + Session attribute.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getSession

        +
        public org.springframework.session.ExpiringSession getSession(java.lang.String sessionId)
        +
        Gets a copy of an existing, non-expired ExpiringSession by ID. If the + Session is expired, then it is deleted.
        +
        +
        Parameters:
        +
        sessionId - a String indicating the ID of the Session to get.
        +
        Returns:
        +
        an existing ExpiringSession by ID or null if not Session exists.
        +
        See Also:
        +
        AbstractGemFireOperationsSessionRepository.GemFireSession.from(ExpiringSession), +ExpiringSession, +delete(String)
        +
        +
      • +
      + + + +
        +
      • +

        save

        +
        public void save(org.springframework.session.ExpiringSession session)
        +
        Saves the specified ExpiringSession to GemFire.
        +
        +
        Parameters:
        +
        session - the ExpiringSession to save.
        +
        See Also:
        +
        GemfireOperations.put(Object, Object), +ExpiringSession
        +
        +
      • +
      + + + +
        +
      • +

        delete

        +
        public void delete(java.lang.String sessionId)
        +
        Deletes (removes) any existing ExpiringSession from GemFire. This operation + also results in a SessionDeletedEvent.
        +
        +
        Parameters:
        +
        sessionId - a String indicating the ID of the Session to remove from GemFire.
        +
        See Also:
        +
        GemfireOperations.remove(Object), +AbstractGemFireOperationsSessionRepository.handleDeleted(String, ExpiringSession)
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.html new file mode 100644 index 0000000..0fff002 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.html @@ -0,0 +1,474 @@ + + + + + +EnableGemFireHttpSession (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire.config.annotation.web.http
+

Annotation Type EnableGemFireHttpSession

+
+
+
+
    +
  • +
    +
    +
    @Documented
    + @Retention(value=RUNTIME)
    + @Target(value=TYPE)
    + @Configuration
    + @Import(value=GemFireHttpSessionConfiguration.class)
    +public @interface EnableGemFireHttpSession
    +
    Add this annotation to a Spring @Configuration class to expose the SessionRepositoryFilter + as a bean named springSessionRepositoryFilter back the HttpSession + by Pivotal GemFire or Apache Geode. + + In order to use this annotation, a single Pivotal GemFire/Apache Geode Cache + or ClientCache instance must be provided. + + For example: + +
    + 
    +  @Configuration
    +  @EnableGemFireHttpSession
    + public class GemFirePeerCacheHttpSessionConfiguration {
    +
    +      @Bean
    +     public Properties gemfireProperties() {
    +
    +       Properties gemfireProperties = new Properties();
    +
    +       gemfireProperties.setProperty("name", "ExamplePeer");
    +       gemfireProperties.setProperty("mcast-port", "0");
    +       gemfireProperties.setProperty("log-level", "warning");
    +
    +       return gemfireProperties;
    +     }
    +
    +      @Bean
    +     public CacheFactoryBean gemfireCache() throws Exception {
    +
    +       CacheFactoryBean cache  = new CacheFactoryBean();
    +
    +       cache.setClose(true);
    +       cache.setProperties(gemfireProperties());
    +
    +       return cache;
    +     }
    + }
    +  
    + + Alternatively, Spring Session can be configured to use Pivotal GemFire/Apache Geode as a cache client + with a dedicated Pivotal GemFire/Apache Geode cluster and a ClientCache. + + For example: + + + @Configuration + @EnableGemFireHttpSession + public class GemFireClientCacheHttpSessionConfiguration { + + @Bean + public Properties gemfireProperties() { + + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", "ExampleClient"); + gemfireProperties.setProperty("log-level", "warning"); + + return gemfireProperties; + } + + @Bean + public ClientCacheFactoryBean gemfireCache() throws Exception { + + ClientCacheFactoryBean clientCache = new ClientCacheFactoryBean(); + + clientCache.setClose(true) + clientCache.setProperties(gemfireProperties()); + + return clientCache; + } + + @Bean + public PoolFactoryBean gemfirePool() { + + PoolFactoryBean pool = new PoolFactoryBean(); + + pool.addServer(new ConnectionEndpoint("localhost", 40404); + + return pool; + } + } + + + More advanced configurations can extend GemFireHttpSessionConfiguration instead.
    +
    +
    Since:
    +
    1.1.0
    +
    See Also:
    +
    EnableSpringHttpSession, +GemFireHttpSessionConfiguration
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Optional Element Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Optional Elements 
      Modifier and TypeOptional Element and Description
      org.apache.geode.cache.client.ClientRegionShortcutclientRegionShortcut +
      Defines the GemFire ClientCache Region DataPolicy.
      +
      java.lang.String[]indexableSessionAttributes +
      Identifies the Session attributes by name that should be indexed for query + operations.
      +
      intmaxInactiveIntervalInSeconds +
      Defines the maximum interval in seconds that a Session can remain inactive before + it is considered expired.
      +
      java.lang.StringpoolName +
      Specifies the name of the specific GemFire Pool used + by the Spring Session Data GemFire client Region ('ClusteredSpringSessions') when performing + cache operations.
      +
      java.lang.StringregionName +
      Defines the name of the GemFire (Client)Cache Region used to store Sessions.
      +
      org.apache.geode.cache.RegionShortcutserverRegionShortcut +
      Defines the GemFire, Peer Cache Region DataPolicy.
      +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Element Detail

      + + + +
        +
      • +

        clientRegionShortcut

        +
        public abstract org.apache.geode.cache.client.ClientRegionShortcut clientRegionShortcut
        +
        Defines the GemFire ClientCache Region DataPolicy.
        +
        +
        Returns:
        +
        a ClientRegionShortcut used to specify and configure the ClientCache Region + DataPolicy.
        +
        See Also:
        +
        ClientRegionShortcut
        +
        +
        +
        Default:
        +
        org.apache.geode.cache.client.ClientRegionShortcut.PROXY
        +
        +
      • +
      +
    • +
    +
      +
    • + + +
        +
      • +

        indexableSessionAttributes

        +
        public abstract java.lang.String[] indexableSessionAttributes
        +
        Identifies the Session attributes by name that should be indexed for query + operations. For instance, find all Sessions in GemFire having attribute A defined + with value X.
        +
        +
        Returns:
        +
        an array of Strings identifying the names of Session attributes to index.
        +
        +
        +
        Default:
        +
        {}
        +
        +
      • +
      +
    • +
    +
      +
    • + + +
        +
      • +

        maxInactiveIntervalInSeconds

        +
        public abstract int maxInactiveIntervalInSeconds
        +
        Defines the maximum interval in seconds that a Session can remain inactive before + it is considered expired. Defaults to 1800 seconds, or 30 minutes.
        +
        +
        Returns:
        +
        an integer value defining the maximum inactive interval in seconds for + declaring a Session expired.
        +
        +
        +
        Default:
        +
        1800
        +
        +
      • +
      +
    • +
    +
      +
    • + + +
        +
      • +

        poolName

        +
        public abstract java.lang.String poolName
        +
        Specifies the name of the specific GemFire Pool used + by the Spring Session Data GemFire client Region ('ClusteredSpringSessions') when performing + cache operations. This is attribute is only used in the client/server topology.
        +
        +
        Returns:
        +
        the name of the GemFire Pool to be used + by the client Region used to manage (HTTP) Sessions.
        +
        See Also:
        +
        GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME
        +
        +
        +
        Default:
        +
        "gemfirePool"
        +
        +
      • +
      +
    • +
    +
      +
    • + + +
        +
      • +

        regionName

        +
        public abstract java.lang.String regionName
        +
        Defines the name of the GemFire (Client)Cache Region used to store Sessions.
        +
        +
        Returns:
        +
        a String specifying the name of the GemFire (Client)Cache Region used to + store Sessions.
        +
        See Also:
        +
        Region.getName()
        +
        +
        +
        Default:
        +
        "ClusteredSpringSessions"
        +
        +
      • +
      +
    • +
    +
      +
    • + + +
        +
      • +

        serverRegionShortcut

        +
        public abstract org.apache.geode.cache.RegionShortcut serverRegionShortcut
        +
        Defines the GemFire, Peer Cache Region DataPolicy.
        +
        +
        Returns:
        +
        a RegionShortcut used to specify and configure the Peer Cache Region + DataPolicy.
        +
        See Also:
        +
        RegionShortcut
        +
        +
        +
        Default:
        +
        org.apache.geode.cache.RegionShortcut.PARTITION
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.html new file mode 100644 index 0000000..d49bed4 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.html @@ -0,0 +1,1021 @@ + + + + + +GemFireHttpSessionConfiguration (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire.config.annotation.web.http
+

Class GemFireHttpSessionConfiguration

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration
    • +
    • +
        +
      • org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.context.annotation.ImportAware, org.springframework.context.ApplicationContextAware
    +
    +
    +
    +
    @Configuration
    +public class GemFireHttpSessionConfiguration
    +extends org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration
    +implements org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.context.annotation.ImportAware
    +
    The GemFireHttpSessionConfiguration class is a Spring @Configuration class + used to configure and initialize Pivotal GemFire/Apache Geode as a clustered, replicated and distributed + HttpSession provider implementation in Spring ExpiringSession.
    +
    +
    Since:
    +
    1.1.0
    +
    See Also:
    +
    ExpirationAttributes, +GemFireCache, +Region, +RegionAttributes, +RegionShortcut, +ClientRegionShortcut, +Pool, +BeanClassLoaderAware, +Bean, +Configuration, +ImportAware, +AnnotationMetadata, +GemfireOperations, +GemfireTemplate, +IndexFactoryBean, +IndexType, +RegionAttributesFactoryBean, +ExpiringSession, +SpringHttpSessionConfiguration, +GemFireOperationsSessionRepository, +EnableGemFireHttpSession, +GemFireCacheTypeAwareRegionFactoryBean, +SessionAttributesIndexFactoryBean
    +
    +
  • +
+
+
+
    +
  • + + + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      protected java.lang.ClassLoadergetBeanClassLoader() +
      Gets a reference to the ClassLoader used to load bean definition class + types in a Spring context.
      +
      protected org.apache.geode.cache.client.ClientRegionShortcutgetClientRegionShortcut() +
      Gets the ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions.
      +
      protected java.lang.String[]getIndexableSessionAttributes() +
      Get the names of all Session attributes that should be indexed by GemFire.
      +
      protected intgetMaxInactiveIntervalInSeconds() +
      Gets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
      +
      protected java.lang.StringgetPoolName() +
      Returns the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
      +
      protected org.apache.geode.cache.RegionShortcutgetServerRegionShortcut() +
      Gets the RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions.
      +
      protected java.lang.StringgetSpringSessionGemFireRegionName() +
      Gets the name of the Gemfire (Client)Cache Region used to store Sessions.
      +
      org.springframework.data.gemfire.IndexFactoryBeanprincipalNameIndex(org.apache.geode.cache.GemFireCache gemfireCache) +
      Defines a GemFire Index bean on the GemFire cache Region storing and managing Sessions, + specifically on the 'principalName' property for quick lookup of Sessions by 'principalName'.
      +
      SessionAttributesIndexFactoryBeansessionAttributesIndex(org.apache.geode.cache.GemFireCache gemfireCache) +
      Defines a GemFire Index bean on the GemFire cache Region storing and managing Sessions, + specifically on all Session attributes for quick lookup and queries on Session attribute names + with a given value.
      +
      GemFireCacheTypeAwareRegionFactoryBean<java.lang.Object,org.springframework.session.ExpiringSession>sessionRegion(org.apache.geode.cache.GemFireCache gemfireCache, + org.apache.geode.cache.RegionAttributes<java.lang.Object,org.springframework.session.ExpiringSession> sessionRegionAttributes) +
      Defines a Spring GemFire Cache Region + bean used to store and manage Sessions using either a client-server or peer-to-peer + (p2p) topology.
      +
      org.springframework.data.gemfire.RegionAttributesFactoryBeansessionRegionAttributes(org.apache.geode.cache.GemFireCache gemfireCache) +
      Defines a Spring GemFire RegionAttributes bean used to configure and + initialize the GemFire cache Region storing Sessions.
      +
      org.springframework.data.gemfire.GemfireTemplatesessionRegionTemplate(org.apache.geode.cache.GemFireCache gemFireCache) +
      Defines a Spring GemfireTemplate bean used to interact with GemFire's (Client)Cache + Region storing Sessions.
      +
      GemFireOperationsSessionRepositorysessionRepository(org.springframework.data.gemfire.GemfireOperations gemfireOperations) +
      Defines the Spring SessionRepository bean used to interact with GemFire as a Spring + Session provider.
      +
      voidsetBeanClassLoader(java.lang.ClassLoader beanClassLoader) +
      Sets a reference to the ClassLoader used to load bean definition class + types in a Spring context.
      +
      voidsetClientRegionShortcut(org.apache.geode.cache.client.ClientRegionShortcut shortcut) +
      Sets the ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions.
      +
      voidsetImportMetadata(org.springframework.core.type.AnnotationMetadata importMetadata) +
      Callback with the AnnotationMetadata of the class containing @Import + annotation that imported this @Configuration class.
      +
      voidsetIndexableSessionAttributes(java.lang.String[] indexableSessionAttributes) +
      Sets the names of all Session attributes that should be indexed by GemFire.
      +
      voidsetMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds) +
      Sets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
      +
      voidsetPoolName(java.lang.String poolName) +
      Sets the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
      +
      voidsetServerRegionShortcut(org.apache.geode.cache.RegionShortcut shortcut) +
      Sets the RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions.
      +
      voidsetSpringSessionGemFireRegionName(java.lang.String springSessionGemFireRegionName) +
      Sets the name of the Gemfire (Client)Cache Region used to store Sessions.
      +
      +
        +
      • + + +

        Methods inherited from class org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration

        +init, sessionEventHttpSessionListenerAdapter, setApplicationContext, setCookieSerializer, setHttpSessionListeners, setHttpSessionStrategy, setServletContext, springSessionRepositoryFilter
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS

        +
        public static final int DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS
        +
        The default maximum interval in seconds in which a Session can remain inactive + before it is considered expired.
        +
      • +
      + + + +
        +
      • +

        SPRING_SESSION_GEMFIRE_REGION_KEY_CONSTRAINT

        +
        protected static final java.lang.Class<java.lang.Object> SPRING_SESSION_GEMFIRE_REGION_KEY_CONSTRAINT
        +
      • +
      + + + + + + + +
        +
      • +

        DEFAULT_CLIENT_REGION_SHORTCUT

        +
        public static final org.apache.geode.cache.client.ClientRegionShortcut DEFAULT_CLIENT_REGION_SHORTCUT
        +
        The default ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions.
        +
      • +
      + + + +
        +
      • +

        DEFAULT_SERVER_REGION_SHORTCUT

        +
        public static final org.apache.geode.cache.RegionShortcut DEFAULT_SERVER_REGION_SHORTCUT
        +
        The default RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions.
        +
      • +
      + + + +
        +
      • +

        DEFAULT_GEMFIRE_POOL_NAME

        +
        public static final java.lang.String DEFAULT_GEMFIRE_POOL_NAME
        +
        Name of the GemFire Pool used by the client Region for managing Session state information.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME

        +
        public static final java.lang.String DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME
        +
        The default name of the Gemfire (Client)Cache Region used to store Sessions.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_INDEXABLE_SESSION_ATTRIBUTES

        +
        public static final java.lang.String[] DEFAULT_INDEXABLE_SESSION_ATTRIBUTES
        +
        The default names of all Session attributes that should be indexed by GemFire.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireHttpSessionConfiguration

        +
        public GemFireHttpSessionConfiguration()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setBeanClassLoader

        +
        public void setBeanClassLoader(java.lang.ClassLoader beanClassLoader)
        +
        Sets a reference to the ClassLoader used to load bean definition class + types in a Spring context.
        +
        +
        Specified by:
        +
        setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAware
        +
        Parameters:
        +
        beanClassLoader - the ClassLoader used by the Spring container to load bean + class types.
        +
        See Also:
        +
        BeanClassLoaderAware.setBeanClassLoader(ClassLoader), +ClassLoader
        +
        +
      • +
      + + + +
        +
      • +

        getBeanClassLoader

        +
        protected java.lang.ClassLoader getBeanClassLoader()
        +
        Gets a reference to the ClassLoader used to load bean definition class + types in a Spring context.
        +
        +
        Returns:
        +
        the ClassLoader used by the Spring container to load bean class types.
        +
        See Also:
        +
        ClassLoader
        +
        +
      • +
      + + + +
        +
      • +

        setClientRegionShortcut

        +
        public void setClientRegionShortcut(org.apache.geode.cache.client.ClientRegionShortcut shortcut)
        +
        Sets the ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions.
        +
        +
        Parameters:
        +
        shortcut - the ClientRegionShortcut used to configure the GemFire ClientCache + Region.
        +
        See Also:
        +
        ClientRegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        getClientRegionShortcut

        +
        protected org.apache.geode.cache.client.ClientRegionShortcut getClientRegionShortcut()
        +
        Gets the ClientRegionShortcut used to configure the GemFire ClientCache + Region that will store Spring Sessions. Defaults to + ClientRegionShortcut.PROXY.
        +
        +
        Returns:
        +
        the ClientRegionShortcut used to configure the GemFire ClientCache Region.
        +
        See Also:
        +
        ClientRegionShortcut, +EnableGemFireHttpSession.clientRegionShortcut()
        +
        +
      • +
      + + + +
        +
      • +

        setIndexableSessionAttributes

        +
        public void setIndexableSessionAttributes(java.lang.String[] indexableSessionAttributes)
        +
        Sets the names of all Session attributes that should be indexed by GemFire.
        +
        +
        Parameters:
        +
        indexableSessionAttributes - an array of Strings indicating the names of all + Session attributes for which an Index will be created by GemFire.
        +
        +
      • +
      + + + +
        +
      • +

        getIndexableSessionAttributes

        +
        protected java.lang.String[] getIndexableSessionAttributes()
        +
        Get the names of all Session attributes that should be indexed by GemFire.
        +
        +
        Returns:
        +
        an array of Strings indicating the names of all Session attributes for + which an Index will be created by GemFire. Defaults to an empty String array if + unspecified.
        +
        See Also:
        +
        EnableGemFireHttpSession.indexableSessionAttributes()
        +
        +
      • +
      + + + +
        +
      • +

        setMaxInactiveIntervalInSeconds

        +
        public void setMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds)
        +
        Sets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
        +
        +
        Parameters:
        +
        maxInactiveIntervalInSeconds - an integer value specifying the maximum + interval in seconds that a Session can remain inactive before it is considered + expired.
        +
        +
      • +
      + + + +
        +
      • +

        getMaxInactiveIntervalInSeconds

        +
        protected int getMaxInactiveIntervalInSeconds()
        +
        Gets the maximum interval in seconds in which a Session can remain inactive before + it is considered expired.
        +
        +
        Returns:
        +
        an integer value specifying the maximum interval in seconds that a Session + can remain inactive before it is considered expired.
        +
        See Also:
        +
        EnableGemFireHttpSession.maxInactiveIntervalInSeconds()
        +
        +
      • +
      + + + +
        +
      • +

        setPoolName

        +
        public void setPoolName(java.lang.String poolName)
        +
        Sets the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
        +
        +
        Parameters:
        +
        poolName - the name of a GemFire Pool.
        +
        See Also:
        +
        Pool.getName()
        +
        +
      • +
      + + + +
        +
      • +

        getPoolName

        +
        protected java.lang.String getPoolName()
        +
        Returns the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
        +
        +
        Returns:
        +
        the name of a GemFire Pool.
        +
        See Also:
        +
        Pool.getName()
        +
        +
      • +
      + + + +
        +
      • +

        setServerRegionShortcut

        +
        public void setServerRegionShortcut(org.apache.geode.cache.RegionShortcut shortcut)
        +
        Sets the RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions.
        +
        +
        Parameters:
        +
        shortcut - the RegionShortcut used to configure the GemFire Cache Region.
        +
        See Also:
        +
        RegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        getServerRegionShortcut

        +
        protected org.apache.geode.cache.RegionShortcut getServerRegionShortcut()
        +
        Gets the RegionShortcut used to configure the GemFire Cache Region that + will store Spring Sessions. Defaults to RegionShortcut.PARTITION.
        +
        +
        Returns:
        +
        the RegionShortcut used to configure the GemFire Cache Region.
        +
        See Also:
        +
        RegionShortcut, +EnableGemFireHttpSession.serverRegionShortcut()
        +
        +
      • +
      + + + +
        +
      • +

        setSpringSessionGemFireRegionName

        +
        public void setSpringSessionGemFireRegionName(java.lang.String springSessionGemFireRegionName)
        +
        Sets the name of the Gemfire (Client)Cache Region used to store Sessions.
        +
        +
        Parameters:
        +
        springSessionGemFireRegionName - a String specifying the name of the GemFire + (Client)Cache Region used to store the Session.
        +
        +
      • +
      + + + +
        +
      • +

        getSpringSessionGemFireRegionName

        +
        protected java.lang.String getSpringSessionGemFireRegionName()
        +
        Gets the name of the Gemfire (Client)Cache Region used to store Sessions. Defaults + to 'ClusteredSpringSessions'.
        +
        +
        Returns:
        +
        a String specifying the name of the GemFire (Client)Cache Region used to + store the Session.
        +
        See Also:
        +
        Region.getName(), +EnableGemFireHttpSession.regionName()
        +
        +
      • +
      + + + +
        +
      • +

        setImportMetadata

        +
        public void setImportMetadata(org.springframework.core.type.AnnotationMetadata importMetadata)
        +
        Callback with the AnnotationMetadata of the class containing @Import + annotation that imported this @Configuration class.
        +
        +
        Specified by:
        +
        setImportMetadata in interface org.springframework.context.annotation.ImportAware
        +
        Parameters:
        +
        importMetadata - the AnnotationMetadata of the class importing + this @Configuration class.
        +
        +
      • +
      + + + +
        +
      • +

        sessionRepository

        +
        @Bean
        +public GemFireOperationsSessionRepository sessionRepository(@Qualifier(value="sessionRegionTemplate")
        +                                                                  org.springframework.data.gemfire.GemfireOperations gemfireOperations)
        +
        Defines the Spring SessionRepository bean used to interact with GemFire as a Spring + Session provider.
        +
        +
        Parameters:
        +
        gemfireOperations - an instance of GemfireOperations used to manage + Spring Sessions in GemFire.
        +
        Returns:
        +
        a GemFireOperationsSessionRepository for managing (clustering/replicating) + Sessions using GemFire.
        +
        +
      • +
      + + + +
        +
      • +

        sessionRegionTemplate

        +
        @Bean
        + @DependsOn(value="ClusteredSpringSessions")
        +public org.springframework.data.gemfire.GemfireTemplate sessionRegionTemplate(org.apache.geode.cache.GemFireCache gemFireCache)
        +
        Defines a Spring GemfireTemplate bean used to interact with GemFire's (Client)Cache + Region storing Sessions.
        +
        +
        Parameters:
        +
        gemFireCache - reference to the single GemFire cache instance used by the + GemfireTemplate to perform GemFire cache data access operations.
        +
        Returns:
        +
        a GemfireTemplate used to interact with GemFire's (Client)Cache + Region storing Sessions.
        +
        See Also:
        +
        GemfireTemplate, +Region
        +
        +
      • +
      + + + +
        +
      • +

        sessionRegion

        +
        @Bean(name="ClusteredSpringSessions")
        +public GemFireCacheTypeAwareRegionFactoryBean<java.lang.Object,org.springframework.session.ExpiringSession> sessionRegion(org.apache.geode.cache.GemFireCache gemfireCache,
        +                                                                                                                                                                @Qualifier(value="sessionRegionAttributes")
        +                                                                                                                                                                org.apache.geode.cache.RegionAttributes<java.lang.Object,org.springframework.session.ExpiringSession> sessionRegionAttributes)
        +
        Defines a Spring GemFire Cache Region + bean used to store and manage Sessions using either a client-server or peer-to-peer + (p2p) topology.
        +
        +
        Parameters:
        +
        gemfireCache - a reference to the GemFire + Cache.
        +
        sessionRegionAttributes - the GemFire RegionAttributes used to + configure the Region.
        +
        Returns:
        +
        a GemFireCacheTypeAwareRegionFactoryBean used to configure and + initialize a GemFire Cache Region for storing and managing Sessions.
        +
        See Also:
        +
        getClientRegionShortcut(), +getSpringSessionGemFireRegionName(), +getServerRegionShortcut()
        +
        +
      • +
      + + + +
        +
      • +

        sessionRegionAttributes

        +
        @Bean
        +public org.springframework.data.gemfire.RegionAttributesFactoryBean sessionRegionAttributes(org.apache.geode.cache.GemFireCache gemfireCache)
        +
        Defines a Spring GemFire RegionAttributes bean used to configure and + initialize the GemFire cache Region storing Sessions. Expiration is also + configured for the Region on the basis that the GemFire cache + Region is a not a proxy, on either the client or server.
        +
        +
        Parameters:
        +
        gemfireCache - a reference to the GemFire cache.
        +
        Returns:
        +
        an instance of RegionAttributes used to configure and initialize + the GemFire cache Region for storing and managing Sessions.
        +
        See Also:
        +
        RegionAttributesFactoryBean, +GemFireCache, +PartitionAttributes, +isExpirationAllowed(GemFireCache)
        +
        +
      • +
      + + + +
        +
      • +

        principalNameIndex

        +
        @Bean
        + @DependsOn(value="ClusteredSpringSessions")
        +public org.springframework.data.gemfire.IndexFactoryBean principalNameIndex(org.apache.geode.cache.GemFireCache gemfireCache)
        +
        Defines a GemFire Index bean on the GemFire cache Region storing and managing Sessions, + specifically on the 'principalName' property for quick lookup of Sessions by 'principalName'.
        +
        +
        Parameters:
        +
        gemfireCache - a reference to the GemFire cache.
        +
        Returns:
        +
        a IndexFactoryBean to create an GemFire Index on the 'principalName' property + for Sessions stored in the GemFire cache Region.
        +
        See Also:
        +
        IndexFactoryBean, +GemFireCache
        +
        +
      • +
      + + + +
        +
      • +

        sessionAttributesIndex

        +
        @Bean
        + @DependsOn(value="ClusteredSpringSessions")
        +public SessionAttributesIndexFactoryBean sessionAttributesIndex(org.apache.geode.cache.GemFireCache gemfireCache)
        +
        Defines a GemFire Index bean on the GemFire cache Region storing and managing Sessions, + specifically on all Session attributes for quick lookup and queries on Session attribute names + with a given value.
        +
        +
        Parameters:
        +
        gemfireCache - a reference to the GemFire cache.
        +
        Returns:
        +
        a IndexFactoryBean to create an GemFire Index on attributes of Sessions + stored in the GemFire cache Region.
        +
        See Also:
        +
        IndexFactoryBean, +GemFireCache
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-frame.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-frame.html new file mode 100644 index 0000000..83f84d3 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-frame.html @@ -0,0 +1,24 @@ + + + + + +org.springframework.session.data.gemfire.config.annotation.web.http (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + +

org.springframework.session.data.gemfire.config.annotation.web.http

+
+

Classes

+ +

Annotation Types

+ +
+ + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-summary.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-summary.html new file mode 100644 index 0000000..847d771 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-summary.html @@ -0,0 +1,163 @@ + + + + + +org.springframework.session.data.gemfire.config.annotation.web.http (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Package org.springframework.session.data.gemfire.config.annotation.web.http

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    GemFireHttpSessionConfiguration +
    The GemFireHttpSessionConfiguration class is a Spring @Configuration class + used to configure and initialize Pivotal GemFire/Apache Geode as a clustered, replicated and distributed + HttpSession provider implementation in Spring ExpiringSession.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Annotation Types Summary 
    Annotation TypeDescription
    EnableGemFireHttpSession +
    Add this annotation to a Spring @Configuration class to expose the SessionRepositoryFilter + as a bean named springSessionRepositoryFilter back the HttpSession + by Pivotal GemFire or Apache Geode.
    +
    +
  • +
+
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-tree.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-tree.html new file mode 100644 index 0000000..04c03d1 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-tree.html @@ -0,0 +1,143 @@ + + + + + +org.springframework.session.data.gemfire.config.annotation.web.http Class Hierarchy (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Hierarchy For Package org.springframework.session.data.gemfire.config.annotation.web.http

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration (implements org.springframework.context.ApplicationContextAware) +
        +
      • org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration (implements org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.context.annotation.ImportAware)
      • +
      +
    • +
    +
  • +
+

Annotation Type Hierarchy

+
    +
  • org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession (implements java.lang.annotation.Annotation)
  • +
+
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.html new file mode 100644 index 0000000..64da5bf --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.html @@ -0,0 +1,936 @@ + + + + + +GemFireCacheTypeAwareRegionFactoryBean (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire.config.annotation.web.http.support
+

Class GemFireCacheTypeAwareRegionFactoryBean<K,V>

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean<K,V>
    • +
    +
  • +
+
+
    +
  • +
    +
    Type Parameters:
    +
    K - the type of keys
    +
    V - the type of values
    +
    +
    +
    All Implemented Interfaces:
    +
    org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.Region<K,V>>, org.springframework.beans.factory.InitializingBean
    +
    +
    +
    +
    public class GemFireCacheTypeAwareRegionFactoryBean<K,V>
    +extends java.lang.Object
    +implements org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.Region<K,V>>, org.springframework.beans.factory.InitializingBean
    +
    The GemFireCacheTypeAwareRegionFactoryBean class is a Spring FactoryBean + used to construct, configure and initialize the GemFire cache Region used to + store and manage Session state.
    +
    +
    Since:
    +
    1.1.0
    +
    See Also:
    +
    GemFireCache, +Region, +RegionAttributes, +RegionShortcut, +ClientRegionShortcut, +Pool, +BeanFactory, +BeanFactoryAware, +FactoryBean, +InitializingBean, +GenericRegionFactoryBean, +ClientRegionFactoryBean, +GemFireHttpSessionConfiguration
    +
    +
  • +
+
+
+
    +
  • + + + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voidafterPropertiesSet() +
      Post-construction initialization callback to create, configure and initialize the + GemFire cache Region used to store, replicate (distribute) and manage + Session state.
      +
      protected org.springframework.beans.factory.BeanFactorygetBeanFactory() +
      Gets a reference to the Spring BeanFactory responsible for + creating GemFire components.
      +
      protected org.apache.geode.cache.client.ClientRegionShortcutgetClientRegionShortcut() +
      Returns the Region data policy used by the GemFire cache client to manage + Session state.
      +
      protected org.apache.geode.cache.GemFireCachegetGemfireCache() +
      Returns a reference to the GemFire cache used to construct the appropriate + Region.
      +
      org.apache.geode.cache.Region<K,V>getObject() +
      Returns a reference to the constructed GemFire cache Region used to store + and manage Session state.
      +
      java.lang.Class<?>getObjectType() +
      Returns the specific type of GemFire cache Region this factory creates when + initialized or Region.class when uninitialized.
      +
      protected java.lang.StringgetPoolName() +
      Returns the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
      +
      protected org.apache.geode.cache.RegionAttributes<K,V>getRegionAttributes() +
      Returns the GemFire RegionAttributes used to configure the GemFire cache + Region used to store and manage Session state.
      +
      protected java.lang.StringgetRegionName() +
      Returns the configured name of the GemFire cache Region use to store and + manage Session state.
      +
      protected org.apache.geode.cache.RegionShortcutgetServerRegionShortcut() +
      Returns the Region data policy used by the GemFire peer cache to manage + Session state.
      +
      booleanisSingleton() +
      Returns true indicating the GemFire cache Region created by this factory is + the sole instance.
      +
      protected org.apache.geode.cache.Region<K,V>newClientRegion(org.apache.geode.cache.GemFireCache gemfireCache) +
      Constructs a GemFire cache Region using the client-server GemFire topology + to store and manage Session state in a GemFire server cluster accessible from a + GemFire cache client.
      +
      protected org.apache.geode.cache.Region<K,V>newServerRegion(org.apache.geode.cache.GemFireCache gemfireCache) +
      Constructs a GemFire cache Region using a peer-to-peer (p2p) GemFire + topology to store and manage Session state in a GemFire server cluster accessible + from a GemFire cache client.
      +
      protected org.springframework.data.gemfire.client.Interest<K>[]registerInterests(boolean register) +
      Decides whether interests will be registered for all keys.
      +
      voidsetBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) +
      Sets a reference to the Spring BeanFactory responsible for + creating GemFire components.
      +
      voidsetClientRegionShortcut(org.apache.geode.cache.client.ClientRegionShortcut clientRegionShortcut) +
      Sets the Region data policy used by the GemFire cache client to manage + Session state.
      +
      voidsetGemfireCache(org.apache.geode.cache.GemFireCache gemfireCache) +
      Sets a reference to the GemFire cache used to construct the appropriate + Region.
      +
      voidsetPoolName(java.lang.String poolName) +
      Sets the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
      +
      voidsetRegionAttributes(org.apache.geode.cache.RegionAttributes<K,V> regionAttributes) +
      Sets the GemFire RegionAttributes used to configure the GemFire cache + Region used to store and manage Session state.
      +
      voidsetRegionName(java.lang.String regionName) +
      Sets the name of the GemFire cache Region use to store and manage Session + state.
      +
      voidsetServerRegionShortcut(org.apache.geode.cache.RegionShortcut serverRegionShortcut) +
      Sets the Region data policy used by the GemFire peer cache to manage + Session state.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_CLIENT_REGION_SHORTCUT

        +
        protected static final org.apache.geode.cache.client.ClientRegionShortcut DEFAULT_CLIENT_REGION_SHORTCUT
        +
      • +
      + + + +
        +
      • +

        DEFAULT_SERVER_REGION_SHORTCUT

        +
        protected static final org.apache.geode.cache.RegionShortcut DEFAULT_SERVER_REGION_SHORTCUT
        +
      • +
      + + + +
        +
      • +

        DEFAULT_GEMFIRE_POOL_NAME

        +
        protected static final java.lang.String DEFAULT_GEMFIRE_POOL_NAME
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME

        +
        protected static final java.lang.String DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireCacheTypeAwareRegionFactoryBean

        +
        public GemFireCacheTypeAwareRegionFactoryBean()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        afterPropertiesSet

        +
        public void afterPropertiesSet()
        +                        throws java.lang.Exception
        +
        Post-construction initialization callback to create, configure and initialize the + GemFire cache Region used to store, replicate (distribute) and manage + Session state. This method intelligently handles both client-server and + peer-to-peer (p2p) GemFire supported distributed system topologies.
        +
        +
        Specified by:
        +
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        +
        Throws:
        +
        java.lang.Exception - if the initialization of the GemFire cache Region fails.
        +
        See Also:
        +
        GemFireUtils.isClient(GemFireCache), +getGemfireCache(), +newClientRegion(GemFireCache), +newServerRegion(GemFireCache)
        +
        +
      • +
      + + + +
        +
      • +

        newServerRegion

        +
        protected org.apache.geode.cache.Region<K,V> newServerRegion(org.apache.geode.cache.GemFireCache gemfireCache)
        +                                                      throws java.lang.Exception
        +
        Constructs a GemFire cache Region using a peer-to-peer (p2p) GemFire + topology to store and manage Session state in a GemFire server cluster accessible + from a GemFire cache client.
        +
        +
        Parameters:
        +
        gemfireCache - a reference to the GemFire + Cache.
        +
        Returns:
        +
        a peer-to-peer-based GemFire cache Region to store and manage + Session state.
        +
        Throws:
        +
        java.lang.Exception - if the instantiation, configuration and initialization of the + GemFire cache Region fails.
        +
        See Also:
        +
        GenericRegionFactoryBean, +GemFireCache, +Region, +getRegionAttributes(), +getRegionName(), +getServerRegionShortcut()
        +
        +
      • +
      + + + +
        +
      • +

        newClientRegion

        +
        protected org.apache.geode.cache.Region<K,V> newClientRegion(org.apache.geode.cache.GemFireCache gemfireCache)
        +                                                      throws java.lang.Exception
        +
        Constructs a GemFire cache Region using the client-server GemFire topology + to store and manage Session state in a GemFire server cluster accessible from a + GemFire cache client.
        +
        +
        Parameters:
        +
        gemfireCache - a reference to the GemFire + Cache.
        +
        Returns:
        +
        a client-server-based GemFire cache Region to store and manage + Session state.
        +
        Throws:
        +
        java.lang.Exception - if the instantiation, configuration and initialization of the + GemFire cache Region fails.
        +
        See Also:
        +
        ClientRegionFactoryBean, +GemFireCache, +Region, +getClientRegionShortcut(), +getRegionAttributes(), +getRegionName(), +registerInterests(boolean)
        +
        +
      • +
      + + + +
        +
      • +

        registerInterests

        +
        protected org.springframework.data.gemfire.client.Interest<K>[] registerInterests(boolean register)
        +
        Decides whether interests will be registered for all keys. Interests is only registered on + a client and typically only when the client is a (CACHING) PROXY to the server (i.e. non-LOCAL only).
        +
        +
        Parameters:
        +
        register - a boolean value indicating whether interests should be registered.
        +
        Returns:
        +
        an array of Interests KEY/VALUE registrations.
        +
        See Also:
        +
        Interest
        +
        +
      • +
      + + + +
        +
      • +

        getObject

        +
        public org.apache.geode.cache.Region<K,V> getObject()
        +                                             throws java.lang.Exception
        +
        Returns a reference to the constructed GemFire cache Region used to store + and manage Session state.
        +
        +
        Specified by:
        +
        getObject in interface org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.Region<K,V>>
        +
        Returns:
        +
        the Region used to store and manage Session state.
        +
        Throws:
        +
        java.lang.Exception - if the Region reference cannot be obtained.
        +
        See Also:
        +
        Region
        +
        +
      • +
      + + + +
        +
      • +

        getObjectType

        +
        public java.lang.Class<?> getObjectType()
        +
        Returns the specific type of GemFire cache Region this factory creates when + initialized or Region.class when uninitialized.
        +
        +
        Specified by:
        +
        getObjectType in interface org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.Region<K,V>>
        +
        Returns:
        +
        the GemFire cache Region class type constructed by this factory.
        +
        See Also:
        +
        Region, +Class
        +
        +
      • +
      + + + +
        +
      • +

        isSingleton

        +
        public boolean isSingleton()
        +
        Returns true indicating the GemFire cache Region created by this factory is + the sole instance.
        +
        +
        Specified by:
        +
        isSingleton in interface org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.Region<K,V>>
        +
        Returns:
        +
        true to indicate the GemFire cache Region storing and managing + Sessions is a Singleton.
        +
        +
      • +
      + + + +
        +
      • +

        setBeanFactory

        +
        public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
        +
        Sets a reference to the Spring BeanFactory responsible for + creating GemFire components.
        +
        +
        Specified by:
        +
        setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
        +
        Parameters:
        +
        beanFactory - reference to the Spring BeanFactory
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if the BeanFactory reference is null.
        +
        See Also:
        +
        BeanFactory
        +
        +
      • +
      + + + +
        +
      • +

        getBeanFactory

        +
        protected org.springframework.beans.factory.BeanFactory getBeanFactory()
        +
        Gets a reference to the Spring BeanFactory responsible for + creating GemFire components.
        +
        +
        Returns:
        +
        a reference to the Spring BeanFactory
        +
        Throws:
        +
        java.lang.IllegalStateException - if the BeanFactory reference + is null.
        +
        See Also:
        +
        BeanFactory
        +
        +
      • +
      + + + +
        +
      • +

        setClientRegionShortcut

        +
        public void setClientRegionShortcut(org.apache.geode.cache.client.ClientRegionShortcut clientRegionShortcut)
        +
        Sets the Region data policy used by the GemFire cache client to manage + Session state.
        +
        +
        Parameters:
        +
        clientRegionShortcut - a ClientRegionShortcut to specify the client + Region data management policy.
        +
        See Also:
        +
        ClientRegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        getClientRegionShortcut

        +
        protected org.apache.geode.cache.client.ClientRegionShortcut getClientRegionShortcut()
        +
        Returns the Region data policy used by the GemFire cache client to manage + Session state. Defaults to ClientRegionShortcut.PROXY.
        +
        +
        Returns:
        +
        a ClientRegionShortcut specifying the client Region data + management policy.
        +
        See Also:
        +
        GemFireHttpSessionConfiguration.DEFAULT_CLIENT_REGION_SHORTCUT, +ClientRegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        setGemfireCache

        +
        public void setGemfireCache(org.apache.geode.cache.GemFireCache gemfireCache)
        +
        Sets a reference to the GemFire cache used to construct the appropriate + Region.
        +
        +
        Parameters:
        +
        gemfireCache - a reference to the GemFire cache.
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if the GemFireCache reference is null.
        +
        +
      • +
      + + + +
        +
      • +

        getGemfireCache

        +
        protected org.apache.geode.cache.GemFireCache getGemfireCache()
        +
        Returns a reference to the GemFire cache used to construct the appropriate + Region.
        +
        +
        Returns:
        +
        a reference to the GemFire cache.
        +
        Throws:
        +
        java.lang.IllegalStateException - if the GemFireCache reference is null.
        +
        +
      • +
      + + + +
        +
      • +

        setPoolName

        +
        public void setPoolName(java.lang.String poolName)
        +
        Sets the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
        +
        +
        Parameters:
        +
        poolName - the name of a GemFire Pool.
        +
        See Also:
        +
        Pool.getName()
        +
        +
      • +
      + + + +
        +
      • +

        getPoolName

        +
        protected java.lang.String getPoolName()
        +
        Returns the name of the GemFire Pool used by the client Region for managing Sessions + during cache operations involving the server.
        +
        +
        Returns:
        +
        the name of a GemFire Pool.
        +
        See Also:
        +
        Pool.getName()
        +
        +
      • +
      + + + +
        +
      • +

        setRegionAttributes

        +
        public void setRegionAttributes(org.apache.geode.cache.RegionAttributes<K,V> regionAttributes)
        +
        Sets the GemFire RegionAttributes used to configure the GemFire cache + Region used to store and manage Session state.
        +
        +
        Parameters:
        +
        regionAttributes - the GemFire RegionAttributes used to configure the + GemFire cache Region.
        +
        See Also:
        +
        RegionAttributes
        +
        +
      • +
      + + + +
        +
      • +

        getRegionAttributes

        +
        protected org.apache.geode.cache.RegionAttributes<K,V> getRegionAttributes()
        +
        Returns the GemFire RegionAttributes used to configure the GemFire cache + Region used to store and manage Session state.
        +
        +
        Returns:
        +
        the GemFire RegionAttributes used to configure the GemFire cache + Region.
        +
        See Also:
        +
        RegionAttributes
        +
        +
      • +
      + + + +
        +
      • +

        setRegionName

        +
        public void setRegionName(java.lang.String regionName)
        +
        Sets the name of the GemFire cache Region use to store and manage Session + state.
        +
        +
        Parameters:
        +
        regionName - a String specifying the name of the GemFire cache Region.
        +
        +
      • +
      + + + +
        +
      • +

        getRegionName

        +
        protected java.lang.String getRegionName()
        +
        Returns the configured name of the GemFire cache Region use to store and + manage Session state. Defaults to "ClusteredSpringSessions"
        +
        +
        Returns:
        +
        a String specifying the name of the GemFire cache Region.
        +
        See Also:
        +
        Region.getName()
        +
        +
      • +
      + + + +
        +
      • +

        setServerRegionShortcut

        +
        public void setServerRegionShortcut(org.apache.geode.cache.RegionShortcut serverRegionShortcut)
        +
        Sets the Region data policy used by the GemFire peer cache to manage + Session state.
        +
        +
        Parameters:
        +
        serverRegionShortcut - a RegionShortcut to specify the peer + Region data management policy.
        +
        See Also:
        +
        RegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        getServerRegionShortcut

        +
        protected org.apache.geode.cache.RegionShortcut getServerRegionShortcut()
        +
        Returns the Region data policy used by the GemFire peer cache to manage + Session state. Defaults to RegionShortcut.PARTITION.
        +
        +
        Returns:
        +
        a RegionShortcut specifying the peer Region data management + policy.
        +
        See Also:
        +
        RegionShortcut
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.html new file mode 100644 index 0000000..806708f --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.html @@ -0,0 +1,559 @@ + + + + + +SessionAttributesIndexFactoryBean (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire.config.annotation.web.http.support
+

Class SessionAttributesIndexFactoryBean

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.query.Index>, org.springframework.beans.factory.InitializingBean
    +
    +
    +
    +
    public class SessionAttributesIndexFactoryBean
    +extends java.lang.Object
    +implements org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.query.Index>, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.BeanNameAware
    +
    The SessionAttributesIndexFactoryBean class is a Spring FactoryBean that creates a GemFire Index + on the session attributes of the HttpSession object.
    +
    +
    Since:
    +
    1.3.0
    +
    See Also:
    +
    BeanFactoryAware, +BeanNameAware, +FactoryBean, +InitializingBean, +Index
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_INDEXABLE_SESSION_ATTRIBUTES

        +
        protected static final java.lang.String[] DEFAULT_INDEXABLE_SESSION_ATTRIBUTES
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SessionAttributesIndexFactoryBean

        +
        public SessionAttributesIndexFactoryBean()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        afterPropertiesSet

        +
        public void afterPropertiesSet()
        +                        throws java.lang.Exception
        +
        +
        Specified by:
        +
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        isIndexableSessionAttributesConfigured

        +
        protected boolean isIndexableSessionAttributesConfigured()
        +
        Determines whether any indexable Session attributes were configured for this FactoryBean.
        +
        +
        Returns:
        +
        a boolean value indicating whether any indexable Session attributes were configured + for this FactoryBean
        +
        See Also:
        +
        setIndexableSessionAttributes(String[])
        +
        +
      • +
      + + + +
        +
      • +

        newIndex

        +
        protected org.apache.geode.cache.query.Index newIndex()
        +                                               throws java.lang.Exception
        +
        Constructs a GemFire Index over the attributes of the HttpSession.
        +
        +
        Returns:
        +
        a GemFire Index over the HttpSession attributes.
        +
        Throws:
        +
        java.lang.Exception - if an error occurs while initializing the GemFire Index.
        +
        See Also:
        +
        IndexFactoryBean
        +
        +
      • +
      + + + +
        +
      • +

        getIndexableSessionAttributesAsGemFireIndexExpression

        +
        protected java.lang.String getIndexableSessionAttributesAsGemFireIndexExpression()
        +
        Gets the names of all Session attributes that will be indexed by GemFire as single, comma-delimited + String value constituting the Index expression of the Index definition.
        +
        +
        Returns:
        +
        a String composed of all the named Session attributes for which GemFire + will create an Index as an Index definition expression. If the indexable Session + attributes were not configured, then the wildcard ("*") is returned.
        +
        See Also:
        +
        Index.getIndexedExpression()
        +
        +
      • +
      + + + +
        +
      • +

        getObject

        +
        public org.apache.geode.cache.query.Index getObject()
        +                                             throws java.lang.Exception
        +
        +
        Specified by:
        +
        getObject in interface org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.query.Index>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        getObjectType

        +
        public java.lang.Class<?> getObjectType()
        +
        +
        Specified by:
        +
        getObjectType in interface org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.query.Index>
        +
        +
      • +
      + + + +
        +
      • +

        isSingleton

        +
        public boolean isSingleton()
        +
        +
        Specified by:
        +
        isSingleton in interface org.springframework.beans.factory.FactoryBean<org.apache.geode.cache.query.Index>
        +
        +
      • +
      + + + +
        +
      • +

        setBeanFactory

        +
        public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
        +                    throws org.springframework.beans.BeansException
        +
        +
        Specified by:
        +
        setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
        +
        Throws:
        +
        org.springframework.beans.BeansException
        +
        +
      • +
      + + + +
        +
      • +

        setBeanName

        +
        public void setBeanName(java.lang.String beanName)
        +
        +
        Specified by:
        +
        setBeanName in interface org.springframework.beans.factory.BeanNameAware
        +
        +
      • +
      + + + +
        +
      • +

        setGemFireCache

        +
        public void setGemFireCache(org.apache.geode.cache.GemFireCache gemfireCache)
        +
      • +
      + + + +
        +
      • +

        setIndexableSessionAttributes

        +
        public void setIndexableSessionAttributes(java.lang.String[] indexableSessionAttributes)
        +
      • +
      + + + +
        +
      • +

        getIndexableSessionAttributes

        +
        protected java.lang.String[] getIndexableSessionAttributes()
        +
      • +
      + + + +
        +
      • +

        setRegionName

        +
        public void setRegionName(java.lang.String regionName)
        +
      • +
      + + + +
        +
      • +

        getRegionName

        +
        protected java.lang.String getRegionName()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-frame.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-frame.html new file mode 100644 index 0000000..5992c61 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-frame.html @@ -0,0 +1,21 @@ + + + + + +org.springframework.session.data.gemfire.config.annotation.web.http.support (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + +

org.springframework.session.data.gemfire.config.annotation.web.http.support

+ + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-summary.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-summary.html new file mode 100644 index 0000000..adbcef5 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-summary.html @@ -0,0 +1,151 @@ + + + + + +org.springframework.session.data.gemfire.config.annotation.web.http.support (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Package org.springframework.session.data.gemfire.config.annotation.web.http.support

+
+
+ +
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-tree.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-tree.html new file mode 100644 index 0000000..9f0e475 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-tree.html @@ -0,0 +1,136 @@ + + + + + +org.springframework.session.data.gemfire.config.annotation.web.http.support Class Hierarchy (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Hierarchy For Package org.springframework.session.data.gemfire.config.annotation.web.http.support

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean<K,V> (implements org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.FactoryBean<T>, org.springframework.beans.factory.InitializingBean)
    • +
    • org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean (implements org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.FactoryBean<T>, org.springframework.beans.factory.InitializingBean)
    • +
    +
  • +
+
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-frame.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-frame.html new file mode 100644 index 0000000..09c2652 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-frame.html @@ -0,0 +1,25 @@ + + + + + +org.springframework.session.data.gemfire (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + +

org.springframework.session.data.gemfire

+ + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-summary.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-summary.html new file mode 100644 index 0000000..ac4fc72 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-summary.html @@ -0,0 +1,181 @@ + + + + + +org.springframework.session.data.gemfire (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Package org.springframework.session.data.gemfire

+
+
+ +
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-tree.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-tree.html new file mode 100644 index 0000000..2cddb29 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-tree.html @@ -0,0 +1,155 @@ + + + + + +org.springframework.session.data.gemfire Class Hierarchy (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Hierarchy For Package org.springframework.session.data.gemfire

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/GemFireUtils.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/GemFireUtils.html new file mode 100644 index 0000000..3d5308e --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/GemFireUtils.html @@ -0,0 +1,467 @@ + + + + + +GemFireUtils (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + + +
+
org.springframework.session.data.gemfire.support
+

Class GemFireUtils

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.springframework.session.data.gemfire.support.GemFireUtils
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public abstract class GemFireUtils
    +extends java.lang.Object
    +
    GemFireUtils is an abstract, extensible utility class for working with GemFire types + and functionality and is used by Spring Session's GemFire adapter support classes.
    +
    +
    Since:
    +
    1.1.0
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      GemFireUtils() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static booleanclose(java.io.Closeable obj) +
      Null-safe method to close the given Closeable object.
      +
      static booleanisClient(org.apache.geode.cache.GemFireCache gemFireCache) +
      Determines whether the GemFire cache is a client.
      +
      static booleanisLocal(org.apache.geode.cache.client.ClientRegionShortcut shortcut) +
      Determines whether the given ClientRegionShortcut is local only.
      +
      static booleanisPeer(org.apache.geode.cache.GemFireCache gemFireCache) +
      Determines whether the GemFire cache is a peer.
      +
      static booleanisProxy(org.apache.geode.cache.client.ClientRegionShortcut shortcut) +
      Determines whether the client ClientRegionShortcut is a proxy-based + shortcut.
      +
      static booleanisProxy(org.apache.geode.cache.Region<?,?> region) +
      Determines whether the given Region is a PROXY, which would be indicated by the Region + having a DataPolicy of DataPolicy.EMPTY.
      +
      static booleanisProxy(org.apache.geode.cache.RegionShortcut shortcut) +
      Determines whether the peer RegionShortcut is a proxy-based shortcut.
      +
      static java.lang.StringtoRegionPath(java.lang.String regionName) +
      Converts a Region name to a Region path.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GemFireUtils

        +
        public GemFireUtils()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        close

        +
        public static boolean close(java.io.Closeable obj)
        +
        Null-safe method to close the given Closeable object.
        +
        +
        Parameters:
        +
        obj - the Closeable object to close.
        +
        Returns:
        +
        true if the Closeable object is not null and was successfully + closed, otherwise return false.
        +
        See Also:
        +
        Closeable
        +
        +
      • +
      + + + +
        +
      • +

        isClient

        +
        public static boolean isClient(org.apache.geode.cache.GemFireCache gemFireCache)
        +
        Determines whether the GemFire cache is a client.
        +
        +
        Parameters:
        +
        gemFireCache - a reference to the GemFire cache.
        +
        Returns:
        +
        a boolean value indicating whether the GemFire cache is a client.
        +
        See Also:
        +
        ClientCache, +GemFireCache
        +
        +
      • +
      + + + +
        +
      • +

        isPeer

        +
        public static boolean isPeer(org.apache.geode.cache.GemFireCache gemFireCache)
        +
        Determines whether the GemFire cache is a peer.
        +
        +
        Parameters:
        +
        gemFireCache - a reference to the GemFire cache.
        +
        Returns:
        +
        a boolean value indicating whether the GemFire cache is a peer.
        +
        See Also:
        +
        Cache, +GemFireCache
        +
        +
      • +
      + + + +
        +
      • +

        isLocal

        +
        public static boolean isLocal(org.apache.geode.cache.client.ClientRegionShortcut shortcut)
        +
        Determines whether the given ClientRegionShortcut is local only.
        +
        +
        Parameters:
        +
        shortcut - the ClientRegionShortcut to evaluate.
        +
        Returns:
        +
        a boolean value indicating if the ClientRegionShortcut is local or + not.
        +
        See Also:
        +
        ClientRegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        isProxy

        +
        public static boolean isProxy(org.apache.geode.cache.client.ClientRegionShortcut shortcut)
        +
        Determines whether the client ClientRegionShortcut is a proxy-based + shortcut. NOTE: "proxy"-based Regions keep no local state.
        +
        +
        Parameters:
        +
        shortcut - the client ClientRegionShortcut to evaluate.
        +
        Returns:
        +
        a boolean value indicating whether the client ClientRegionShortcut + refers to a proxy-based shortcut.
        +
        See Also:
        +
        ClientRegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        isProxy

        +
        public static boolean isProxy(org.apache.geode.cache.Region<?,?> region)
        +
        Determines whether the given Region is a PROXY, which would be indicated by the Region + having a DataPolicy of DataPolicy.EMPTY.
        +
        +
        Parameters:
        +
        region - Region to evaluate.
        +
        Returns:
        +
        a boolean value indicating whether the Region is a PROXY.
        +
        See Also:
        +
        DataPolicy, +Region
        +
        +
      • +
      + + + +
        +
      • +

        isProxy

        +
        public static boolean isProxy(org.apache.geode.cache.RegionShortcut shortcut)
        +
        Determines whether the peer RegionShortcut is a proxy-based shortcut. NOTE: + "proxy"-based Regions keep no local state.
        +
        +
        Parameters:
        +
        shortcut - the peer RegionShortcut to evaluate.
        +
        Returns:
        +
        a boolean value indicating whether the peer RegionShortcut refers + to a proxy-based shortcut.
        +
        See Also:
        +
        RegionShortcut
        +
        +
      • +
      + + + +
        +
      • +

        toRegionPath

        +
        public static java.lang.String toRegionPath(java.lang.String regionName)
        +
        Converts a Region name to a Region path.
        +
        +
        Parameters:
        +
        regionName - a String specifying the name of the Region.
        +
        Returns:
        +
        a String path for the given Region by name.
        +
        See Also:
        +
        Region.getFullPath(), +Region.getName()
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-frame.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-frame.html new file mode 100644 index 0000000..1e45f53 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-frame.html @@ -0,0 +1,20 @@ + + + + + +org.springframework.session.data.gemfire.support (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + +

org.springframework.session.data.gemfire.support

+
+

Classes

+ +
+ + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-summary.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-summary.html new file mode 100644 index 0000000..e9f8b2c --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-summary.html @@ -0,0 +1,143 @@ + + + + + +org.springframework.session.data.gemfire.support (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Package org.springframework.session.data.gemfire.support

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    GemFireUtils +
    GemFireUtils is an abstract, extensible utility class for working with GemFire types + and functionality and is used by Spring Session's GemFire adapter support classes.
    +
    +
  • +
+
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-tree.html b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-tree.html new file mode 100644 index 0000000..c28f323 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-tree.html @@ -0,0 +1,135 @@ + + + + + +org.springframework.session.data.gemfire.support Class Hierarchy (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Hierarchy For Package org.springframework.session.data.gemfire.support

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • org.springframework.session.data.gemfire.support.GemFireUtils
    • +
    +
  • +
+
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/overview-frame.html b/spring-session-data-geode/build/docs/javadoc/overview-frame.html new file mode 100644 index 0000000..d758e63 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/overview-frame.html @@ -0,0 +1,24 @@ + + + + + +Overview List (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + +

 

+ + diff --git a/spring-session-data-geode/build/docs/javadoc/overview-summary.html b/spring-session-data-geode/build/docs/javadoc/overview-summary.html new file mode 100644 index 0000000..5f8bd25 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/overview-summary.html @@ -0,0 +1,148 @@ + + + + + +Overview (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + +
+ + + + + + + +
+ + +
+

spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API

+
+ + +
+ + + + + + + +
+ + + + diff --git a/spring-session-data-geode/build/docs/javadoc/overview-tree.html b/spring-session-data-geode/build/docs/javadoc/overview-tree.html new file mode 100644 index 0000000..224c83f --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/overview-tree.html @@ -0,0 +1,170 @@ + + + + + +Class Hierarchy (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + +
+ + + + + + + +
+ + + +
+

Class Hierarchy

+
    +
  • java.lang.Object + +
  • +
+

Annotation Type Hierarchy

+
    +
  • org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession (implements java.lang.annotation.Annotation)
  • +
+
+ +
+ + + + + + + +
+ + + + diff --git a/spring-session-data-geode/build/docs/javadoc/package-list b/spring-session-data-geode/build/docs/javadoc/package-list new file mode 100644 index 0000000..e107d0d --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/package-list @@ -0,0 +1,4 @@ +org.springframework.session.data.gemfire +org.springframework.session.data.gemfire.config.annotation.web.http +org.springframework.session.data.gemfire.config.annotation.web.http.support +org.springframework.session.data.gemfire.support diff --git a/spring-session-data-geode/build/docs/javadoc/script.js b/spring-session-data-geode/build/docs/javadoc/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/spring-session-data-geode/build/docs/javadoc/serialized-form.html b/spring-session-data-geode/build/docs/javadoc/serialized-form.html new file mode 100644 index 0000000..a7e4c44 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/serialized-form.html @@ -0,0 +1,217 @@ + + + + + +Serialized Form (spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API) + + + + + + + + + + + +
+

Serialized Form

+
+
+
    +
  • +

    Package org.springframework.session.data.gemfire

    +
      +
    • + + +

      Class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession extends java.lang.Object implements Serializable

      +
        +
      • +

        Serialization Methods

        +
          +
        • +

          readObject

          +
          <T> T readObject(java.io.DataInput in)
          +          throws java.lang.ClassNotFoundException,
          +                 java.io.IOException
          +
          +
          Throws:
          +
          java.lang.ClassNotFoundException
          +
          java.io.IOException
          +
          +
        • +
        • +

          writeObject

          +
          void writeObject(java.lang.Object obj,
          +                 java.io.DataOutput out)
          +          throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      • +

        Serialized Fields

        +
          +
        • +

          maxInactiveIntervalInSeconds

          +
          int maxInactiveIntervalInSeconds
          +
        • +
        • +

          creationTime

          +
          long creationTime
          +
        • +
        • +

          lastAccessedTime

          +
          long lastAccessedTime
          +
        • +
        • +

          id

          +
          java.lang.String id
          +
        • +
        +
      • +
      +
    • +
    • + + +

      Class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes extends java.util.AbstractMap<java.lang.String,java.lang.Object> implements Serializable

      +
        +
      • +

        Serialization Methods

        +
          +
        • +

          readObject

          +
          <T> T readObject(java.io.DataInput in)
          +          throws java.lang.ClassNotFoundException,
          +                 java.io.IOException
          +
          +
          Throws:
          +
          java.lang.ClassNotFoundException
          +
          java.io.IOException
          +
          +
        • +
        • +

          writeObject

          +
          void writeObject(java.lang.Object obj,
          +                 java.io.DataOutput out)
          +          throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/spring-session-data-geode/build/docs/javadoc/stylesheet.css b/spring-session-data-geode/build/docs/javadoc/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/spring-session-data-geode/build/docs/javadoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml new file mode 100644 index 0000000..bbcb5a5 --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml @@ -0,0 +1,130 @@ + + + + + org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e> + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.startGemFireServer(ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java:134) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) + + + tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:28:12.998 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@3f559434, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6627f1e2, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@349b3891, org.springframework.test.context.support.DirtiesContextTestExecutionListener@67fb225, org.springframework.test.context.transaction.TransactionalTestExecutionListener@151872ea, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@4c69294a] + +]]> + + diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.xml new file mode 100644 index 0000000..3c4845d --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.xml @@ -0,0 +1,61 @@ + + + + + org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e> + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.startGemFireServer(ClientServerHttpSessionAttributesDeltaIntegrationTests.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) + + + tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:28:33.550 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@7530e23b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@612630c5, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@47e267d2, org.springframework.test.context.support.DirtiesContextTestExecutionListener@21991726, org.springframework.test.context.transaction.TransactionalTestExecutionListener@534a0814, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@3baaaa0] + +]]> + + diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.xml new file mode 100644 index 0000000..9ff0303 --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.xml @@ -0,0 +1,61 @@ + + + + + org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e> + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.startGemFireServer(ClientServerProxyRegionSessionOperationsIntegrationTests.java:102) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) + + + tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:28:53.734 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@1cf3548d, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@d8cedd1, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@38b4669b, org.springframework.test.context.support.DirtiesContextTestExecutionListener@1d4ecac9, org.springframework.test.context.transaction.TransactionalTestExecutionListener@1b1fb2d1, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@71172606] + +]]> + + diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.xml new file mode 100644 index 0000000..ebe96c6 --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.xml @@ -0,0 +1,1981 @@ + + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + tid=0xc] Could not detect default resource locations for test class [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests]: no resource found for suffixes {-context.xml}. + +[info 2017/06/06 00:29:15.023 PDT tid=0xc] AnnotationConfigWebContextLoader detected default configuration classes for context configuration [ContextConfigurationAttributes@534022c0 declaringClass = 'org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests', classes = '{class org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader']. + +[info 2017/06/06 00:29:15.024 PDT tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:29:15.024 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@39748607, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@fffab96, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@32994c7, org.springframework.test.context.support.DirtiesContextTestExecutionListener@51adf040, org.springframework.test.context.transaction.TransactionalTestExecutionListener@4cf400cc, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@3ea5b1df] + +[info 2017/06/06 00:29:15.026 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@71e58560: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.055 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.056 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@3464eff8] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:15.059 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@50d6acad: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.081 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.081 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@46d780c4] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:15.086 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@44332625: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.109 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.109 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@534504e2] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:15.113 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@b093ca9: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.135 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.136 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@7701758c] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:15.139 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@611213c: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.160 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.161 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@746867d3] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:15.164 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@54f9502b: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.185 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.185 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@6b4ef046] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:15.196 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@5d6a4d3e: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.219 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.220 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@7d781f1c] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +]]> + + diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml new file mode 100644 index 0000000..ca45411 --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml @@ -0,0 +1,61 @@ + + + + + org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e> + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.startGemFireServer(MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.java:127) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) + + + tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:29:15.231 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@35f85924, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@5e20cb04, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@7560975a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7a89139f, org.springframework.test.context.transaction.TransactionalTestExecutionListener@d4f5493, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@556fd6d5] + +]]> + + diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.xml new file mode 100644 index 0000000..41df030 --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.xml @@ -0,0 +1,1981 @@ + + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + tid=0xc] Could not detect default resource locations for test class [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests]: no resource found for suffixes {-context.xml}. + +[info 2017/06/06 00:29:13.912 PDT tid=0xc] AnnotationConfigWebContextLoader detected default configuration classes for context configuration [ContextConfigurationAttributes@5c87aaf5 declaringClass = 'org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests', classes = '{class org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader']. + +[info 2017/06/06 00:29:13.913 PDT tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:29:13.914 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@39535983, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@58e28c5e, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7a290555, org.springframework.test.context.transaction.TransactionalTestExecutionListener@7e033b5, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@24dced8b] + +[info 2017/06/06 00:29:14.003 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@1eab0260: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.311 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.312 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@59cec987] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.320 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@72531447: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.363 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.363 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@2103c130] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.371 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@1cb5bcff: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.422 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.423 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@28a978fb] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.431 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@436bfcb0: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.469 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.469 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@64552734] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.475 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@7cb2c14d: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.512 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.513 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@651aaae4] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.518 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6233cd14: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.553 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.553 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@a3a4397] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.557 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b20cc43: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.586 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.586 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@1eceb361] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +]]> + + diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.xml new file mode 100644 index 0000000..9a6f5a4 --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.xml @@ -0,0 +1,857 @@ + + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + + + tid=0xc] Could not detect default resource locations for test class [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests]: no resource found for suffixes {-context.xml}. + +[info 2017/06/06 00:29:14.593 PDT tid=0xc] AnnotationConfigWebContextLoader detected default configuration classes for context configuration [ContextConfigurationAttributes@467c8311 declaringClass = 'org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests', classes = '{class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader']. + +[info 2017/06/06 00:29:14.593 PDT tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:29:14.594 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@48cd7734, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@57c7adf1, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7581c813, org.springframework.test.context.transaction.TransactionalTestExecutionListener@4da098b9, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@6e7722ee] + +[info 2017/06/06 00:29:14.596 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@4b5a2f4: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.631 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.631 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests@47d61eb3] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.636 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@49e7f947: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.657 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.657 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests@3bc54adf] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +[info 2017/06/06 00:29:14.660 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@29fe7229: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.686 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.687 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests@6b5de01b] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 65 more +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740) + ... 81 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187) + at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544) + ... 91 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 98 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 114 more + +]]> + + diff --git a/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.xml b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.xml new file mode 100644 index 0000000..97a06a3 --- /dev/null +++ b/spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.xml @@ -0,0 +1,643 @@ + + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243) + ... 64 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 67 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 83 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243) + ... 64 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 67 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 83 more + + + + java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243) + ... 64 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 67 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 83 more + + + tid=0xc] Detected default resource location "classpath:org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml" for test class [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests] + +[info 2017/06/06 00:29:14.692 PDT tid=0xc] GenericXmlWebContextLoader detected default locations for context configuration [ContextConfigurationAttributes@50b7fdf7 declaringClass = 'org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests', classes = '{}', locations = '{classpath:org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader']. + +[info 2017/06/06 00:29:14.692 PDT tid=0xc] Could not detect default configuration classes for test class [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests]: GemFireHttpSessionXmlConfigurationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration. + +[info 2017/06/06 00:29:14.692 PDT tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] + +[info 2017/06/06 00:29:14.693 PDT tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@3f6d10e1, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@1d1035aa, org.springframework.test.context.support.DirtiesContextTestExecutionListener@72272bba, org.springframework.test.context.transaction.TransactionalTestExecutionListener@4379929c, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@1444680a] + +[info 2017/06/06 00:29:14.701 PDT tid=0xc] Loading XML bean definitions from class path resource [org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml] + +[info 2017/06/06 00:29:14.871 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@865a24d: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.916 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.916 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests@5cabecc9] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243) + ... 64 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 67 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 83 more + +[info 2017/06/06 00:29:14.919 PDT tid=0xc] Loading XML bean definitions from class path resource [org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml] + +[info 2017/06/06 00:29:14.952 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@61082585: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:14.969 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:14.969 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests@7248f9c9] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243) + ... 64 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 67 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 83 more + +[info 2017/06/06 00:29:14.971 PDT tid=0xc] Loading XML bean definitions from class path resource [org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml] + +[info 2017/06/06 00:29:14.999 PDT tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6771a3cb: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy + +[warn 2017/06/06 00:29:15.015 PDT tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + +[error 2017/06/06 00:29:15.015 PDT tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests@28511a83] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) + at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) + at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) + at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at java.lang.Thread.run(Thread.java:745) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132) + at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) + at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) + ... 47 more +Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) + at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243) + ... 64 more +Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) + at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) + at java.net.URLClassLoader.access$100(URLClassLoader.java:73) + at java.net.URLClassLoader$1.run(URLClassLoader.java:368) + at java.net.URLClassLoader$1.run(URLClassLoader.java:362) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.URLClassLoader.findClass(URLClassLoader.java:361) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at java.lang.Class.getDeclaredMethods0(Native Method) + at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) + at java.lang.Class.getDeclaredMethods(Class.java:1975) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634) + ... 67 more +Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator + at java.net.URLClassLoader.findClass(URLClassLoader.java:381) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + ... 83 more + +]]> + + diff --git a/spring-session-data-geode/build/jacoco/integrationTest.exec b/spring-session-data-geode/build/jacoco/integrationTest.exec new file mode 100644 index 0000000..14e13cc Binary files /dev/null and b/spring-session-data-geode/build/jacoco/integrationTest.exec differ diff --git a/spring-session-data-geode/build/jacoco/test.exec b/spring-session-data-geode/build/jacoco/test.exec new file mode 100644 index 0000000..ade875c Binary files /dev/null and b/spring-session-data-geode/build/jacoco/test.exec differ diff --git a/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-javadoc.jar b/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-javadoc.jar new file mode 100644 index 0000000..e7ef89e Binary files /dev/null and b/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-javadoc.jar differ diff --git a/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-sources.jar b/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-sources.jar new file mode 100644 index 0000000..c984f04 Binary files /dev/null and b/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-sources.jar differ diff --git a/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT.jar b/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT.jar new file mode 100644 index 0000000..613c48e Binary files /dev/null and b/spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT.jar differ diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.html new file mode 100644 index 0000000..545f8ab --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.html @@ -0,0 +1,248 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests + + + + + +
+

Class org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

classMethod

+ +
org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e>
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.startGemFireServer(ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java:134)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
classMethod0sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:28:12.977 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:28:12.998 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@3f559434, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6627f1e2, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@349b3891, org.springframework.test.context.support.DirtiesContextTestExecutionListener@67fb225, org.springframework.test.context.transaction.TransactionalTestExecutionListener@151872ea, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@4c69294a]
+
+
+
+
+
+

Standard error

+ +
Starting a GemFire Server running on host [localhost] listening on port [44210]
+GemFire Server [exit code = 1]
+java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/apache/geode/internal/i18n/LocalizedStrings.
+	at org.jacoco.agent.rt.internal_14f7ee5.CoverageTransformer.transform(CoverageTransformer.java:93)
+	at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
+	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at org.apache.geode.cache.client.ClientCacheFactory.getAnyInstance(ClientCacheFactory.java:623)
+	at org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests.waitForClientCacheToClose(AbstractGemFireIntegrationTests.java:214)
+	at org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.stopGemFireServer(ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java:151)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: java.io.IOException: Error while instrumenting class org/apache/geode/internal/i18n/LocalizedStrings.
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrumentError(Instrumenter.java:152)
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrument(Instrumenter.java:103)
+	at org.jacoco.agent.rt.internal_14f7ee5.CoverageTransformer.transform(CoverageTransformer.java:91)
+	... 56 more
+Caused by: java.lang.RuntimeException: Method code too large!
+	at org.jacoco.agent.rt.internal_14f7ee5.asm.MethodWriter.getSize(MethodWriter.java:2036)
+	at org.jacoco.agent.rt.internal_14f7ee5.asm.ClassWriter.toByteArray(ClassWriter.java:827)
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrument(Instrumenter.java:84)
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrument(Instrumenter.java:101)
+	... 57 more
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.html new file mode 100644 index 0000000..30d70ca --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.html @@ -0,0 +1,179 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests + + + + + +
+

Class org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

classMethod

+ +
org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e>
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.startGemFireServer(ClientServerHttpSessionAttributesDeltaIntegrationTests.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
classMethod0sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:28:33.549 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:28:33.550 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@7530e23b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@612630c5, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@47e267d2, org.springframework.test.context.support.DirtiesContextTestExecutionListener@21991726, org.springframework.test.context.transaction.TransactionalTestExecutionListener@534a0814, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@3baaaa0]
+
+
+
+
+
+

Standard error

+ +
Starting a GemFire Server running on host [localhost] listening on port [52862]
+GemFire Server [exit code = 1]
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.html new file mode 100644 index 0000000..26f6171 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.html @@ -0,0 +1,179 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests + + + + + +
+

Class org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

classMethod

+ +
org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e>
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.startGemFireServer(ClientServerProxyRegionSessionOperationsIntegrationTests.java:102)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
classMethod0sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:28:53.733 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:28:53.734 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@1cf3548d, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@d8cedd1, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@38b4669b, org.springframework.test.context.support.DirtiesContextTestExecutionListener@1d4ecac9, org.springframework.test.context.transaction.TransactionalTestExecutionListener@1b1fb2d1, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@71172606]
+
+
+
+
+
+

Standard error

+ +
Starting a GemFire Server running on host [localhost] listening on port [41053]
+GemFire Server [exit code = 1]
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.html new file mode 100644 index 0000000..1035fcb --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.html @@ -0,0 +1,2144 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests + + + + + +
+

Class org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
7
+

tests

+
+
+
+
7
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

findSessionsByChangedSecurityPrincipalName

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

findSessionsByIndexedSessionAttributeNameValues

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

findSessionsByPrincipalName

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

findSessionsBySecurityPrincipalName

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

findsNoSessionsAfterPrincipalIsRemoved

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

findsNoSessionsByNonExistingPrincipal

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

saveAndReadSessionWithAttributes

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
findSessionsByChangedSecurityPrincipalName0sfailed
findSessionsByIndexedSessionAttributeNameValues0sfailed
findSessionsByPrincipalName0sfailed
findSessionsBySecurityPrincipalName0sfailed
findsNoSessionsAfterPrincipalIsRemoved0sfailed
findsNoSessionsByNonExistingPrincipal0sfailed
saveAndReadSessionWithAttributes0sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:29:15.022 PDT <Test worker> tid=0xc] Could not detect default resource locations for test class [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests]: no resource found for suffixes {-context.xml}.
+
+[info 2017/06/06 00:29:15.023 PDT <Test worker> tid=0xc] AnnotationConfigWebContextLoader detected default configuration classes for context configuration [ContextConfigurationAttributes@534022c0 declaringClass = 'org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests', classes = '{class org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader'].
+
+[info 2017/06/06 00:29:15.024 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:29:15.024 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@39748607, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@fffab96, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@32994c7, org.springframework.test.context.support.DirtiesContextTestExecutionListener@51adf040, org.springframework.test.context.transaction.TransactionalTestExecutionListener@4cf400cc, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@3ea5b1df]
+
+[info 2017/06/06 00:29:15.026 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@71e58560: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.055 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.056 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@3464eff8]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:15.059 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@50d6acad: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.081 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.081 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@46d780c4]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:15.086 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@44332625: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.109 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.109 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@534504e2]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:15.113 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@b093ca9: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.135 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.136 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@7701758c]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:15.139 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@611213c: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.160 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.161 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@746867d3]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:15.164 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@54f9502b: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.185 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.185 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@6b4ef046]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:15.196 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@5d6a4d3e: startup date [Tue Jun 06 00:29:15 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.219 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.220 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@39748607] to prepare test instance [org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests@7d781f1c]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.html new file mode 100644 index 0000000..b05fce7 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.html @@ -0,0 +1,179 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests + + + + + +
+

Class org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
1
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.001s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

classMethod

+ +
org.junit.ComparisonFailure: expected:<[tru]e> but was:<[fals]e>
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.startGemFireServer(MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.java:127)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
classMethod0.001sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:29:15.230 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:29:15.231 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@35f85924, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@5e20cb04, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@7560975a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7a89139f, org.springframework.test.context.transaction.TransactionalTestExecutionListener@d4f5493, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@556fd6d5]
+
+
+
+
+
+

Standard error

+ +
Starting a GemFire Server on [localhost] listening on port [48072]
+GemFire Server [exit code = 1]
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.html new file mode 100644 index 0000000..641a91a --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.html @@ -0,0 +1,2144 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests + + + + + +
+

Class org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
7
+

tests

+
+
+
+
7
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

deleteExistingExpiredSession

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

deleteExistingNonExpiredSession

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

deleteNonExistingSession

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

getExistingExpiredSession

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

getExistingNonExpiredSession

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

getNonExistingSession

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

sessionCreatedEvent

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
deleteExistingExpiredSession0sfailed
deleteExistingNonExpiredSession0sfailed
deleteNonExistingSession0sfailed
getExistingExpiredSession0sfailed
getExistingNonExpiredSession0sfailed
getNonExistingSession0sfailed
sessionCreatedEvent0sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:29:13.903 PDT <Test worker> tid=0xc] Could not detect default resource locations for test class [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests]: no resource found for suffixes {-context.xml}.
+
+[info 2017/06/06 00:29:13.912 PDT <Test worker> tid=0xc] AnnotationConfigWebContextLoader detected default configuration classes for context configuration [ContextConfigurationAttributes@5c87aaf5 declaringClass = 'org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests', classes = '{class org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader'].
+
+[info 2017/06/06 00:29:13.913 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:29:13.914 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@39535983, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@58e28c5e, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7a290555, org.springframework.test.context.transaction.TransactionalTestExecutionListener@7e033b5, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@24dced8b]
+
+[info 2017/06/06 00:29:14.003 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@1eab0260: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.311 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.312 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@59cec987]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.320 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@72531447: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.363 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.363 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@2103c130]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.371 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@1cb5bcff: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.422 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.423 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@28a978fb]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.431 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@436bfcb0: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.469 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.469 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@64552734]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.475 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@7cb2c14d: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.512 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.513 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@651aaae4]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.518 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6233cd14: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.553 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.553 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@a3a4397]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.557 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b20cc43: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.586 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.586 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@13ddcd28] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests@1eceb361]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.html new file mode 100644 index 0000000..0155807 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.html @@ -0,0 +1,984 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests + + + + + +
+

Class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
3
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

gemfireCacheConfigurationIsValid

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

verifyGemFireExampleCacheRegionPrincipalNameIndexWasCreatedSuccessfully

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+ +

verifyGemFireExampleCacheRegionSessionAttributesIndexWasNotCreated

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
gemfireCacheConfigurationIsValid0sfailed
verifyGemFireExampleCacheRegionPrincipalNameIndexWasCreatedSuccessfully0sfailed
verifyGemFireExampleCacheRegionSessionAttributesIndexWasNotCreated0sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:29:14.592 PDT <Test worker> tid=0xc] Could not detect default resource locations for test class [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests]: no resource found for suffixes {-context.xml}.
+
+[info 2017/06/06 00:29:14.593 PDT <Test worker> tid=0xc] AnnotationConfigWebContextLoader detected default configuration classes for context configuration [ContextConfigurationAttributes@467c8311 declaringClass = 'org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests', classes = '{class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader'].
+
+[info 2017/06/06 00:29:14.593 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:29:14.594 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@48cd7734, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@57c7adf1, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7581c813, org.springframework.test.context.transaction.TransactionalTestExecutionListener@4da098b9, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@6e7722ee]
+
+[info 2017/06/06 00:29:14.596 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@4b5a2f4: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.631 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.631 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests@47d61eb3]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.636 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@49e7f947: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.657 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.657 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests@3bc54adf]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+[info 2017/06/06 00:29:14.660 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@29fe7229: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.686 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.687 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@1e72fdd] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests@6b5de01b]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClusteredSpringSessions' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration: Unsatisfied dependency expressed through method 'sessionRegion' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:748)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1093)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 65 more
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache' defined in org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:250)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
+	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:833)
+	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:740)
+	... 81 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:504)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:206)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:187)
+	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:125)
+	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1012)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:544)
+	... 91 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 98 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 114 more
+
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.html b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.html new file mode 100644 index 0000000..5d80426 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.html @@ -0,0 +1,770 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests + + + + + +
+

Class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
3
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.001s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+
+ +

gemfireCacheConfigurationIsValid

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243)
+	... 64 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 67 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 83 more
+
+
+
+
+ +

verifyGemFireExampleCacheRegionPrincipalNameIndexWasCreatedSuccessfully

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243)
+	... 64 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 67 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 83 more
+
+
+
+
+ +

verifyGemFireExampleCacheRegionSessionAttributesIndexWasCreatedSuccessfully

+ +
java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243)
+	... 64 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 67 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 83 more
+
+
+
+
+
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
gemfireCacheConfigurationIsValid0sfailed
verifyGemFireExampleCacheRegionPrincipalNameIndexWasCreatedSuccessfully0.001sfailed
verifyGemFireExampleCacheRegionSessionAttributesIndexWasCreatedSuccessfully0sfailed
+
+
+

Standard output

+ +
[info 2017/06/06 00:29:14.691 PDT <Test worker> tid=0xc] Detected default resource location "classpath:org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml" for test class [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests]
+
+[info 2017/06/06 00:29:14.692 PDT <Test worker> tid=0xc] GenericXmlWebContextLoader detected default locations for context configuration [ContextConfigurationAttributes@50b7fdf7 declaringClass = 'org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests', classes = '{}', locations = '{classpath:org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.test.context.ContextLoader'].
+
+[info 2017/06/06 00:29:14.692 PDT <Test worker> tid=0xc] Could not detect default configuration classes for test class [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests]: GemFireHttpSessionXmlConfigurationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
+
+[info 2017/06/06 00:29:14.692 PDT <Test worker> tid=0xc] Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
+
+[info 2017/06/06 00:29:14.693 PDT <Test worker> tid=0xc] Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@3f6d10e1, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@1d1035aa, org.springframework.test.context.support.DirtiesContextTestExecutionListener@72272bba, org.springframework.test.context.transaction.TransactionalTestExecutionListener@4379929c, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@1444680a]
+
+[info 2017/06/06 00:29:14.701 PDT <Test worker> tid=0xc] Loading XML bean definitions from class path resource [org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml]
+
+[info 2017/06/06 00:29:14.871 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@865a24d: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.916 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.916 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests@5cabecc9]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243)
+	... 64 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 67 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 83 more
+
+[info 2017/06/06 00:29:14.919 PDT <Test worker> tid=0xc] Loading XML bean definitions from class path resource [org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml]
+
+[info 2017/06/06 00:29:14.952 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@61082585: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:14.969 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:14.969 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests@7248f9c9]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243)
+	... 64 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 67 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 83 more
+
+[info 2017/06/06 00:29:14.971 PDT <Test worker> tid=0xc] Loading XML bean definitions from class path resource [org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml]
+
+[info 2017/06/06 00:29:14.999 PDT <Test worker> tid=0xc] Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6771a3cb: startup date [Tue Jun 06 00:29:14 PDT 2017]; root of context hierarchy
+
+[warn 2017/06/06 00:29:15.015 PDT <Test worker> tid=0xc] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+
+[error 2017/06/06 00:29:15.015 PDT <Test worker> tid=0xc] Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@612a08ba] to prepare test instance [org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests@28511a83]
+java.lang.IllegalStateException: Failed to load ApplicationContext
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
+	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:102)
+	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
+	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
+	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:243)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:226)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:245)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:189)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1191)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1117)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:534)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:491)
+	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:732)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:132)
+	at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
+	at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:245)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
+	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
+	... 47 more
+Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.gemfire.CacheFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:652)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541)
+	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:526)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:243)
+	... 64 more
+Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/access/BeanFactoryLocator
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at java.lang.Class.getDeclaredMethods0(Native Method)
+	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
+	at java.lang.Class.getDeclaredMethods(Class.java:1975)
+	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:634)
+	... 67 more
+Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.access.BeanFactoryLocator
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	... 83 more
+
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/css/base-style.css b/spring-session-data-geode/build/reports/integration-tests/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/spring-session-data-geode/build/reports/integration-tests/css/style.css b/spring-session-data-geode/build/reports/integration-tests/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/spring-session-data-geode/build/reports/integration-tests/index.html b/spring-session-data-geode/build/reports/integration-tests/index.html new file mode 100644 index 0000000..dd3db18 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/index.html @@ -0,0 +1,309 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
24
+

tests

+
+
+
+
24
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ +
+

Failed tests

+ +
+
+

Packages

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+org.springframework.session.data.gemfire +111100.001s0%
+org.springframework.session.data.gemfire.config.annotation.web.http +131300.001s0%
+
+ +
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/js/report.js b/spring-session-data-geode/build/reports/integration-tests/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html b/spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html new file mode 100644 index 0000000..b8429f3 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html @@ -0,0 +1,183 @@ + + + + + +Test results - Package org.springframework.session.data.gemfire.config.annotation.web.http + + + + + +
+

Package org.springframework.session.data.gemfire.config.annotation.web.http

+ +
+ + + + + +
+
+ + + + + + + +
+
+
13
+

tests

+
+
+
+
13
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.001s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ + +
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+EnableGemFireHttpSessionEventsIntegrationTests +7700s0%
+GemFireHttpSessionJavaConfigurationTests +3300s0%
+GemFireHttpSessionXmlConfigurationTests +3300.001s0%
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.html b/spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.html new file mode 100644 index 0000000..bb14a97 --- /dev/null +++ b/spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.html @@ -0,0 +1,195 @@ + + + + + +Test results - Package org.springframework.session.data.gemfire + + + + + +
+

Package org.springframework.session.data.gemfire

+ +
+ + + + + +
+
+ + + + + + + +
+
+
11
+

tests

+
+
+
+
11
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.001s
+

duration

+
+
+
+
+
+
0%
+

successful

+
+
+
+
+ + +
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+ClientServerGemFireOperationsSessionRepositoryIntegrationTests +1100s0%
+ClientServerHttpSessionAttributesDeltaIntegrationTests +1100s0%
+ClientServerProxyRegionSessionOperationsIntegrationTests +1100s0%
+GemFireOperationsSessionRepositoryIntegrationTests +7700s0%
+MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests +1100.001s0%
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.html b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.html new file mode 100644 index 0000000..9bb2f2f --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.html @@ -0,0 +1,500 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest + + + + + +
+

Class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
61
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
1.845s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
afterCreateForDestroyOperationDoesNotPublishSessionCreatedEvent0.001spassed
afterCreateForModificationDoesNotPublishSessionCreatedEvent0.001spassed
afterCreateForNonSessionTypeDoesNotPublishSessionCreatedEvent0.001spassed
afterCreateWithSessionIdPublishesSessionCreatedEvent0.001spassed
afterCreateWithSessionPublishesSessionCreatedEvent0.002spassed
afterDestroyWithNonSessionTypePublishesSessionDestroyedEventWithSessionId0.001spassed
afterDestroyWithSessionIdPublishesSessionDestroyedEvent0.004spassed
afterDestroyWithSessionPublishesSessionDestroyedEvent0.001spassed
afterInvalidateWithNonSessionTypePublishesSessionExpiredEventWithSessionId0.002spassed
afterInvalidateWithSessionIdPublishesSessionExpiredEvent0.002spassed
afterInvalidateWithSessionPublishesSessionExpiredEvent0.002spassed
constructGemFireOperationsSessionRepositoryWithNullTemplate0spassed
constructGemFireSessionWithDefaultInitialization0spassed
constructGemFireSessionWithId0.008spassed
constructGemFireSessionWithNullSession0.001spassed
constructGemFireSessionWithSession0.001spassed
constructGemFireSessionWithUnspecifiedId0.002spassed
createNewGemFireSession0spassed
deleteSessionCallsDeleteSessionId0.013spassed
fromExistingGemFireSessionIsGemFireSession0spassed
fromExistingSession0.001spassed
gemfireOperationsSessionRepositoryIsProperlyConstructedAndInitialized0.568spassed
handleDeletedWithSessionIdPublishesSessionDeletedEvent0.001spassed
handleDeletedWithSessionPublishesSessionDeletedEvent0.001spassed
hasDeltaWhenNoSessionChangesIsFalse0spassed
hasDeltaWhenSessionAttributesChangeIsTrue0.002spassed
hasDeltaWhenSessionLastAccessedTimeIsUpdatedIsTrue0spassed
hasDeltaWhenSessionMaxInactiveIntervalInSecondsIsUpdatedIsTrue0spassed
isCreateWithCreateOperationAndNonProxyRegionReturnsTrue0.001spassed
isCreateWithCreateOperationReturnsTrue0.004spassed
isCreateWithLocalLoadCreateOperationReturnsFalse0.001spassed
isCreateWithRememberedSessionIdReturnsFalse0.001spassed
isCreateWithTombstoneReturnsFalse0.002spassed
isCreateWithUpdateOperationReturnsFalse0.057spassed
isExpiredIsFalseWhenMaxInactiveIntervalIsNegative0spassed
isExpiredIsFalseWhenSessionIsActive0.001spassed
isExpiredIsTrueWhenSessionIsInactive0.001spassed
maxInactiveIntervalInSecondsAllowsNegativeValuesAndExtremelyLargeValues0spassed
publishEventHandlesThrowable0.014spassed
sessionAttributesEntrySetIteratesAttributeNameValues0.002spassed
sessionAttributesFromData0spassed
sessionAttributesFromDelta0.002spassed
sessionAttributesFromSession0.001spassed
sessionAttributesFromSessionAttributes0spassed
sessionAttributesHasDeltaIsFalse0spassed
sessionAttributesHasDeltaIsTrue0.001spassed
sessionAttributesToData0.001spassed
sessionAttributesToDelta0.002spassed
sessionComparisons0.001spassed
sessionCreateCreateExpireRecreatePublishesSessionEventsCreateExpireCreate0.003spassed
sessionEqualsDifferentSessionBasedOnId0spassed
sessionFromData1.036spassed
sessionFromDelta0.003spassed
sessionHashCodeIsNotEqualToStringIdHashCode0.001spassed
sessionToData0.017spassed
sessionToDataThenFromDataWhenPrincipalNameIsNullGetsHandledProperly0.001spassed
sessionToDelta0.003spassed
sessionWithAttributesAreThreadSafe0.070spassed
setAndGetPrincipalName0.002spassed
setGetAndRemoveAttribute0.001spassed
touchSetsLastAccessedTime0spassed
+
+
+

Standard output

+ +
[info 2017/06/06 00:28:09.908 PDT <Test worker> tid=0xc] Instantiator registered with id 800,813,552 class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession
+
+[info 2017/06/06 00:28:09.996 PDT <Test worker> tid=0xc] Instantiator registered with id 800,828,008 class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes
+
+
+
+
+
+

Standard error

+ +
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/apache/geode/internal/i18n/LocalizedStrings.
+	at org.jacoco.agent.rt.internal_14f7ee5.CoverageTransformer.transform(CoverageTransformer.java:93)
+	at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
+	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
+	at java.lang.ClassLoader.defineClass1(Native Method)
+	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
+	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
+	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
+	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+	at org.apache.geode.internal.InternalInstantiator._register(InternalInstantiator.java:174)
+	at org.apache.geode.internal.InternalInstantiator.register(InternalInstantiator.java:100)
+	at org.apache.geode.Instantiator.register(Instantiator.java:183)
+	at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.afterPropertiesSet(AbstractGemFireOperationsSessionRepository.java:233)
+	at org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.gemfireOperationsSessionRepositoryIsProperlyConstructedAndInitialized(AbstractGemFireOperationsSessionRepositoryTest.java:223)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:68)
+	at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:74)
+	at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39)
+	at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:161)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
+	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
+	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
+	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+	at java.lang.Thread.run(Thread.java:745)
+Caused by: java.io.IOException: Error while instrumenting class org/apache/geode/internal/i18n/LocalizedStrings.
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrumentError(Instrumenter.java:152)
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrument(Instrumenter.java:103)
+	at org.jacoco.agent.rt.internal_14f7ee5.CoverageTransformer.transform(CoverageTransformer.java:91)
+	... 69 more
+Caused by: java.lang.RuntimeException: Method code too large!
+	at org.jacoco.agent.rt.internal_14f7ee5.asm.MethodWriter.getSize(MethodWriter.java:2036)
+	at org.jacoco.agent.rt.internal_14f7ee5.asm.ClassWriter.toByteArray(ClassWriter.java:827)
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrument(Instrumenter.java:84)
+	at org.jacoco.agent.rt.internal_14f7ee5.core.instr.Instrumenter.instrument(Instrumenter.java:101)
+	... 70 more
+
+
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.html b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.html new file mode 100644 index 0000000..94a21e5 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.html @@ -0,0 +1,151 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest + + + + + +
+

Class org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
12
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.037s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
createProperlyInitializedSession0.001spassed
deleteRemovesExistingSessionAndHandlesDelete0.001spassed
deleteRemovesNonExistingSessionAndHandlesDelete0.001spassed
findByIndexNameValueFindsMatchingSession0.024spassed
findByPrincipalNameFindsMatchingSessions0.001spassed
findByPrincipalNameReturnsNoMatchingSessions0.001spassed
getSessionDeletesMatchingExpiredSessionById0.002spassed
getSessionFindsMatchingNonExpiredSessionById0.002spassed
getSessionReturnsNull0.001spassed
prepareQueryReturnsIndexNameValueOql0.001spassed
prepareQueryReturnsPrincipalNameOql0.001spassed
saveStoresSession0.001spassed
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.html b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.html new file mode 100644 index 0000000..ce94da5 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.html @@ -0,0 +1,161 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest + + + + + +
+

Class org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
14
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.176s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
createsAndInitializesSessionRegionAttributesWithExpiration0.001spassed
createsAndInitializesSessionRegionAttributesWithoutExpiration0.003spassed
createsAndInitializesSessionRegionBean0.029spassed
createsAndInitializesSessionRegionTemplateBean0.006spassed
createsAndInitializesSessionRepositoryBean0.019spassed
expirationIsAllowed0.087spassed
expirationIsNotAllowed0spassed
setAndGetBeanClassLoader0spassed
setAndGetClientRegionShortcut0spassed
setAndGetMaxInactiveIntervalInSeconds0spassed
setAndGetPoolName0.001spassed
setAndGetServerRegionShortcut0spassed
setAndGetSpringSessionGemFireRegionName0.001spassed
setsImportMetadata0.029spassed
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.html b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.html new file mode 100644 index 0000000..d1b6779 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.html @@ -0,0 +1,176 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest + + + + + +
+

Class org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
17
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.050s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
afterPropertiesSetCreatesClientRegionForClientCache0.001spassed
afterPropertiesSetCreatesServerRegionForPeerCache0.001spassed
allKeysInterestsRegistration0.010spassed
emptyInterestsRegistration0.001spassed
getBeanFactoryWhenNullThrowsIllegalStateException0.013spassed
getGemfireCacheWhenNullThrowsIllegalStateException0spassed
getObjectTypeBeforeInitializationIsRegionClass0spassed
isSingletonIsTrue0spassed
setAndGetBeanFactory0.021spassed
setAndGetClientRegionShortcut0spassed
setAndGetGemfireCache0.001spassed
setAndGetPoolName0.001spassed
setAndGetRegionAttributes0spassed
setAndGetRegionName0.001spassed
setAndGetServerRegionShortcut0spassed
setBeanFactoryToNullThrowsIllegalArgumentException0spassed
setGemfireCacheToNullThrowsIllegalArgumentException0spassed
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.html b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.html new file mode 100644 index 0000000..8e5b868 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.html @@ -0,0 +1,116 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests + + + + + +
+

Class org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests

+ +
+ + + + + +
+
+ + + + + + + +
+
+
5
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.015s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
indexIsNotInitializedWhenNoIndexableSessionAttributesAreConfigured0.014spassed
initializesIndexWhenIndexableSessionAttributesAreConfigured0spassed
isSingletonIsTrue0spassed
setAndGetIndexableSessionAttributes0.001spassed
setAndGetRegionName0spassed
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.support.GemFireUtilsTest.html b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.support.GemFireUtilsTest.html new file mode 100644 index 0000000..27342c7 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.support.GemFireUtilsTest.html @@ -0,0 +1,181 @@ + + + + + +Test results - Class org.springframework.session.data.gemfire.support.GemFireUtilsTest + + + + + +
+

Class org.springframework.session.data.gemfire.support.GemFireUtilsTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
18
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.007s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
clientCacheIsClient0.001spassed
clientCacheIsNotPeer0spassed
clientRegionShortcutIsLocal0spassed
clientRegionShortcutIsNotLocal0spassed
clientRegionShortcutIsNotProxy0spassed
clientRegionShortcutIsProxy0spassed
closeNonNullCloseableObjectThrowingIOExceptionReturnsFalse0spassed
closeNonNullCloseableSuccessfullyReturnsTrue0.005spassed
closeNullCloseableObjectReturnsFalse0spassed
genericCacheIsNotClient0spassed
genericCacheIsNotPeer0spassed
peerCacheIsNotClient0spassed
peerCacheIsPeer0.001spassed
regionIsNotProxy0spassed
regionIsProxy0spassed
regionShortcutIsNotProxy0spassed
regionShortcutIsProxy0spassed
toRegionPath0spassed
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/css/base-style.css b/spring-session-data-geode/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/spring-session-data-geode/build/reports/tests/test/css/style.css b/spring-session-data-geode/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/spring-session-data-geode/build/reports/tests/test/index.html b/spring-session-data-geode/build/reports/tests/test/index.html new file mode 100644 index 0000000..c1dbac0 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/index.html @@ -0,0 +1,207 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
127
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
2.130s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+ + +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/js/report.js b/spring-session-data-geode/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html new file mode 100644 index 0000000..053530c --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package org.springframework.session.data.gemfire.config.annotation.web.http + + + + + +
+

Package org.springframework.session.data.gemfire.config.annotation.web.http

+ +
+ + + + + +
+
+ + + + + + + +
+
+
14
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.176s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+GemFireHttpSessionConfigurationTest +14000.176s100%
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.support.html b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.support.html new file mode 100644 index 0000000..90fce70 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.support.html @@ -0,0 +1,113 @@ + + + + + +Test results - Package org.springframework.session.data.gemfire.config.annotation.web.http.support + + + + + +
+

Package org.springframework.session.data.gemfire.config.annotation.web.http.support

+ +
+ + + + + +
+
+ + + + + + + +
+
+
22
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.065s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+GemFireCacheTypeAwareRegionFactoryBeanTest +17000.050s100%
+SessionAttributesIndexFactoryBeanTests +5000.015s100%
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.html b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.html new file mode 100644 index 0000000..2838677 --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.html @@ -0,0 +1,113 @@ + + + + + +Test results - Package org.springframework.session.data.gemfire + + + + + +
+

Package org.springframework.session.data.gemfire

+ +
+ + + + + +
+
+ + + + + + + +
+
+
73
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
1.882s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+AbstractGemFireOperationsSessionRepositoryTest +61001.845s100%
+GemFireOperationsSessionRepositoryTest +12000.037s100%
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.support.html b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.support.html new file mode 100644 index 0000000..c6c182c --- /dev/null +++ b/spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.support.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package org.springframework.session.data.gemfire.support + + + + + +
+

Package org.springframework.session.data.gemfire.support

+ +
+ + + + + +
+
+ + + + + + + +
+
+
18
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.007s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+GemFireUtilsTest +18000.007s100%
+
+
+ +
+ + diff --git a/spring-session-data-geode/build/resources/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml b/spring-session-data-geode/build/resources/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml new file mode 100644 index 0000000..6ccf874 --- /dev/null +++ b/spring-session-data-geode/build/resources/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml @@ -0,0 +1,26 @@ + + + + + GemFireHttpSessionXmlConfigurationTests + 0 + warning + + + + + + + diff --git a/spring-session-data-geode/build/test-results/integrationTest/binary/output.bin b/spring-session-data-geode/build/test-results/integrationTest/binary/output.bin new file mode 100644 index 0000000..a8d2fe6 Binary files /dev/null and b/spring-session-data-geode/build/test-results/integrationTest/binary/output.bin differ diff --git a/spring-session-data-geode/build/test-results/integrationTest/binary/output.bin.idx b/spring-session-data-geode/build/test-results/integrationTest/binary/output.bin.idx new file mode 100644 index 0000000..1693388 Binary files /dev/null and b/spring-session-data-geode/build/test-results/integrationTest/binary/output.bin.idx differ diff --git a/spring-session-data-geode/build/test-results/integrationTest/binary/results.bin b/spring-session-data-geode/build/test-results/integrationTest/binary/results.bin new file mode 100644 index 0000000..e294c66 Binary files /dev/null and b/spring-session-data-geode/build/test-results/integrationTest/binary/results.bin differ diff --git a/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.xml b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.xml new file mode 100644 index 0000000..a415a18 --- /dev/null +++ b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tid=0xc] Instantiator registered with id 800,813,552 class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSession + +[info 2017/06/06 00:28:09.996 PDT tid=0xc] Instantiator registered with id 800,828,008 class org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes + +]]> + + diff --git a/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.xml b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.xml new file mode 100644 index 0000000..0f12180 --- /dev/null +++ b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.xml b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.xml new file mode 100644 index 0000000..8a3d877 --- /dev/null +++ b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.xml b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.xml new file mode 100644 index 0000000..db7c1cd --- /dev/null +++ b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.xml b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.xml new file mode 100644 index 0000000..80b70f0 --- /dev/null +++ b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.support.GemFireUtilsTest.xml b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.support.GemFireUtilsTest.xml new file mode 100644 index 0000000..af8ee47 --- /dev/null +++ b/spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.support.GemFireUtilsTest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-session-data-geode/build/test-results/test/binary/output.bin b/spring-session-data-geode/build/test-results/test/binary/output.bin new file mode 100644 index 0000000..f96aa6f Binary files /dev/null and b/spring-session-data-geode/build/test-results/test/binary/output.bin differ diff --git a/spring-session-data-geode/build/test-results/test/binary/output.bin.idx b/spring-session-data-geode/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000..851a50d Binary files /dev/null and b/spring-session-data-geode/build/test-results/test/binary/output.bin.idx differ diff --git a/spring-session-data-geode/build/test-results/test/binary/results.bin b/spring-session-data-geode/build/test-results/test/binary/results.bin new file mode 100644 index 0000000..bac19fe Binary files /dev/null and b/spring-session-data-geode/build/test-results/test/binary/results.bin differ diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MANIFEST.MF b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MANIFEST.MF new file mode 100644 index 0000000..8d85d70 --- /dev/null +++ b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MANIFEST.MF @@ -0,0 +1,31 @@ +Manifest-Version: 1.0 +Export-Package: org.jacoco.agent;version="0.7.6" +Built-By: godin +Bundle-Name: JaCoCo Agent +Created-By: Apache Maven +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Eclipse-SourceReferences: scm:git:git://github.com/jacoco/jacoco.git;p + ath="org.jacoco.agent";commitId=930a8183af45591a60cc6690a639b7b6c14f7 + ee5 +Bundle-Vendor: Mountainminds GmbH & Co. KG +Build-Jdk: 1.6.0_45 +Bundle-Version: 0.7.6.201602180812 +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: org.jacoco.agent +Archiver-Version: Plexus Archiver + +Name: org/jacoco/agent/AgentJar.class +SHA1-Digest: m/pw5pHyTwQ1iB3Or7PKmHAQml0= + +Name: META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml +SHA1-Digest: DRCWPfexwy/3TVAuj6bJnSDDtrw= + +Name: META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties +SHA1-Digest: P42YqJz71uvpFr/qxGs2GeLtOlA= + +Name: jacocoagent.jar +SHA1-Digest: WpelhZyN0Rgi6Eu0LbknFXc/o18= + +Name: about.html +SHA1-Digest: RP+6TPM8XgYW5xy9CqpZawAxoDA= + diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.RSA b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.RSA new file mode 100644 index 0000000..e1188f3 Binary files /dev/null and b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.RSA differ diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.SF b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.SF new file mode 100644 index 0000000..18f68ba --- /dev/null +++ b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.SF @@ -0,0 +1,20 @@ +Signature-Version: 1.0 +Created-By: 1.5.0_22 (Sun Microsystems Inc.) +SHA1-Digest-Manifest-Main-Attributes: qO1zTsbWM8t4KDAbnNyocctsNt4= +SHA1-Digest-Manifest: eR059RSMcuFm9KPHb+v1u2vw494= + +Name: org/jacoco/agent/AgentJar.class +SHA1-Digest: L7YENfXX+fZQsjy6fTAhltTDqlI= + +Name: META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml +SHA1-Digest: d+1n0RijhLItJwWWgYpgU3v8GSo= + +Name: jacocoagent.jar +SHA1-Digest: SA5hF/rhg10KBzp/dkIAtr9rNTU= + +Name: META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties +SHA1-Digest: h2wJH3Xu11Mm8ryZ662l8NCt8AU= + +Name: about.html +SHA1-Digest: mkyoBBHZxigAKWJjlJI9q2YX3zY= + diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties new file mode 100644 index 0000000..8ec824f --- /dev/null +++ b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Feb 18 09:45:06 CET 2016 +version=0.7.6.201602180812 +groupId=org.jacoco +artifactId=org.jacoco.agent diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml new file mode 100644 index 0000000..8b8a889 --- /dev/null +++ b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml @@ -0,0 +1,83 @@ + + + + 4.0.0 + + + org.jacoco + org.jacoco.build + 0.7.6.201602180812 + ../org.jacoco.build + + + org.jacoco.agent + + JaCoCo :: Agent + JaCoCo Agent + + + src + + + + org.apache.maven.plugins + maven-dependency-plugin + + + prepare-package + + copy + + + + + ${project.groupId} + org.jacoco.agent.rt + all + ${project.version} + jacocoagent.jar + + + ${project.build.directory}/classes + false + false + true + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-artifacts + package + + attach-artifact + + + + + ${project.build.directory}/classes/jacocoagent.jar + jar + runtime + + + + + + + + + diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/about.html b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/about.html new file mode 100644 index 0000000..b2a2216 --- /dev/null +++ b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/about.html @@ -0,0 +1,73 @@ + + + + +About + + + +

About This Content

+ +

+ 2016/02/18 +

+ +

License

+ +

+ All Content in this plug-in is made available by Mountainminds GmbH & Co. + KG, Munich. Unless otherwise indicated below, the Content is provided to you + under the terms and conditions of the Eclipse Public License Version 1.0 + ("EPL"). A copy of the EPL is available at + http://www.eclipse.org/legal/epl-v10.html. + For purposes of the EPL, "Program" will mean the Content. +

+ +

Third Party Content

+ +

+ The Content includes items that have been sourced from third parties as set + out below. +

+ +

ASM

+ +

+ This plug-in contains the ASM library + which is subject to the terms and conditions of the following license: +

+ +
+Copyright (c) 2012 France Télécom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+ + + \ No newline at end of file diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/jacocoagent.jar b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/jacocoagent.jar new file mode 100644 index 0000000..eb1b936 Binary files /dev/null and b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/jacocoagent.jar differ diff --git a/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/org/jacoco/agent/AgentJar.class b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/org/jacoco/agent/AgentJar.class new file mode 100644 index 0000000..772a51a Binary files /dev/null and b/spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/org/jacoco/agent/AgentJar.class differ diff --git a/spring-session-data-geode/build/tmp/jar/MANIFEST.MF b/spring-session-data-geode/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/spring-session-data-geode/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/spring-session-data-geode/build/tmp/javadoc/javadoc.options b/spring-session-data-geode/build/tmp/javadoc/javadoc.options new file mode 100644 index 0000000..2cdda33 --- /dev/null +++ b/spring-session-data-geode/build/tmp/javadoc/javadoc.options @@ -0,0 +1,13 @@ +-Xdoclint:none '-quiet' +-classpath '/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/build/classes/main:/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/build/resources/main:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-context-support/5.0.0.RC1/7df5752c67a51d9eebf28721e846a1470b14e750/spring-context-support-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-jcl/5.0.0.RC1/a4b74ce6de0f294a6566d7310db9234dacf66913/spring-jcl-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework.session/spring-session/2.0.0.M1/be9856417ab4e4a528399f7008c0731a3d449d02/spring-session-2.0.0.M1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework.data/spring-data-geode/1.0.0.INCUBATING-RELEASE/6269c9ceaaadcadc13292a612de09068bf1bab72/spring-data-geode-1.0.0.INCUBATING-RELEASE.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/5.0.0.RC1/fe37bc424cfe7080f15c7bea15a8052134fc7cec/spring-beans-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-context/5.0.0.RC1/c298c7acf56a2ab359eede52269c120ee58890e4/spring-context-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/5.0.0.RC1/cf3e7fbdb3523a1d9142090e69c26218f423e48e/spring-core-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-tx/5.0.0.RC1/b2722e5a777a1f497240fd2c56a14593c019aa4/spring-tx-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework.data/spring-data-commons/2.0.0.M3/ea0ca2443a247e1ff03e14d74aa7deb84c78a447/spring-data-commons-2.0.0.M3.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.geode/geode-core/1.0.0-incubating/28ed9510a84bfd48f1f01ac4bb6f2d5717fc01f/geode-core-1.0.0-incubating.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.geode/geode-cq/1.0.0-incubating/affc791b72ec8702db60b2b0d97b74c8f9682f64/geode-cq-1.0.0-incubating.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.geode/geode-wan/1.0.0-incubating/fe7a566cfcda2d562294c3ce75c6baa87b81dc2a/geode-wan-1.0.0-incubating.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/antlr/antlr/2.7.7/83cd2cd674a217ade95a4bb83a8a14f351f48bd0/antlr-2.7.7.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.aspectj/aspectjweaver/1.8.10/e198c5fee28988c355f74e06461614eae36b2032/aspectjweaver-1.8.10.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.shiro/shiro-spring/1.3.2/281a6b565f6cf3aebd31ddb004632008d7106f2d/shiro-spring-1.3.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.9.0.pr3/dede10be4aaaa6893561372dc5196644268997b7/jackson-annotations-2.9.0.pr3.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.9.0.pr3/41a8d484e0fe00102724d03090503ad212ee3c20/jackson-databind-2.9.0.pr3.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.slf4j/jcl-over-slf4j/1.7.25/f8c32b13ff142a513eeb5b6330b1588dcb2c0461/jcl-over-slf4j-1.7.25.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.25/da76ca59f6a57ee3102f8f9bd9cee742973efa8a/slf4j-api-1.7.25.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/5.0.0.RC1/96cb0b1089ca94ca095d5f81b3f15cf0c3dab858/spring-aop-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-expression/5.0.0.RC1/cbe8fde7845e92b77730c961274cab91e63d51f4/spring-expression-5.0.0.RC1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/com.github.stephenc.findbugs/findbugs-annotations/1.3.9-1/a6b11447635d80757d64b355bed3c00786d86801/findbugs-annotations-1.3.9-1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.jgroups/jgroups/3.6.10.Final/fc0ff5a8a9de27ab62939956f705c2909bf86bc2/jgroups-3.6.10.Final.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.5/2852e6e05fbb95076fc091f6d1780f1f8fe35e0f/commons-io-2.5.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/commons-lang/commons-lang/2.6/ce1edb914c94ebc388f086c6827e8bdeec71ac2/commons-lang-2.6.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/it.unimi.dsi/fastutil/7.0.2/20876232e2cd12563507e4c9e85bd7948bc0656f/fastutil-7.0.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/javax.resource/javax.resource-api/1.7/ae40e0864eb1e92c48bf82a2a3399cbbf523fb79/javax.resource-api-1.7.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/4.2.2/5012450aee579c3118ff09461d5ce210e0cdc2a9/jna-4.2.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/net.sf.jopt-simple/jopt-simple/5.0.3/cdd846cfc4e0f7eefafc02c0f5dce32b9303aa2a/jopt-simple-5.0.3.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.8.2/e590eeb783348ce8ddef205b82127f9084d82bf3/log4j-api-2.8.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.8.2/979fc0cf8460302e4ffbfe38c1b66a99450b0bb7/log4j-core-2.8.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.shiro/shiro-core/1.3.2/b5dede9d890f335998a8ebf479809fe365b927fc/shiro-core-1.3.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.geode/geode-common/1.0.0-incubating/600f9697cf677e8ce244b3ee946cdbf037f2bb65/geode-common-1.0.0-incubating.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.geode/geode-json/1.0.0-incubating/2e36fef114e6079a0603da1e64f3be6c772e8c8b/geode-json-1.0.0-incubating.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.apache.shiro/shiro-web/1.3.2/725be023e1c65a0fd70c01b8c0c13a2936c23315/shiro-web-1.3.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.9.0.pr3/f9c6d5cfde33c589596d1f43200ec052a2c7c9c0/jackson-core-2.9.0.pr3.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/javax.transaction/javax.transaction-api/1.2/d81aff979d603edd90dcd8db2abc1f4ce6479e3e/javax.transaction-api-1.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/commons-beanutils/commons-beanutils/1.9.3/c845703de334ddc6b4b3cd26835458cb1cba1f3d/commons-beanutils-1.9.3.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/commons-collections/commons-collections/3.2.2/8ad72fe39fa8c91eaaf12aadb21e0c3661fe26d5/commons-collections-3.2.2.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/javax.servlet/javax.servlet-api/3.1.0/3cd63d075497751784b2fa84be59432f4905bf7c/javax.servlet-api-3.1.0.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework.security/spring-security-core/5.0.0.M1/b3c6d9a44c56169e9eef1fa26a21f45ecb910113/spring-security-core-5.0.0.M1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework.security/spring-security-web/5.0.0.M1/42f7b5959a498f449ec24d39a4919fada522910/spring-security-web-5.0.0.M1.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/aopalliance/aopalliance/1.0/235ba8b489512805ac13a8f9ea77a1ca5ebe3e8/aopalliance-1.0.jar:/Users/jblum/.gradle/caches/modules-2/files-2.1/org.springframework/spring-web/5.0.0.RC1/db67d491ab52de7f60c8ee2ce0c5a92622d5253e/spring-web-5.0.0.RC1.jar' +-d '/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/build/docs/javadoc' +-doctitle 'spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API' +-quiet +-windowtitle 'spring-session-data-geode 2.0.0.BUILD-SNAPSHOT API' +'/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java' +'/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.java' +'/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java' +'/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java' +'/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.java' +'/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.java' +'/Users/jblum/pivdev/spring-session-data-geode/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/support/GemFireUtils.java' diff --git a/spring-session-data-geode/build/tmp/javadocJar/MANIFEST.MF b/spring-session-data-geode/build/tmp/javadocJar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/spring-session-data-geode/build/tmp/javadocJar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/spring-session-data-geode/build/tmp/sourcesJar/MANIFEST.MF b/spring-session-data-geode/build/tmp/sourcesJar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/spring-session-data-geode/build/tmp/sourcesJar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/spring-session-data-geode/build/tmp/test/jar_extract_3534788898651611142_tmp b/spring-session-data-geode/build/tmp/test/jar_extract_3534788898651611142_tmp new file mode 100644 index 0000000..ab42096 Binary files /dev/null and b/spring-session-data-geode/build/tmp/test/jar_extract_3534788898651611142_tmp differ diff --git a/spring-session-data-geode/build/tmp/test/jar_extract_3883784754140269879_tmp b/spring-session-data-geode/build/tmp/test/jar_extract_3883784754140269879_tmp new file mode 100644 index 0000000..337edc7 Binary files /dev/null and b/spring-session-data-geode/build/tmp/test/jar_extract_3883784754140269879_tmp differ diff --git a/spring-session-data-geode/build/tmp/test/jar_extract_4722192187809226552_tmp b/spring-session-data-geode/build/tmp/test/jar_extract_4722192187809226552_tmp new file mode 100644 index 0000000..547008c Binary files /dev/null and b/spring-session-data-geode/build/tmp/test/jar_extract_4722192187809226552_tmp differ diff --git a/spring-session-data-geode/build/tmp/test/jar_extract_6068052779162431878_tmp b/spring-session-data-geode/build/tmp/test/jar_extract_6068052779162431878_tmp new file mode 100644 index 0000000..65ed33f Binary files /dev/null and b/spring-session-data-geode/build/tmp/test/jar_extract_6068052779162431878_tmp differ diff --git a/spring-session-data-geode/build/tmp/test/jar_extract_6126860805247402580_tmp b/spring-session-data-geode/build/tmp/test/jar_extract_6126860805247402580_tmp new file mode 100644 index 0000000..e69de29 diff --git a/spring-session-data-geode/spring-session-data-geode.gradle b/spring-session-data-geode/spring-session-data-geode.gradle new file mode 100644 index 0000000..5a0e07a --- /dev/null +++ b/spring-session-data-geode/spring-session-data-geode.gradle @@ -0,0 +1,21 @@ +apply plugin: 'io.spring.convention.spring-module' + +description = "Spring Session Data Geode" + +dependencies { + compile "org.springframework.session:spring-session" + compile "org.springframework:spring-jcl" + compile "org.springframework.data:spring-data-gemfire" + + provided "javax.servlet:javax.servlet-api" + + integrationTestRuntime "org.springframework.shell:spring-shell" + + testCompile "edu.umd.cs.mtc:multithreadedtc" + testCompile "junit:junit" + testCompile "org.assertj:assertj-core" + testCompile "org.mockito:mockito-core" + testCompile "org.springframework.security:spring-security-core" + testCompile "org.springframework:spring-test" + testCompile "org.springframework:spring-web" +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java new file mode 100644 index 0000000..ac0e23f --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java @@ -0,0 +1,460 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.io.File; +import java.io.IOException; +import java.net.Socket; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.CacheClosedException; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.ExpirationAttributes; +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.ClientCacheFactory; +import org.apache.geode.cache.query.Index; +import org.apache.geode.cache.server.CacheServer; + +import org.junit.Before; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.session.events.AbstractSessionEvent; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * {@link AbstractGemFireIntegrationTests} is an abstract base class encapsulating common functionality + * for writing Spring Session GemFire integration tests. + * + * @author John Blum + * @since 1.1.0 + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.client.ClientCache + * @see org.apache.geode.cache.query.Index + * @see org.apache.geode.cache.server.CacheServer + * @see org.springframework.session.ExpiringSession + */ +public abstract class AbstractGemFireIntegrationTests { + + protected static final boolean DEFAULT_ENABLE_QUERY_DEBUGGING = false; + + protected static final boolean GEMFIRE_QUERY_DEBUG = Boolean.getBoolean("spring.session.data.gemfire.query.debug"); + + protected static final int DEFAULT_GEMFIRE_SERVER_PORT = CacheServer.DEFAULT_PORT; + + protected static final long DEFAULT_WAIT_DURATION = TimeUnit.SECONDS.toMillis(20); + protected static final long DEFAULT_WAIT_INTERVAL = 500L; + + protected static final File WORKING_DIRECTORY = new File(System.getProperty("user.dir")); + + protected static final String DEFAULT_PROCESS_CONTROL_FILENAME = "process.ctl"; + + protected static final String GEMFIRE_LOG_FILE_NAME = + System.getProperty("spring.session.data.gemfire.log-file", "server.log"); + + protected static final String GEMFIRE_LOG_LEVEL = + System.getProperty("spring.session.data.gemfire.log-level", "error"); + + @Autowired + protected Cache gemfireCache; + + @Autowired + protected GemFireOperationsSessionRepository gemfireSessionRepository; + + @Before + public void setup() { + System.setProperty("gemfire.Query.VERBOSE", String.valueOf(isQueryDebuggingEnabled())); + } + + /* (non-Javadoc) */ + protected static File createDirectory(String pathname) { + File directory = new File(WORKING_DIRECTORY, pathname); + + assertThat(directory.isDirectory() || directory.mkdirs()) + .as(String.format("Failed to create directory (%1$s)", directory)).isTrue(); + + directory.deleteOnExit(); + + return directory; + } + + /* (non-Javadoc) */ + protected static List createJavaProcessCommandLine(Class type, String... args) { + List commandLine = new ArrayList(); + + String javaHome = System.getProperty("java.home"); + String javaExe = new File(new File(javaHome, "bin"), "java").getAbsolutePath(); + + commandLine.add(javaExe); + commandLine.add("-server"); + commandLine.add("-ea"); + commandLine.add(String.format("-Dgemfire.log-file=%1$s", GEMFIRE_LOG_FILE_NAME)); + commandLine.add(String.format("-Dgemfire.log-level=%1$s", GEMFIRE_LOG_LEVEL)); + commandLine.add(String.format("-Dgemfire.Query.VERBOSE=%1$s", GEMFIRE_QUERY_DEBUG)); + commandLine.addAll(extractJvmArguments(args)); + commandLine.add("-classpath"); + commandLine.add(System.getProperty("java.class.path")); + commandLine.add(type.getName()); + commandLine.addAll(extractProgramArguments(args)); + + // System.err.printf("Java process command-line is (%1$s)%n", commandLine); + + return commandLine; + } + + /* (non-Javadoc) */ + protected static List extractJvmArguments(final String... args) { + List jvmArgs = new ArrayList(args.length); + + for (String arg : args) { + if (arg.startsWith("-")) { + jvmArgs.add(arg); + } + } + + return jvmArgs; + } + + /* (non-Javadoc) */ + protected static List extractProgramArguments(final String... args) { + List jvmArgs = new ArrayList(args.length); + + for (String arg : args) { + if (!arg.startsWith("-")) { + jvmArgs.add(arg); + } + } + + return jvmArgs; + } + + /* (non-Javadoc) */ + protected static Process run(Class type, File directory, String... args) throws IOException { + return new ProcessBuilder().command(createJavaProcessCommandLine(type, args)).directory(directory).start(); + } + + /* (non-Javadoc) */ + protected static boolean waitForCacheServerToStart(CacheServer cacheServer) { + return waitForCacheServerToStart(cacheServer, DEFAULT_WAIT_DURATION); + } + + /* (non-Javadoc) */ + protected static boolean waitForCacheServerToStart(CacheServer cacheServer, long duration) { + return waitForCacheServerToStart(cacheServer.getBindAddress(), cacheServer.getPort(), duration); + } + + /* (non-Javadoc) */ + protected static boolean waitForCacheServerToStart(String host, int port) { + return waitForCacheServerToStart(host, port, DEFAULT_WAIT_DURATION); + } + + /* (non-Javadoc) */ + protected static boolean waitForCacheServerToStart(final String host, final int port, long duration) { + return waitOnCondition(new Condition() { + AtomicBoolean connected = new AtomicBoolean(false); + + public boolean evaluate() { + Socket socket = null; + + try { + if (!connected.get()) { + socket = new Socket(host, port); + connected.set(true); + } + } + catch (IOException ignore) { + } + finally { + GemFireUtils.close(socket); + } + + return connected.get(); + } + }, duration); + } + + // NOTE this method would not be necessary except Spring Sessions' build does not fork + // the test JVM + // for every test class. + /* (non-Javadoc) */ + protected static boolean waitForClientCacheToClose() { + return waitForClientCacheToClose(DEFAULT_WAIT_DURATION); + } + + /* (non-Javadoc) */ + protected static boolean waitForClientCacheToClose(long duration) { + try { + final ClientCache clientCache = ClientCacheFactory.getAnyInstance(); + + clientCache.close(); + + waitOnCondition(new Condition() { + public boolean evaluate() { + return clientCache.isClosed(); + } + }, duration); + + return clientCache.isClosed(); + } + catch (CacheClosedException ignore) { + return true; + } + + } + + /* (non-Javadoc) */ + protected static boolean waitForProcessToStart(Process process, File directory) { + return waitForProcessToStart(process, directory, DEFAULT_WAIT_DURATION); + } + + /* (non-Javadoc) */ + @SuppressWarnings("all") + protected static boolean waitForProcessToStart(Process process, File directory, long duration) { + final File processControl = new File(directory, DEFAULT_PROCESS_CONTROL_FILENAME); + + waitOnCondition(new Condition() { + public boolean evaluate() { + return processControl.isFile(); + } + }, duration); + + return process.isAlive(); + } + + /* (non-Javadoc) */ + protected static int waitForProcessToStop(Process process, File directory) { + return waitForProcessToStop(process, directory, DEFAULT_WAIT_DURATION); + } + + /* (non-Javadoc) */ + protected static int waitForProcessToStop(Process process, File directory, long duration) { + long timeout = (System.currentTimeMillis() + duration); + + try { + while (process.isAlive() && System.currentTimeMillis() < timeout) { + if (process.waitFor(DEFAULT_WAIT_INTERVAL, TimeUnit.MILLISECONDS)) { + return process.exitValue(); + } + } + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + return (process.isAlive() ? -1 : process.exitValue()); + } + + /* (non-Javadoc) */ + protected static boolean waitOnCondition(Condition condition) { + return waitOnCondition(condition, DEFAULT_WAIT_DURATION); + } + + /* (non-Javadoc) */ + @SuppressWarnings("all") + protected static boolean waitOnCondition(Condition condition, long duration) { + long timeout = (System.currentTimeMillis() + duration); + + try { + while (!condition.evaluate() && System.currentTimeMillis() < timeout) { + synchronized (condition) { + TimeUnit.MILLISECONDS.timedWait(condition, DEFAULT_WAIT_INTERVAL); + } + } + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + return condition.evaluate(); + } + + /* (non-Javadoc) */ + protected static File writeProcessControlFile(File path) throws IOException { + assertThat(path != null && path.isDirectory()).isTrue(); + + File processControl = new File(path, DEFAULT_PROCESS_CONTROL_FILENAME); + + assertThat(processControl.createNewFile()).isTrue(); + + processControl.deleteOnExit(); + + return processControl; + } + + /* (non-Javadoc) */ + protected void assertValidSession(ExpiringSession session) { + assertThat(session).isNotNull(); + assertThat(session.getId()).isNotEmpty(); + assertThat(session.isExpired()).isFalse(); + } + + /* (non-Javadoc) */ + protected void assertRegion(Region actualRegion, String expectedName, DataPolicy expectedDataPolicy) { + assertThat(actualRegion).isNotNull(); + assertThat(actualRegion.getName()).isEqualTo(expectedName); + assertThat(actualRegion.getFullPath()).isEqualTo(GemFireUtils.toRegionPath(expectedName)); + assertThat(actualRegion.getAttributes()).isNotNull(); + assertThat(actualRegion.getAttributes().getDataPolicy()).isEqualTo(expectedDataPolicy); + } + + /* (non-Javadoc) */ + protected void assertIndex(Index index, String expectedExpression, String expectedFromClause) { + assertThat(index).isNotNull(); + assertThat(index.getIndexedExpression()).isEqualTo(expectedExpression); + assertThat(index.getFromClause()).isEqualTo(expectedFromClause); + } + + /* (non-Javadoc) */ + protected void assertEntryIdleTimeout(Region region, ExpirationAction expectedAction, int expectedTimeout) { + assertEntryIdleTimeout(region.getAttributes().getEntryIdleTimeout(), expectedAction, expectedTimeout); + } + + /* (non-Javadoc) */ + protected void assertEntryIdleTimeout(ExpirationAttributes actualExpirationAttributes, + ExpirationAction expectedAction, int expectedTimeout) { + + assertThat(actualExpirationAttributes).isNotNull(); + assertThat(actualExpirationAttributes.getAction()).isEqualTo(expectedAction); + assertThat(actualExpirationAttributes.getTimeout()).isEqualTo(expectedTimeout); + } + + /* (non-Javadoc) */ + protected boolean enableQueryDebugging() { + return DEFAULT_ENABLE_QUERY_DEBUGGING; + } + + /* (non-Javadoc) */ + protected boolean isQueryDebuggingEnabled() { + return (GEMFIRE_QUERY_DEBUG || enableQueryDebugging()); + } + + /* (non-Javadoc) */ + protected List listRegions(GemFireCache gemfireCache) { + Set> regions = gemfireCache.rootRegions(); + + List regionList = new ArrayList(regions.size()); + + for (Region region : regions) { + regionList.add(region.getFullPath()); + } + + return regionList; + } + + /* (non-Javadoc) */ + @SuppressWarnings("unchecked") + protected T createSession() { + T expiringSession = (T) this.gemfireSessionRepository.createSession(); + assertThat(expiringSession).isNotNull(); + return expiringSession; + } + + /* (non-Javadoc) */ + @SuppressWarnings("unchecked") + protected T createSession(String principalName) { + GemFireOperationsSessionRepository.GemFireSession session = createSession(); + session.setPrincipalName(principalName); + return (T) session; + } + + /* (non-Javadoc) */ + protected T delete(T session) { + this.gemfireSessionRepository.delete(session); + return session; + } + + /* (non-Javadoc) */ + protected T expire(T session) { + session.setLastAccessedTime(0L); + return session; + } + + /* (non-Javadoc) */ + @SuppressWarnings("unchecked") + protected T get(String sessionId) { + return (T) this.gemfireSessionRepository.getSession(sessionId); + } + + /* (non-Javadoc) */ + protected T save(T session) { + this.gemfireSessionRepository.save(session); + return session; + } + + /* (non-Javadoc) */ + protected T touch(T session) { + session.setLastAccessedTime(System.currentTimeMillis()); + return session; + } + + /** + * The SessionEventListener class is a Spring {@link ApplicationListener} listening + * for Spring HTTP Session application events. + * + * @see org.springframework.context.ApplicationListener + * @see org.springframework.session.events.AbstractSessionEvent + */ + public static class SessionEventListener implements ApplicationListener { + + private volatile AbstractSessionEvent sessionEvent; + + /* (non-Javadoc) */ + @SuppressWarnings("unchecked") + public T getSessionEvent() { + T sessionEvent = (T) this.sessionEvent; + this.sessionEvent = null; + return sessionEvent; + } + + /* (non-Javadoc) */ + public void onApplicationEvent(AbstractSessionEvent event) { + this.sessionEvent = event; + } + + /* (non-Javadoc) */ + public T waitForSessionEvent(long duration) { + waitOnCondition(new Condition() { + public boolean evaluate() { + return (SessionEventListener.this.sessionEvent != null); + } + }, duration); + + return getSessionEvent(); + } + } + + /** + * The Condition interface defines a logical condition that must be satisfied before + * it is safe to proceed. + */ + protected interface Condition { + boolean evaluate(); + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java new file mode 100644 index 0000000..b1c0db1 --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java @@ -0,0 +1,374 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.ClientRegionShortcut; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; +import org.springframework.data.gemfire.client.PoolFactoryBean; +import org.springframework.data.gemfire.server.CacheServerFactoryBean; +import org.springframework.data.gemfire.support.ConnectionEndpoint; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.session.events.AbstractSessionEvent; +import org.springframework.session.events.SessionCreatedEvent; +import org.springframework.session.events.SessionDeletedEvent; +import org.springframework.session.events.SessionExpiredEvent; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.util.FileSystemUtils; +import org.springframework.util.SocketUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests to test the functionality of GemFire-backed Spring Sessions using + * the GemFire client-server topology. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.springframework.context.ConfigurableApplicationContext + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests + * @see org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @see org.springframework.test.annotation.DirtiesContext + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringRunner + * @see org.springframework.test.context.web.WebAppConfiguration + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.client.ClientCache + * @see org.apache.geode.cache.client.Pool + * @see org.apache.geode.cache.server.CacheServer + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = + ClientServerGemFireOperationsSessionRepositoryIntegrationTests.SpringSessionDataGemFireClientConfiguration.class) +@DirtiesContext +@WebAppConfiguration +public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests + extends AbstractGemFireIntegrationTests { + + private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1; + + private static final DateFormat TIMESTAMP = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + + private static File processWorkingDirectory; + + private static Process gemfireServer; + + private static final String SPRING_SESSION_GEMFIRE_REGION_NAME = "TestClientServerSessions"; + + @Autowired + private SessionEventListener sessionEventListener; + + @BeforeClass + public static void startGemFireServer() throws IOException { + long t0 = System.currentTimeMillis(); + + int port = SocketUtils.findAvailableTcpPort(); + + System.err.printf("Starting a GemFire Server running on host [%1$s] listening on port [%2$d]%n", + SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port); + + System.setProperty("spring.session.data.gemfire.port", String.valueOf(port)); + + String processWorkingDirectoryPathname = + String.format("gemfire-client-server-tests-%1$s", TIMESTAMP.format(new Date())); + + processWorkingDirectory = createDirectory(processWorkingDirectoryPathname); + + gemfireServer = run(SpringSessionDataGemFireServerConfiguration.class, processWorkingDirectory, + String.format("-Dspring.session.data.gemfire.port=%1$d", port)); + + assertThat(waitForCacheServerToStart(SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port)) + .isTrue(); + + System.err.printf("GemFire Server [startup time = %1$d ms]%n", System.currentTimeMillis() - t0); + } + + @AfterClass + public static void stopGemFireServer() { + if (gemfireServer != null) { + gemfireServer.destroy(); + System.err.printf("GemFire Server [exit code = %1$d]%n", + waitForProcessToStop(gemfireServer, processWorkingDirectory)); + } + + if (Boolean.valueOf(System.getProperty("spring.session.data.gemfire.fork.clean", Boolean.TRUE.toString()))) { + FileSystemUtils.deleteRecursively(processWorkingDirectory); + } + + assertThat(waitForClientCacheToClose(DEFAULT_WAIT_DURATION)).isTrue(); + } + + @Before + public void setup() { + assertThat(GemFireUtils.isClient(gemfireCache)).isTrue(); + + Region springSessionGemFireRegion = + gemfireCache.getRegion(SPRING_SESSION_GEMFIRE_REGION_NAME); + + assertThat(springSessionGemFireRegion).isNotNull(); + + RegionAttributes springSessionGemFireRegionAttributes = + springSessionGemFireRegion.getAttributes(); + + assertThat(springSessionGemFireRegionAttributes).isNotNull(); + assertThat(springSessionGemFireRegionAttributes.getDataPolicy()).isEqualTo(DataPolicy.NORMAL); + } + + @After + public void tearDown() { + this.sessionEventListener.getSessionEvent(); + } + + @Test + public void createSessionFiresSessionCreatedEvent() { + long beforeOrAtCreationTime = System.currentTimeMillis(); + + ExpiringSession expectedSession = save(createSession()); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + + ExpiringSession createdSession = sessionEvent.getSession(); + + assertThat(createdSession.getId()).isEqualTo(expectedSession.getId()); + assertThat(createdSession.getCreationTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(createdSession.getLastAccessedTime()).isEqualTo(createdSession.getCreationTime()); + assertThat(createdSession.getMaxInactiveIntervalInSeconds()).isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + + createdSession.setAttribute("attrOne", 1); + + assertThat(save(touch(createdSession)).getAttribute("attrOne")).isEqualTo(1); + + sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isNull(); + + this.gemfireSessionRepository.delete(expectedSession.getId()); + } + + @Test + public void getExistingNonExpiredSessionBeforeAndAfterExpiration() { + ExpiringSession expectedSession = save(touch(createSession())); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + assertThat(sessionEvent.getSession()).isEqualTo(expectedSession); + assertThat(this.sessionEventListener.getSessionEvent()).isNull(); + + ExpiringSession savedSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(savedSession).isEqualTo(expectedSession); + + sessionEvent = this.sessionEventListener.waitForSessionEvent( + TimeUnit.SECONDS.toMillis(MAX_INACTIVE_INTERVAL_IN_SECONDS + 1)); + + assertThat(sessionEvent).isInstanceOf(SessionExpiredEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSession.getId()); + + ExpiringSession expiredSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(expiredSession).isNull(); + } + + @Test + public void deleteExistingNonExpiredSessionFiresSessionDeletedEventAndReturnsNullOnGet() { + ExpiringSession expectedSession = save(touch(createSession())); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + assertThat(sessionEvent.getSession()).isEqualTo(expectedSession); + + this.gemfireSessionRepository.delete(expectedSession.getId()); + + sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionDeletedEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSession.getId()); + + ExpiringSession deletedSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(deletedSession).isNull(); + } + + @EnableGemFireHttpSession(regionName = SPRING_SESSION_GEMFIRE_REGION_NAME, + clientRegionShortcut = ClientRegionShortcut.CACHING_PROXY, + maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS) + static class SpringSessionDataGemFireClientConfiguration { + + @Bean + static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + return gemfireProperties; + } + + @Bean + ClientCacheFactoryBean gemfireCache() { + ClientCacheFactoryBean clientCacheFactory = new ClientCacheFactoryBean(); + + clientCacheFactory.setClose(true); + clientCacheFactory.setProperties(gemfireProperties()); + + return clientCacheFactory; + } + + @Bean + PoolFactoryBean gemfirePool( + @Value("${spring.session.data.gemfire.port:" + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + PoolFactoryBean poolFactory = new PoolFactoryBean(); + + poolFactory.setKeepAlive(false); + poolFactory.setPingInterval(TimeUnit.SECONDS.toMillis(5)); + poolFactory.setReadTimeout(2000); // 2 seconds + poolFactory.setRetryAttempts(1); + poolFactory.setSubscriptionEnabled(true); + + poolFactory.setServers(Collections.singletonList(new ConnectionEndpoint( + SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port))); + + return poolFactory; + } + + @Bean + public SessionEventListener sessionEventListener() { + return new SessionEventListener(); + } + + // used for debugging purposes + @SuppressWarnings("resource") + public static void main(String[] args) { + ConfigurableApplicationContext applicationContext = new AnnotationConfigApplicationContext( + SpringSessionDataGemFireClientConfiguration.class); + + applicationContext.registerShutdownHook(); + + ClientCache clientCache = applicationContext.getBean(ClientCache.class); + + for (InetSocketAddress server : clientCache.getCurrentServers()) { + System.err.printf("GemFire Server [host: %1$s, port: %2$d]%n", + server.getHostName(), server.getPort()); + } + } + } + + @EnableGemFireHttpSession(regionName = SPRING_SESSION_GEMFIRE_REGION_NAME, + maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS) + static class SpringSessionDataGemFireServerConfiguration { + + static final String SERVER_HOSTNAME = "localhost"; + + @Bean + static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", name()); + gemfireProperties.setProperty("mcast-port", "0"); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + + return gemfireProperties; + } + + String name() { + return ClientServerGemFireOperationsSessionRepositoryIntegrationTests.class.getName(); + } + + @Bean + CacheFactoryBean gemfireCache() { + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + CacheServerFactoryBean gemfireCacheServer(Cache gemfireCache, + @Value("${spring.session.data.gemfire.port:" + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + CacheServerFactoryBean cacheServerFactory = new CacheServerFactoryBean(); + + cacheServerFactory.setCache(gemfireCache); + cacheServerFactory.setAutoStartup(true); + cacheServerFactory.setBindAddress(SERVER_HOSTNAME); + cacheServerFactory.setPort(port); + + return cacheServerFactory; + } + + @SuppressWarnings("resource") + public static void main(String[] args) throws IOException { + AnnotationConfigApplicationContext context = + new AnnotationConfigApplicationContext(SpringSessionDataGemFireServerConfiguration.class); + + context.registerShutdownHook(); + + writeProcessControlFile(WORKING_DIRECTORY); + } + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.java new file mode 100644 index 0000000..f4f95ef --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.java @@ -0,0 +1,285 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.client.ClientCache; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; +import org.springframework.data.gemfire.client.PoolFactoryBean; +import org.springframework.data.gemfire.server.CacheServerFactoryBean; +import org.springframework.data.gemfire.support.ConnectionEndpoint; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.FileSystemUtils; +import org.springframework.util.SocketUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests testing the addition/removal of HTTP Session Attributes + * and the proper persistence of the HTTP Session state in a GemFire cache + * across a client/server topology. + * + * @author John Blum + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.springframework.context.ConfigurableApplicationContext + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests + * @see org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringRunner + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.client.ClientCache + * @since 1.3.1 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = + ClientServerHttpSessionAttributesDeltaIntegrationTests.SpringSessionDataGemFireClientConfiguration.class) +public class ClientServerHttpSessionAttributesDeltaIntegrationTests extends AbstractGemFireIntegrationTests { + + private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1; + + private static final DateFormat TIMESTAMP = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + + private static File processWorkingDirectory; + + private static Process gemfireServer; + + @BeforeClass + public static void startGemFireServer() throws IOException { + long t0 = System.currentTimeMillis(); + + int port = SocketUtils.findAvailableTcpPort(); + + System.err.printf("Starting a GemFire Server running on host [%1$s] listening on port [%2$d]%n", + SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port); + + System.setProperty("spring.session.data.gemfire.port", String.valueOf(port)); + + String processWorkingDirectoryPathname = + String.format("gemfire-client-server-tests-%1$s", TIMESTAMP.format(new Date())); + + processWorkingDirectory = createDirectory(processWorkingDirectoryPathname); + + gemfireServer = run(SpringSessionDataGemFireServerConfiguration.class, processWorkingDirectory, + String.format("-Dspring.session.data.gemfire.port=%1$d", port)); + + assertThat(waitForCacheServerToStart(SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port)) + .isTrue(); + + System.err.printf("GemFire Server [startup time = %1$d ms]%n", System.currentTimeMillis() - t0); + } + + @AfterClass + public static void stopGemFireServer() { + if (gemfireServer != null) { + gemfireServer.destroy(); + System.err.printf("GemFire Server [exit code = %1$d]%n", + waitForProcessToStop(gemfireServer, processWorkingDirectory)); + } + + if (Boolean.valueOf(System.getProperty("spring.session.data.gemfire.fork.clean", Boolean.TRUE.toString()))) { + FileSystemUtils.deleteRecursively(processWorkingDirectory); + } + + assertThat(waitForClientCacheToClose(DEFAULT_WAIT_DURATION)).isTrue(); + } + + @Test + public void sessionCreationAndAccessIsSuccessful() { + ExpiringSession session = save(touch(createSession())); + + assertThat(session).isNotNull(); + assertThat(session.isExpired()).isFalse(); + + session.setAttribute("attrOne", 1); + session.setAttribute("attrTwo", 2); + + save(touch(session)); + + ExpiringSession loadedSession = get(session.getId()); + + assertThat(loadedSession).isNotNull(); + assertThat(loadedSession.isExpired()).isFalse(); + assertThat(loadedSession).isNotSameAs(session); + assertThat(loadedSession.getId()).isEqualTo(session.getId()); + assertThat(loadedSession.getAttribute("attrOne")).isEqualTo(1); + assertThat(loadedSession.getAttribute("attrTwo")).isEqualTo(2); + + loadedSession.removeAttribute("attrTwo"); + + assertThat(loadedSession.getAttributeNames()).doesNotContain("attrTwo"); + assertThat(loadedSession.getAttributeNames()).hasSize(1); + + save(touch(loadedSession)); + + ExpiringSession reloadedSession = get(loadedSession.getId()); + + assertThat(reloadedSession).isNotNull(); + assertThat(reloadedSession.isExpired()).isFalse(); + assertThat(reloadedSession).isNotSameAs(loadedSession); + assertThat(reloadedSession.getId()).isEqualTo(loadedSession.getId()); + assertThat(reloadedSession.getAttributeNames()).hasSize(1); + assertThat(reloadedSession.getAttributeNames()).doesNotContain("attrTwo"); + assertThat(reloadedSession.getAttribute("attrOne")).isEqualTo(1); + } + + @EnableGemFireHttpSession + static class SpringSessionDataGemFireClientConfiguration { + + @Bean + static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + return gemfireProperties; + } + + @Bean + ClientCacheFactoryBean gemfireCache() { + ClientCacheFactoryBean clientCacheFactory = new ClientCacheFactoryBean(); + + clientCacheFactory.setClose(true); + clientCacheFactory.setProperties(gemfireProperties()); + + return clientCacheFactory; + } + + @Bean + PoolFactoryBean gemfirePool(@Value("${spring.session.data.gemfire.port:" + + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + PoolFactoryBean poolFactory = new PoolFactoryBean(); + + poolFactory.setKeepAlive(false); + poolFactory.setPingInterval(TimeUnit.SECONDS.toMillis(5)); + poolFactory.setReadTimeout(2000); // 2 seconds + poolFactory.setRetryAttempts(1); + poolFactory.setSubscriptionEnabled(true); + + poolFactory.setServers(Collections.singletonList(new ConnectionEndpoint( + SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port))); + + return poolFactory; + } + + // used for debugging purposes + @SuppressWarnings("resource") + public static void main(String[] args) { + ConfigurableApplicationContext applicationContext = + new AnnotationConfigApplicationContext(SpringSessionDataGemFireClientConfiguration.class); + + applicationContext.registerShutdownHook(); + + ClientCache clientCache = applicationContext.getBean(ClientCache.class); + + for (InetSocketAddress server : clientCache.getCurrentServers()) { + System.err.printf("GemFire Server [host: %1$s, port: %2$d]%n", + server.getHostName(), server.getPort()); + } + } + } + + @EnableGemFireHttpSession(maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS) + static class SpringSessionDataGemFireServerConfiguration { + + static final String SERVER_HOSTNAME = "localhost"; + + @Bean + static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", name()); + gemfireProperties.setProperty("mcast-port", "0"); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + + return gemfireProperties; + } + + String name() { + return ClientServerHttpSessionAttributesDeltaIntegrationTests.class.getName(); + } + + @Bean + CacheFactoryBean gemfireCache() { + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + CacheServerFactoryBean gemfireCacheServer(Cache gemfireCache, + @Value("${spring.session.data.gemfire.port:" + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + CacheServerFactoryBean cacheServerFactory = new CacheServerFactoryBean(); + + cacheServerFactory.setCache(gemfireCache); + cacheServerFactory.setAutoStartup(true); + cacheServerFactory.setBindAddress(SERVER_HOSTNAME); + cacheServerFactory.setPort(port); + + return cacheServerFactory; + } + + @SuppressWarnings("resource") + public static void main(String[] args) throws IOException { + AnnotationConfigApplicationContext context = + new AnnotationConfigApplicationContext(SpringSessionDataGemFireServerConfiguration.class); + + context.registerShutdownHook(); + + writeProcessControlFile(WORKING_DIRECTORY); + } + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.java new file mode 100644 index 0000000..1310085 --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.java @@ -0,0 +1,309 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.client.ClientCache; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; +import org.springframework.data.gemfire.client.PoolFactoryBean; +import org.springframework.data.gemfire.server.CacheServerFactoryBean; +import org.springframework.data.gemfire.support.ConnectionEndpoint; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.session.events.AbstractSessionEvent; +import org.springframework.session.events.SessionCreatedEvent; +import org.springframework.session.events.SessionDeletedEvent; +import org.springframework.session.events.SessionExpiredEvent; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.FileSystemUtils; +import org.springframework.util.SocketUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * The ClientServerProxyRegionSessionOperationsIntegrationTests class... + * + * @author John Blum + * @since 1.0.0 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = + ClientServerProxyRegionSessionOperationsIntegrationTests.SpringSessionDataGemFireClientConfiguration.class) +public class ClientServerProxyRegionSessionOperationsIntegrationTests extends AbstractGemFireIntegrationTests { + + private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1; + + private static final DateFormat TIMESTAMP = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + + private static File processWorkingDirectory; + + private static Process gemfireServer; + + @Autowired + private SessionEventListener sessionEventListener; + + @BeforeClass + public static void startGemFireServer() throws IOException { + long t0 = System.currentTimeMillis(); + + int port = SocketUtils.findAvailableTcpPort(); + + System.err.printf("Starting a GemFire Server running on host [%1$s] listening on port [%2$d]%n", + SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port); + + System.setProperty("spring.session.data.gemfire.port", String.valueOf(port)); + + String processWorkingDirectoryPathname = + String.format("gemfire-client-server-tests-%1$s", TIMESTAMP.format(new Date())); + + processWorkingDirectory = createDirectory(processWorkingDirectoryPathname); + + gemfireServer = run(SpringSessionDataGemFireServerConfiguration.class, processWorkingDirectory, + String.format("-Dspring.session.data.gemfire.port=%1$d", port)); + + assertThat(waitForCacheServerToStart(SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port)) + .isTrue(); + + System.err.printf("GemFire Server [startup time = %1$d ms]%n", System.currentTimeMillis() - t0); + } + + @AfterClass + public static void stopGemFireServer() { + if (gemfireServer != null) { + gemfireServer.destroy(); + System.err.printf("GemFire Server [exit code = %1$d]%n", + waitForProcessToStop(gemfireServer, processWorkingDirectory)); + } + + if (Boolean.valueOf(System.getProperty("spring.session.data.gemfire.fork.clean", Boolean.TRUE.toString()))) { + FileSystemUtils.deleteRecursively(processWorkingDirectory); + } + + assertThat(waitForClientCacheToClose(DEFAULT_WAIT_DURATION)).isTrue(); + } + + @Test + public void createReadUpdateExpireRecreateDeleteRecreateSessionResultsCorrectSessionCreatedEvents() { + ExpiringSession session = save(touch(createSession())); + + assertValidSession(session); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(session.getId()); + + // GET + ExpiringSession loadedSession = get(session.getId()); + + assertThat(loadedSession).isNotNull(); + assertThat(loadedSession.getId()).isEqualTo(session.getId()); + assertThat(loadedSession.getCreationTime()).isEqualTo(session.getCreationTime()); + assertThat(loadedSession.getLastAccessedTime()).isGreaterThanOrEqualTo((session.getLastAccessedTime())); + + sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isNull(); + + loadedSession.setAttribute("attrOne", 1); + loadedSession.setAttribute("attrTwo", 2); + + // UPDATE + save(touch(loadedSession)); + + sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isNull(); + + // EXPIRE + sessionEvent = this.sessionEventListener.waitForSessionEvent( + TimeUnit.SECONDS.toMillis(MAX_INACTIVE_INTERVAL_IN_SECONDS + 1)); + + assertThat(sessionEvent).isInstanceOf(SessionExpiredEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(session.getId()); + + // RECREATE + save(touch(session)); + + sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(session.getId()); + + // DELETE + delete(session); + + sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionDeletedEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(session.getId()); + + // RECREATE + save(touch(session)); + + sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(session.getId()); + } + + @EnableGemFireHttpSession + static class SpringSessionDataGemFireClientConfiguration { + + @Bean + static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + return gemfireProperties; + } + + @Bean + ClientCacheFactoryBean gemfireCache() { + ClientCacheFactoryBean clientCacheFactory = new ClientCacheFactoryBean(); + + clientCacheFactory.setClose(true); + clientCacheFactory.setProperties(gemfireProperties()); + + return clientCacheFactory; + } + + @Bean + PoolFactoryBean gemfirePool(@Value("${spring.session.data.gemfire.port:" + + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + PoolFactoryBean poolFactory = new PoolFactoryBean(); + + poolFactory.setKeepAlive(false); + poolFactory.setPingInterval(TimeUnit.SECONDS.toMillis(5)); + poolFactory.setReadTimeout(2000); // 2 seconds + poolFactory.setRetryAttempts(1); + poolFactory.setSubscriptionEnabled(true); + + poolFactory.setServers(Collections.singletonList(new ConnectionEndpoint( + SpringSessionDataGemFireServerConfiguration.SERVER_HOSTNAME, port))); + + return poolFactory; + } + + @Bean + public SessionEventListener sessionEventListener() { + return new SessionEventListener(); + } + + // used for debugging purposes + @SuppressWarnings("resource") + public static void main(String[] args) { + ConfigurableApplicationContext applicationContext = + new AnnotationConfigApplicationContext(SpringSessionDataGemFireClientConfiguration.class); + + applicationContext.registerShutdownHook(); + + ClientCache clientCache = applicationContext.getBean(ClientCache.class); + + for (InetSocketAddress server : clientCache.getCurrentServers()) { + System.err.printf("GemFire Server [host: %1$s, port: %2$d]%n", + server.getHostName(), server.getPort()); + } + } + } + + @EnableGemFireHttpSession(maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS) + static class SpringSessionDataGemFireServerConfiguration { + + static final String SERVER_HOSTNAME = "localhost"; + + @Bean + static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", name()); + gemfireProperties.setProperty("mcast-port", "0"); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + + return gemfireProperties; + } + + String name() { + return ClientServerProxyRegionSessionOperationsIntegrationTests.class.getName(); + } + + @Bean + CacheFactoryBean gemfireCache() { + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + CacheServerFactoryBean gemfireCacheServer(Cache gemfireCache, + @Value("${spring.session.data.gemfire.port:" + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + CacheServerFactoryBean cacheServerFactory = new CacheServerFactoryBean(); + + cacheServerFactory.setCache(gemfireCache); + cacheServerFactory.setAutoStartup(true); + cacheServerFactory.setBindAddress(SERVER_HOSTNAME); + cacheServerFactory.setPort(port); + + return cacheServerFactory; + } + + @SuppressWarnings("resource") + public static void main(String[] args) throws IOException { + AnnotationConfigApplicationContext context = + new AnnotationConfigApplicationContext(SpringSessionDataGemFireServerConfiguration.class); + + context.registerShutdownHook(); + + writeProcessControlFile(WORKING_DIRECTORY); + } + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java new file mode 100644 index 0000000..32dec37 --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java @@ -0,0 +1,459 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.UUID; + +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.query.Query; +import org.apache.geode.cache.query.QueryService; +import org.apache.geode.cache.query.SelectResults; +import org.apache.geode.pdx.PdxReader; +import org.apache.geode.pdx.PdxSerializable; +import org.apache.geode.pdx.PdxWriter; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.context.annotation.Bean; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.session.ExpiringSession; +import org.springframework.session.FindByIndexNameSessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration test to test the {@code findByPrincipalName} query method + * on {@link GemFireOperationsSessionRepository}. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests + * @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository + * @see org.springframework.test.annotation.DirtiesContext + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner + * @see org.springframework.test.context.web.WebAppConfiguration + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.Region + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +@WebAppConfiguration +public class GemFireOperationsSessionRepositoryIntegrationTests extends AbstractGemFireIntegrationTests { + + private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 300; + + private static final String GEMFIRE_LOG_LEVEL = "warning"; + private static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT"; + private static final String SPRING_SESSION_GEMFIRE_REGION_NAME = "TestPartitionedSessions"; + + SecurityContext context; + + SecurityContext changedContext; + + @Before + public void setup() { + this.context = SecurityContextHolder.createEmptyContext(); + this.context.setAuthentication( + new UsernamePasswordAuthenticationToken("username-" + UUID.randomUUID(), + "na", AuthorityUtils.createAuthorityList("ROLE_USER"))); + + this.changedContext = SecurityContextHolder.createEmptyContext(); + this.changedContext.setAuthentication(new UsernamePasswordAuthenticationToken( + "changedContext-" + UUID.randomUUID(), "na", + AuthorityUtils.createAuthorityList("ROLE_USER"))); + + assertThat(this.gemfireCache).isNotNull(); + assertThat(this.gemfireSessionRepository).isNotNull(); + assertThat(this.gemfireSessionRepository.getMaxInactiveIntervalInSeconds()) + .isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + + Region sessionRegion = this.gemfireCache.getRegion(SPRING_SESSION_GEMFIRE_REGION_NAME); + + assertRegion(sessionRegion, SPRING_SESSION_GEMFIRE_REGION_NAME, DataPolicy.PARTITION); + assertEntryIdleTimeout(sessionRegion, ExpirationAction.INVALIDATE, MAX_INACTIVE_INTERVAL_IN_SECONDS); + } + + protected Map doFindByIndexNameAndIndexValue( + String indexName, String indexValue) { + + return this.gemfireSessionRepository.findByIndexNameAndIndexValue(indexName, + indexValue); + } + + protected Map doFindByPrincipalName(String principalName) { + return doFindByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, + principalName); + } + + @SuppressWarnings({ "unchecked" }) + protected Map doFindByPrincipalName(String regionName, + String principalName) { + try { + Region region = this.gemfireCache.getRegion(regionName); + + assertThat(region).isNotNull(); + + QueryService queryService = region.getRegionService().getQueryService(); + + String queryString = String.format(GemFireOperationsSessionRepository.FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY, + region.getFullPath()); + + Query query = queryService.newQuery(queryString); + + SelectResults results = + (SelectResults) query.execute(new Object[] { principalName }); + + Map sessions = new HashMap(results.size()); + + for (ExpiringSession session : results.asList()) { + sessions.put(session.getId(), session); + } + + return sessions; + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + protected boolean enableQueryDebugging() { + return true; + } + + protected ExpiringSession setAttribute(ExpiringSession session, String attributeName, + Object attributeValue) { + + session.setAttribute(attributeName, attributeValue); + + return session; + } + + @Test + public void findSessionsByIndexedSessionAttributeNameValues() { + ExpiringSession johnBlumSession = save(touch(setAttribute( + createSession("johnBlum"), "vip", "yes"))); + ExpiringSession robWinchSession = save(touch(setAttribute( + createSession("robWinch"), "vip", "yes"))); + ExpiringSession jonDoeSession = save(touch(setAttribute( + createSession("jonDoe"), "vip", "no"))); + ExpiringSession pieDoeSession = save(touch(setAttribute( + createSession("pieDoe"), "viper", "true"))); + ExpiringSession sourDoeSession = save(touch(createSession("sourDoe"))); + + assertThat(this.get(johnBlumSession.getId())).isEqualTo(johnBlumSession); + assertThat(johnBlumSession.getAttribute("vip")).isEqualTo("yes"); + assertThat(this.get(robWinchSession.getId())).isEqualTo(robWinchSession); + assertThat(robWinchSession.getAttribute("vip")).isEqualTo("yes"); + assertThat(this.get(jonDoeSession.getId())).isEqualTo(jonDoeSession); + assertThat(jonDoeSession.getAttribute("vip")).isEqualTo("no"); + assertThat(this.get(pieDoeSession.getId())).isEqualTo(pieDoeSession); + assertThat(pieDoeSession.getAttributeNames().contains("vip")).isFalse(); + assertThat(this.get(sourDoeSession.getId())).isEqualTo(sourDoeSession); + assertThat(sourDoeSession.getAttributeNames().contains("vip")).isFalse(); + + Map vipSessions = doFindByIndexNameAndIndexValue("vip", "yes"); + + assertThat(vipSessions).isNotNull(); + assertThat(vipSessions.size()).isEqualTo(2); + assertThat(vipSessions.get(johnBlumSession.getId())).isEqualTo(johnBlumSession); + assertThat(vipSessions.get(robWinchSession.getId())).isEqualTo(robWinchSession); + assertThat(vipSessions.containsKey(jonDoeSession.getId())); + assertThat(vipSessions.containsKey(pieDoeSession.getId())); + assertThat(vipSessions.containsKey(sourDoeSession.getId())); + + Map nonVipSessions = doFindByIndexNameAndIndexValue( + "vip", "no"); + + assertThat(nonVipSessions).isNotNull(); + assertThat(nonVipSessions.size()).isEqualTo(1); + assertThat(nonVipSessions.get(jonDoeSession.getId())).isEqualTo(jonDoeSession); + assertThat(nonVipSessions.containsKey(johnBlumSession.getId())); + assertThat(nonVipSessions.containsKey(robWinchSession.getId())); + assertThat(nonVipSessions.containsKey(pieDoeSession.getId())); + assertThat(nonVipSessions.containsKey(sourDoeSession.getId())); + + Map noSessions = doFindByIndexNameAndIndexValue( + "nonExistingAttribute", "test"); + + assertThat(noSessions).isNotNull(); + assertThat(noSessions.isEmpty()).isTrue(); + } + + @Test + public void findSessionsByPrincipalName() { + ExpiringSession sessionOne = save(touch(createSession("robWinch"))); + ExpiringSession sessionTwo = save(touch(createSession("johnBlum"))); + ExpiringSession sessionThree = save(touch(createSession("robWinch"))); + ExpiringSession sessionFour = save(touch(createSession("johnBlum"))); + ExpiringSession sessionFive = save(touch(createSession("robWinch"))); + + assertThat(this.get(sessionOne.getId())).isEqualTo(sessionOne); + assertThat(this.get(sessionTwo.getId())).isEqualTo(sessionTwo); + assertThat(this.get(sessionThree.getId())).isEqualTo(sessionThree); + assertThat(this.get(sessionFour.getId())).isEqualTo(sessionFour); + assertThat(this.get(sessionFive.getId())).isEqualTo(sessionFive); + + Map johnBlumSessions = doFindByPrincipalName("johnBlum"); + + assertThat(johnBlumSessions).isNotNull(); + assertThat(johnBlumSessions.size()).isEqualTo(2); + assertThat(johnBlumSessions.containsKey(sessionOne.getId())).isFalse(); + assertThat(johnBlumSessions.containsKey(sessionThree.getId())).isFalse(); + assertThat(johnBlumSessions.containsKey(sessionFive.getId())).isFalse(); + assertThat(johnBlumSessions.get(sessionTwo.getId())).isEqualTo(sessionTwo); + assertThat(johnBlumSessions.get(sessionFour.getId())).isEqualTo(sessionFour); + + Map robWinchSessions = doFindByPrincipalName("robWinch"); + + assertThat(robWinchSessions).isNotNull(); + assertThat(robWinchSessions.size()).isEqualTo(3); + assertThat(robWinchSessions.containsKey(sessionTwo.getId())).isFalse(); + assertThat(robWinchSessions.containsKey(sessionFour.getId())).isFalse(); + assertThat(robWinchSessions.get(sessionOne.getId())).isEqualTo(sessionOne); + assertThat(robWinchSessions.get(sessionThree.getId())).isEqualTo(sessionThree); + assertThat(robWinchSessions.get(sessionFive.getId())).isEqualTo(sessionFive); + } + + @Test + public void findSessionsBySecurityPrincipalName() { + ExpiringSession toSave = this.gemfireSessionRepository.createSession(); + + toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); + + save(toSave); + + Map findByPrincipalName = doFindByPrincipalName(getSecurityName()); + + assertThat(findByPrincipalName).hasSize(1); + assertThat(findByPrincipalName.keySet()).containsOnly(toSave.getId()); + } + + @Test + public void findSessionsByChangedSecurityPrincipalName() { + ExpiringSession toSave = this.gemfireSessionRepository.createSession(); + + toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.context); + + save(toSave); + + toSave.setAttribute(SPRING_SECURITY_CONTEXT, this.changedContext); + + save(toSave); + + Map findByPrincipalName = doFindByPrincipalName(getSecurityName()); + + assertThat(findByPrincipalName).isEmpty(); + + findByPrincipalName = doFindByPrincipalName(getChangedSecurityName()); + + assertThat(findByPrincipalName).hasSize(1); + } + + @Test + public void findsNoSessionsByNonExistingPrincipal() { + Map nonExistingPrincipalSessions = + doFindByPrincipalName("nonExistingPrincipalName"); + + assertThat(nonExistingPrincipalSessions).isNotNull(); + assertThat(nonExistingPrincipalSessions.isEmpty()).isTrue(); + } + + @Test + public void findsNoSessionsAfterPrincipalIsRemoved() { + String username = "doesNotFindAfterPrincipalRemoved"; + ExpiringSession session = save(touch(createSession(username))); + + session.setAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, null); + + save(session); + + Map nonExistingPrincipalSessions = doFindByPrincipalName(username); + + assertThat(nonExistingPrincipalSessions).isNotNull(); + assertThat(nonExistingPrincipalSessions.isEmpty()).isTrue(); + } + + @Test + public void saveAndReadSessionWithAttributes() { + ExpiringSession expectedSession = this.gemfireSessionRepository.createSession(); + + assertThat(expectedSession).isInstanceOf(AbstractGemFireOperationsSessionRepository.GemFireSession.class); + + ((AbstractGemFireOperationsSessionRepository.GemFireSession) expectedSession).setPrincipalName("jblum"); + + List expectedAttributeNames = Arrays.asList("booleanAttribute", "numericAttribute", "stringAttribute", + "personAttribute"); + + Person jonDoe = new Person("Jon", "Doe"); + + expectedSession.setAttribute(expectedAttributeNames.get(0), true); + expectedSession.setAttribute(expectedAttributeNames.get(1), Math.PI); + expectedSession.setAttribute(expectedAttributeNames.get(2), "test"); + expectedSession.setAttribute(expectedAttributeNames.get(3), jonDoe); + + this.gemfireSessionRepository.save(touch(expectedSession)); + + ExpiringSession savedSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(savedSession).isEqualTo(expectedSession); + assertThat(savedSession).isInstanceOf(AbstractGemFireOperationsSessionRepository.GemFireSession.class); + assertThat(((AbstractGemFireOperationsSessionRepository.GemFireSession) savedSession).getPrincipalName()) + .isEqualTo("jblum"); + + assertThat(savedSession.getAttributeNames().containsAll(expectedAttributeNames)) + .as(String.format("Expected (%1$s); but was (%2$s)", expectedAttributeNames, savedSession.getAttributeNames())) + .isTrue(); + + assertThat(savedSession.getAttribute(expectedAttributeNames.get(0))).isTrue(); + assertThat(savedSession.getAttribute(expectedAttributeNames.get(1))).isEqualTo(Math.PI); + assertThat(savedSession.getAttribute(expectedAttributeNames.get(2))).isEqualTo("test"); + assertThat(savedSession.getAttribute(expectedAttributeNames.get(3))).isEqualTo(jonDoe); + } + + private String getSecurityName() { + return this.context.getAuthentication().getName(); + } + + private String getChangedSecurityName() { + return this.changedContext.getAuthentication().getName(); + } + + @EnableGemFireHttpSession(regionName = SPRING_SESSION_GEMFIRE_REGION_NAME, maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS) + static class SpringSessionGemFireConfiguration { + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", GemFireOperationsSessionRepositoryIntegrationTests.class.getName()); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + + return gemfireProperties; + } + + @Bean + CacheFactoryBean gemfireCache() { + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + } + + public static class Person implements Comparable, PdxSerializable { + + private String firstName; + private String lastName; + + public Person() { + } + + public Person(String firstName, String lastName) { + this.firstName = validate(firstName); + this.lastName = validate(lastName); + } + + private String validate(String value) { + Assert.hasText(value, String.format("The String value (%1$s) must be specified!", value)); + return value; + } + + public String getFirstName() { + return this.firstName; + } + + public String getLastName() { + return this.lastName; + } + + public String getName() { + return String.format("%1$s %2$s", getFirstName(), getLastName()); + } + + public void toData(PdxWriter pdxWriter) { + pdxWriter.writeString("firstName", getFirstName()); + pdxWriter.writeString("lastName", getLastName()); + } + + public void fromData(final PdxReader pdxReader) { + this.firstName = pdxReader.readString("firstName"); + this.lastName = pdxReader.readString("lastName"); + } + + @SuppressWarnings("all") + public int compareTo(final Person person) { + int compareValue = getLastName().compareTo(person.getLastName()); + return (compareValue != 0 ? compareValue + : getFirstName().compareTo(person.getFirstName())); + } + + @Override + public boolean equals(final Object obj) { + if (obj == this) { + return true; + } + + if (!(obj instanceof Person)) { + return false; + } + + Person that = (Person) obj; + + return ObjectUtils.nullSafeEquals(this.getFirstName(), that.getFirstName()) + && ObjectUtils.nullSafeEquals(this.getLastName(), that.getLastName()); + } + + @Override + public int hashCode() { + int hashValue = 17; + hashValue = 37 * hashValue + ObjectUtils.nullSafeHashCode(getFirstName()); + hashValue = 37 * hashValue + ObjectUtils.nullSafeHashCode(getLastName()); + return hashValue; + } + + @Override + public String toString() { + return getName(); + } + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.java new file mode 100644 index 0000000..91204e6 --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.java @@ -0,0 +1,344 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; +import org.apache.geode.cache.client.ClientCache; + +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; +import org.springframework.data.gemfire.client.PoolFactoryBean; +import org.springframework.data.gemfire.server.CacheServerFactoryBean; +import org.springframework.data.gemfire.support.ConnectionEndpoint; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.session.events.AbstractSessionEvent; +import org.springframework.session.events.SessionCreatedEvent; +import org.springframework.session.events.SessionExpiredEvent; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.util.FileSystemUtils; +import org.springframework.util.SocketUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration test to test the functionality of a GemFire cache client in a Spring Session application + * using a specifically named GemFire {@link org.apache.geode.cache.client.Pool} configured with + * the 'poolName' attribute in the Spring Session Data GemFire {@link EnableGemFireHttpSession} annotation. + * + * @author John Blum + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests + * @see org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @see org.springframework.test.annotation.DirtiesContext + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner + * @see org.springframework.test.context.web.WebAppConfiguration + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.client.ClientCache + * @see org.apache.geode.cache.client.Pool + * @see org.apache.geode.cache.server.CacheServer + * @since 1.3.0 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests + .SpringSessionGemFireClientConfiguration.class) +@DirtiesContext +@WebAppConfiguration +public class MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests + extends AbstractGemFireIntegrationTests { + + private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1; + + private static final DateFormat TIMESTAMP = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + + private static File processWorkingDirectory; + + private static Process gemfireServer; + + private static final String SPRING_SESSION_GEMFIRE_REGION_NAME = "TestMultiPoolClientServerSessions"; + + @Autowired + private SessionEventListener sessionEventListener; + + @BeforeClass + public static void startGemFireServer() throws IOException { + final long t0 = System.currentTimeMillis(); + + final int port = SocketUtils.findAvailableTcpPort(); + + System.err.printf("Starting a GemFire Server on [%1$s] listening on port [%2$d]%n", + SpringSessionGemFireServerConfiguration.SERVER_HOSTNAME, port); + + System.setProperty("spring.session.data.gemfire.port", String.valueOf(port)); + + String processWorkingDirectoryPathname = String.format("gemfire-multipool-client-server-tests-%1$s", + TIMESTAMP.format(new Date())); + + processWorkingDirectory = createDirectory(processWorkingDirectoryPathname); + + gemfireServer = run(SpringSessionGemFireServerConfiguration.class, processWorkingDirectory, + String.format("-Dspring.session.data.gemfire.port=%1$d", port)); + + assertThat(waitForCacheServerToStart(SpringSessionGemFireServerConfiguration.SERVER_HOSTNAME, port)).isTrue(); + + System.err.printf("GemFire Server [startup time = %1$d ms]%n", System.currentTimeMillis() - t0); + } + + @AfterClass + public static void stopGemFireServerAndDeleteArtifacts() { + if (gemfireServer != null) { + gemfireServer.destroyForcibly(); + System.err.printf("GemFire Server [exit code = %1$d]%n", + waitForProcessToStop(gemfireServer, processWorkingDirectory)); + } + + if (Boolean.valueOf(System.getProperty("spring.session.data.gemfire.fork.clean", Boolean.TRUE.toString()))) { + FileSystemUtils.deleteRecursively(processWorkingDirectory); + } + + assertThat(waitForClientCacheToClose(DEFAULT_WAIT_DURATION)).isTrue(); + } + + @Before + public void setup() { + assertThat(GemFireUtils.isClient(gemfireCache)).isTrue(); + + Region springSessionGemFireRegion = + gemfireCache.getRegion(SPRING_SESSION_GEMFIRE_REGION_NAME); + + assertThat(springSessionGemFireRegion).isNotNull(); + + RegionAttributes springSessionGemFireRegionAttributes = + springSessionGemFireRegion.getAttributes(); + + assertThat(springSessionGemFireRegionAttributes).isNotNull(); + assertThat(springSessionGemFireRegionAttributes.getDataPolicy()).isEqualTo(DataPolicy.EMPTY); + } + + protected static ConnectionEndpoint newConnectionEndpoint(String host, int port) { + return new ConnectionEndpoint(host, port); + } + + @Test + public void getExistingNonExpiredSessionBeforeAndAfterExpiration() { + ExpiringSession expectedSession = save(touch(createSession())); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.waitForSessionEvent(500); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + assertThat(sessionEvent.getSession()).isEqualTo(expectedSession); + assertThat(this.sessionEventListener.getSessionEvent()).isNull(); + + ExpiringSession savedSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(savedSession).isEqualTo(expectedSession); + + this.sessionEventListener.getSessionEvent(); + + sessionEvent = this.sessionEventListener.waitForSessionEvent( + TimeUnit.SECONDS.toMillis(MAX_INACTIVE_INTERVAL_IN_SECONDS + 1)); + + assertThat(sessionEvent).isInstanceOf(SessionExpiredEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSession.getId()); + + ExpiringSession expiredSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(expiredSession).isNull(); + } + + @EnableGemFireHttpSession(regionName = SPRING_SESSION_GEMFIRE_REGION_NAME, poolName = "serverPool", + maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS) + static class SpringSessionGemFireClientConfiguration { + + @Bean + PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + @Bean + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + gemfireProperties.setProperty("name", name()); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + return gemfireProperties; + } + + String name() { + return SpringSessionGemFireClientConfiguration.class.getName(); + } + + @Bean + ClientCacheFactoryBean gemfireCache() { + ClientCacheFactoryBean gemfireCache = new ClientCacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setPoolName("gemfirePool"); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + PoolFactoryBean gemfirePool() { + PoolFactoryBean poolFactory = new PoolFactoryBean(); + + poolFactory.setFreeConnectionTimeout(5000); // 5 seconds + poolFactory.setKeepAlive(false); + poolFactory.setMinConnections(0); + poolFactory.setReadTimeout(500); + + // deliberately set to a non-existing GemFire (Cache) Server + poolFactory.addServers(newConnectionEndpoint("localhost", 53135)); + + return poolFactory; + } + + @Bean + PoolFactoryBean serverPool(@Value("${spring.session.data.gemfire.port:" + + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + PoolFactoryBean poolFactory = new PoolFactoryBean(); + + poolFactory.setFreeConnectionTimeout(5000); // 5 seconds + poolFactory.setKeepAlive(false); + poolFactory.setMaxConnections(SpringSessionGemFireServerConfiguration.MAX_CONNECTIONS); + poolFactory.setPingInterval(TimeUnit.SECONDS.toMillis(5)); + poolFactory.setReadTimeout(2000); // 2 seconds + poolFactory.setRetryAttempts(1); + poolFactory.setSubscriptionEnabled(true); + poolFactory.setThreadLocalConnections(false); + + poolFactory.addServers(newConnectionEndpoint( + SpringSessionGemFireServerConfiguration.SERVER_HOSTNAME, port)); + + return poolFactory; + } + + @Bean + public AbstractGemFireIntegrationTests.SessionEventListener sessionEventListener() { + return new AbstractGemFireIntegrationTests.SessionEventListener(); + } + + // used for debugging purposes + @SuppressWarnings("resource") + public static void main(final String[] args) { + ConfigurableApplicationContext applicationContext = new AnnotationConfigApplicationContext( + SpringSessionGemFireClientConfiguration.class); + + applicationContext.registerShutdownHook(); + + ClientCache clientCache = applicationContext.getBean(ClientCache.class); + + for (InetSocketAddress server : clientCache.getCurrentServers()) { + System.err.printf("GemFire Server [host: %1$s, port: %2$d]%n", + server.getHostName(), server.getPort()); + } + } + } + + @EnableGemFireHttpSession(regionName = SPRING_SESSION_GEMFIRE_REGION_NAME, maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS) + static class SpringSessionGemFireServerConfiguration { + + static final int MAX_CONNECTIONS = 50; + static final String SERVER_HOSTNAME = "localhost"; + + @Bean + PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + @Bean + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", name()); + gemfireProperties.setProperty("mcast-port", "0"); + gemfireProperties.setProperty("log-file", "server.log"); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + + return gemfireProperties; + } + + String name() { + return SpringSessionGemFireServerConfiguration.class.getName(); + } + + @Bean + CacheFactoryBean gemfireCache() { + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + CacheServerFactoryBean gemfireCacheServer(Cache gemfireCache, + @Value("${spring.session.data.gemfire.port:" + DEFAULT_GEMFIRE_SERVER_PORT + "}") int port) { + + CacheServerFactoryBean cacheServerFactory = new CacheServerFactoryBean(); + + cacheServerFactory.setAutoStartup(true); + cacheServerFactory.setBindAddress(SERVER_HOSTNAME); + cacheServerFactory.setCache(gemfireCache); + cacheServerFactory.setMaxConnections(MAX_CONNECTIONS); + cacheServerFactory.setPort(port); + + return cacheServerFactory; + } + + @SuppressWarnings("resource") + public static void main(final String[] args) throws IOException { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( + SpringSessionGemFireServerConfiguration.class); + context.registerShutdownHook(); + writeProcessControlFile(WORKING_DIRECTORY); + } + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java new file mode 100644 index 0000000..ecc6788 --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java @@ -0,0 +1,254 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http; + +import java.util.Properties; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionShortcut; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.session.events.AbstractSessionEvent; +import org.springframework.session.events.SessionCreatedEvent; +import org.springframework.session.events.SessionDeletedEvent; +import org.springframework.session.events.SessionExpiredEvent; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * The EnableGemFireHttpSessionEventsIntegrationTests class is a test suite of test cases + * testing the Session Event functionality and behavior of the + * GemFireOperationsSessionRepository and GemFire's configuration. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests + * @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository + * @see org.springframework.session.events.SessionCreatedEvent + * @see org.springframework.session.events.SessionDeletedEvent + * @see org.springframework.session.events.SessionExpiredEvent + * @see org.springframework.test.annotation.DirtiesContext + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner + * @see org.springframework.test.context.web.WebAppConfiguration + * @see org.apache.geode.cache.Region + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +@WebAppConfiguration +public class EnableGemFireHttpSessionEventsIntegrationTests extends AbstractGemFireIntegrationTests { + + private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1; + + private static final String GEMFIRE_LOG_LEVEL = "warning"; + private static final String SPRING_SESSION_GEMFIRE_REGION_NAME = "TestReplicatedSessions"; + + @Autowired + private SessionEventListener sessionEventListener; + + @Before + public void setup() { + assertThat(GemFireUtils.isPeer(this.gemfireCache)).isTrue(); + assertThat(this.gemfireSessionRepository).isNotNull(); + assertThat(this.gemfireSessionRepository.getMaxInactiveIntervalInSeconds()) + .isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + assertThat(this.sessionEventListener).isNotNull(); + + Region sessionRegion = this.gemfireCache.getRegion(SPRING_SESSION_GEMFIRE_REGION_NAME); + + assertRegion(sessionRegion, SPRING_SESSION_GEMFIRE_REGION_NAME, DataPolicy.REPLICATE); + assertEntryIdleTimeout(sessionRegion, ExpirationAction.INVALIDATE, MAX_INACTIVE_INTERVAL_IN_SECONDS); + } + + @After + public void tearDown() { + this.sessionEventListener.getSessionEvent(); + } + + @Test + public void sessionCreatedEvent() { + final long beforeOrAtCreationTime = System.currentTimeMillis(); + + ExpiringSession expectedSession = save(createSession()); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.getSessionEvent(); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + + ExpiringSession createdSession = sessionEvent.getSession(); + + assertThat(createdSession).isEqualTo(expectedSession); + assertThat(createdSession.getId()).isNotNull(); + assertThat(createdSession.getCreationTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(createdSession.getLastAccessedTime()).isEqualTo(createdSession.getCreationTime()); + assertThat(createdSession.getMaxInactiveIntervalInSeconds()).isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + assertThat(createdSession.isExpired()).isFalse(); + } + + @Test + public void getExistingNonExpiredSession() { + ExpiringSession expectedSession = save(touch(createSession())); + + assertThat(expectedSession.isExpired()).isFalse(); + + // NOTE though unlikely, a possible race condition exists between save and get... + ExpiringSession savedSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(savedSession).isEqualTo(expectedSession); + } + + @Test + public void getExistingExpiredSession() { + ExpiringSession expectedSession = save(expire(createSession())); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.getSessionEvent(); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + + ExpiringSession createdSession = sessionEvent.getSession(); + + assertThat(createdSession).isEqualTo(expectedSession); + assertThat(createdSession.isExpired()).isTrue(); + assertThat(this.gemfireSessionRepository.getSession(createdSession.getId())).isNull(); + } + + @Test + public void getNonExistingSession() { + assertThat(this.gemfireSessionRepository.getSession(UUID.randomUUID().toString())).isNull(); + } + + @Test + public void deleteExistingNonExpiredSession() { + ExpiringSession expectedSession = save(touch(createSession())); + ExpiringSession savedSession = this.gemfireSessionRepository.getSession(expectedSession.getId()); + + assertThat(savedSession).isEqualTo(expectedSession); + assertThat(savedSession.isExpired()).isFalse(); + + this.gemfireSessionRepository.delete(savedSession.getId()); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.getSessionEvent(); + + assertThat(sessionEvent).isInstanceOf(SessionDeletedEvent.class); + assertThat(sessionEvent.getSessionId()).isEqualTo(savedSession.getId()); + + ExpiringSession deletedSession = sessionEvent.getSession(); + + assertThat(deletedSession).isEqualTo(savedSession); + assertThat(this.gemfireSessionRepository.getSession(deletedSession.getId())).isNull(); + } + + @Test + public void deleteExistingExpiredSession() { + ExpiringSession expectedSession = save(createSession()); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.getSessionEvent(); + + assertThat(sessionEvent).isInstanceOf(SessionCreatedEvent.class); + + ExpiringSession createdSession = sessionEvent.getSession(); + + assertThat(createdSession).isEqualTo(expectedSession); + + sessionEvent = this.sessionEventListener.waitForSessionEvent( + TimeUnit.SECONDS.toMillis(this.gemfireSessionRepository.getMaxInactiveIntervalInSeconds() + 1)); + + assertThat(sessionEvent).isInstanceOf(SessionExpiredEvent.class); + + ExpiringSession expiredSession = sessionEvent.getSession(); + + assertThat(expiredSession).isEqualTo(createdSession); + assertThat(expiredSession.isExpired()).isTrue(); + + this.gemfireSessionRepository.delete(expectedSession.getId()); + + sessionEvent = this.sessionEventListener.getSessionEvent(); + + assertThat(sessionEvent).isInstanceOf(SessionDeletedEvent.class); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(expiredSession.getId()); + assertThat(this.gemfireSessionRepository.getSession(sessionEvent.getSessionId())).isNull(); + } + + @Test + public void deleteNonExistingSession() { + String expectedSessionId = UUID.randomUUID().toString(); + + assertThat(this.gemfireSessionRepository.getSession(expectedSessionId)).isNull(); + + this.gemfireSessionRepository.delete(expectedSessionId); + + AbstractSessionEvent sessionEvent = this.sessionEventListener.getSessionEvent(); + + assertThat(sessionEvent).isInstanceOf(SessionDeletedEvent.class); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSessionId); + } + + @EnableGemFireHttpSession(regionName = SPRING_SESSION_GEMFIRE_REGION_NAME, maxInactiveIntervalInSeconds = MAX_INACTIVE_INTERVAL_IN_SECONDS, serverRegionShortcut = RegionShortcut.REPLICATE) + static class SpringSessionGemFireConfiguration { + + @Bean + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty("name", + EnableGemFireHttpSessionEventsIntegrationTests.class.getName()); + gemfireProperties.setProperty("mcast-port", "0"); + gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); + + return gemfireProperties; + } + + @Bean + CacheFactoryBean gemfireCache() { + CacheFactoryBean gemfireCache = new CacheFactoryBean(); + + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); + + return gemfireCache; + } + + @Bean + SessionEventListener sessionEventListener() { + return new SessionEventListener(); + } + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java new file mode 100644 index 0000000..41d3025 --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java @@ -0,0 +1,148 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http; + +import java.util.Properties; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.query.Index; +import org.apache.geode.cache.query.QueryService; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.data.gemfire.CacheFactoryBean; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration test to test the configuration of Spring Session backed by GemFire + * using Java-based configuration meta-data. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests + * @see org.springframework.test.annotation.DirtiesContext + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner + * @see org.springframework.test.context.web.WebAppConfiguration + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.Region + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +@WebAppConfiguration +public class GemFireHttpSessionJavaConfigurationTests extends AbstractGemFireIntegrationTests { + + @Autowired + private Cache gemfireCache; + + protected Region assertCacheAndRegion(Cache gemfireCache, + String regionName, DataPolicy dataPolicy) { + + assertThat(GemFireUtils.isPeer(gemfireCache)).isTrue(); + + Region region = gemfireCache.getRegion(regionName); + + assertRegion(region, regionName, dataPolicy); + + return region; + } + + @Test + public void gemfireCacheConfigurationIsValid() { + Region example = + assertCacheAndRegion(this.gemfireCache, "JavaExample", DataPolicy.REPLICATE); + + assertEntryIdleTimeout(example, ExpirationAction.INVALIDATE, 900); + } + + @Test + public void verifyGemFireExampleCacheRegionPrincipalNameIndexWasCreatedSuccessfully() { + Region example = + assertCacheAndRegion(this.gemfireCache, "JavaExample", DataPolicy.REPLICATE); + + QueryService queryService = example.getRegionService().getQueryService(); + + assertThat(queryService).isNotNull(); + + Index principalNameIndex = queryService.getIndex(example, "principalNameIndex"); + + assertIndex(principalNameIndex, "principalName", example.getFullPath()); + } + + @Test + public void verifyGemFireExampleCacheRegionSessionAttributesIndexWasNotCreated() { + Region example = + assertCacheAndRegion(this.gemfireCache, "JavaExample", DataPolicy.REPLICATE); + + QueryService queryService = example.getRegionService().getQueryService(); + + assertThat(queryService).isNotNull(); + + Index sessionAttributesIndex = queryService.getIndex(example, "sessionAttributesIndex"); + + assertThat(sessionAttributesIndex).isNull(); + } + + @EnableGemFireHttpSession(indexableSessionAttributes = {}, maxInactiveIntervalInSeconds = 900, + regionName = "JavaExample", serverRegionShortcut = RegionShortcut.REPLICATE) + public static class GemFireConfiguration { + + Properties gemfireProperties() { + Properties gemfireProperties = new Properties(); + gemfireProperties.setProperty("name", applicationName()); + gemfireProperties.setProperty("mcast-port", "0"); + gemfireProperties.setProperty("log-level", logLevel()); + return gemfireProperties; + } + + String applicationName() { + return GemFireHttpSessionJavaConfigurationTests.class.getName(); + } + + String logLevel() { + return "warning"; + } + + @Bean + CacheFactoryBean gemfireCache() { + CacheFactoryBean cacheFactory = new CacheFactoryBean(); + + cacheFactory.setClose(true); + cacheFactory.setProperties(gemfireProperties()); + + return cacheFactory; + } + } +} diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.java new file mode 100644 index 0000000..80f2e78 --- /dev/null +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.java @@ -0,0 +1,113 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.query.Index; +import org.apache.geode.cache.query.QueryService; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test suite of test cases testing the configuration of Spring Session backed by GemFire + * using XML configuration meta-data. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests + * @see org.springframework.test.annotation.DirtiesContext + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner + * @see org.springframework.test.context.web.WebAppConfiguration + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.Region + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@DirtiesContext +@WebAppConfiguration +public class GemFireHttpSessionXmlConfigurationTests extends AbstractGemFireIntegrationTests { + + @Autowired + private Cache gemfireCache; + + protected Region assertCacheAndRegion(Cache gemfireCache, + String regionName, DataPolicy dataPolicy) { + + assertThat(GemFireUtils.isPeer(gemfireCache)).isTrue(); + + Region region = gemfireCache.getRegion(regionName); + + assertRegion(region, regionName, dataPolicy); + + return region; + } + + @Test + public void gemfireCacheConfigurationIsValid() { + Region example = + assertCacheAndRegion(this.gemfireCache, "XmlExample", DataPolicy.NORMAL); + + assertEntryIdleTimeout(example, ExpirationAction.INVALIDATE, 3600); + } + + @Test + public void verifyGemFireExampleCacheRegionPrincipalNameIndexWasCreatedSuccessfully() { + Region example = + assertCacheAndRegion(this.gemfireCache, "XmlExample", DataPolicy.NORMAL); + + QueryService queryService = example.getRegionService().getQueryService(); + + assertThat(queryService).isNotNull(); + + Index principalNameIndex = queryService.getIndex(example, "principalNameIndex"); + + assertIndex(principalNameIndex, "principalName", example.getFullPath()); + } + + @Test + public void verifyGemFireExampleCacheRegionSessionAttributesIndexWasCreatedSuccessfully() { + Region example = + assertCacheAndRegion(this.gemfireCache, "XmlExample", DataPolicy.NORMAL); + + QueryService queryService = example.getRegionService().getQueryService(); + + assertThat(queryService).isNotNull(); + + Index sessionAttributesIndex = queryService.getIndex(example, "sessionAttributesIndex"); + + assertIndex(sessionAttributesIndex, "s.attributes['one', 'two', 'three']", + String.format("%1$s s", example.getFullPath())); + } +} diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java new file mode 100644 index 0000000..b9296fd --- /dev/null +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java @@ -0,0 +1,956 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.AbstractMap; +import java.util.AbstractSet; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.geode.DataSerializable; +import org.apache.geode.DataSerializer; +import org.apache.geode.Delta; +import org.apache.geode.Instantiator; +import org.apache.geode.InvalidDeltaException; +import org.apache.geode.cache.EntryEvent; +import org.apache.geode.cache.Operation; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.util.CacheListenerAdapter; +import org.apache.geode.internal.concurrent.ConcurrentHashSet; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.data.gemfire.GemfireAccessor; +import org.springframework.data.gemfire.GemfireOperations; +import org.springframework.expression.Expression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.session.ExpiringSession; +import org.springframework.session.FindByIndexNameSessionRepository; +import org.springframework.session.Session; +import org.springframework.session.SessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.session.events.SessionCreatedEvent; +import org.springframework.session.events.SessionDeletedEvent; +import org.springframework.session.events.SessionDestroyedEvent; +import org.springframework.session.events.SessionExpiredEvent; +import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +/** + * {@link AbstractGemFireOperationsSessionRepository} is an abstract base class encapsulating functionality + * common to all implementations that support {@link SessionRepository} operations backed by GemFire. + * + * @author John Blum + * @since 1.1.0 + * @see org.apache.geode.DataSerializable + * @see org.apache.geode.DataSerializer + * @see org.apache.geode.Delta + * @see org.apache.geode.Instantiator + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.util.CacheListenerAdapter + * @see org.springframework.beans.factory.InitializingBean + * @see org.springframework.context.ApplicationEventPublisher + * @see org.springframework.context.ApplicationEventPublisherAware + * @see org.springframework.data.gemfire.GemfireOperations + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.Session + * @see org.springframework.session.SessionRepository + * @see org.springframework.session.FindByIndexNameSessionRepository + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @see org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession + */ +public abstract class AbstractGemFireOperationsSessionRepository extends CacheListenerAdapter + implements ApplicationEventPublisherAware, FindByIndexNameSessionRepository, InitializingBean { + + private int maxInactiveIntervalInSeconds = GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS; + + private ApplicationEventPublisher applicationEventPublisher = new ApplicationEventPublisher() { + public void publishEvent(ApplicationEvent event) { + } + + public void publishEvent(Object event) { + } + }; + + private final Set cachedSessionIds = new ConcurrentHashSet(); + + private final GemfireOperations template; + + protected final Log logger = newLogger(); + + private String fullyQualifiedRegionName; + + /** + * Constructs an instance of AbstractGemFireOperationsSessionRepository with a + * required GemfireOperations instance used to perform GemFire data access operations + * and interactions supporting the SessionRepository operations. + * + * @param template the GemfireOperations instance used to interact with GemFire. + * @see org.springframework.data.gemfire.GemfireOperations + */ + public AbstractGemFireOperationsSessionRepository(GemfireOperations template) { + Assert.notNull(template, "GemfireOperations must not be null"); + this.template = template; + } + + /** + * Used for testing purposes only to override the Log implementation with a mock. + * + * @return an instance of Log constructed from Apache commons-logging LogFactory. + * @see org.apache.commons.logging.LogFactory#getLog(Class) + */ + Log newLogger() { + return LogFactory.getLog(getClass()); + } + + /** + * Sets the ApplicationEventPublisher used to publish Session events corresponding to + * GemFire cache events. + * + * @param applicationEventPublisher the Spring ApplicationEventPublisher used to + * publish Session-based events. + * @see org.springframework.context.ApplicationEventPublisher + */ + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { + Assert.notNull(applicationEventPublisher, "ApplicationEventPublisher must not be null"); + this.applicationEventPublisher = applicationEventPublisher; + } + + /** + * Gets the ApplicationEventPublisher used to publish Session events corresponding to + * GemFire cache events. + * + * @return the Spring ApplicationEventPublisher used to publish Session-based events. + * @see org.springframework.context.ApplicationEventPublisher + */ + protected ApplicationEventPublisher getApplicationEventPublisher() { + return this.applicationEventPublisher; + } + + /** + * Gets the fully-qualified name of the GemFire cache {@link Region} used to store and + * manage Session data. + * + * @return a String indicating the fully qualified name of the GemFire cache + * {@link Region} used to store and manage Session data. + */ + protected String getFullyQualifiedRegionName() { + return this.fullyQualifiedRegionName; + } + + /** + * Sets the maximum interval in seconds in which a Session can remain inactive before + * it is considered expired. + * + * @param maxInactiveIntervalInSeconds an integer value specifying the maximum + * interval in seconds that a Session can remain inactive before it is considered + * expired. + */ + public void setMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds) { + this.maxInactiveIntervalInSeconds = maxInactiveIntervalInSeconds; + } + + /** + * Gets the maximum interval in seconds in which a Session can remain inactive before + * it is considered expired. + * + * @return an integer value specifying the maximum interval in seconds that a Session + * can remain inactive before it is considered expired. + */ + public int getMaxInactiveIntervalInSeconds() { + return this.maxInactiveIntervalInSeconds; + } + + /** + * Gets a reference to the GemfireOperations (template) used to perform data access + * operations and other interactions on the GemFire cache {@link Region} backing this + * SessionRepository. + * + * @return a reference to the GemfireOperations used to interact with GemFire. + * @see org.springframework.data.gemfire.GemfireOperations + */ + public GemfireOperations getTemplate() { + return this.template; + } + + /** + * Callback method during Spring bean initialization that will capture the fully-qualified name + * of the GemFire cache {@link Region} used to manage Session state and register this SessionRepository + * as a GemFire {@link org.apache.geode.cache.CacheListener}. + * + * Additionally, this method registers GemFire {@link Instantiator}s for the {@link GemFireSession} + * and {@link GemFireSessionAttributes} types to optimize GemFire's instantiation logic on deserialization + * using the data serialization framework when accessing the {@link Session}'s state stored in GemFire. + * + * @throws Exception if an error occurs during the initialization process. + */ + public void afterPropertiesSet() throws Exception { + GemfireOperations template = getTemplate(); + + Assert.isInstanceOf(GemfireAccessor.class, template); + + Region region = ((GemfireAccessor) template).getRegion(); + + this.fullyQualifiedRegionName = region.getFullPath(); + + region.getAttributesMutator().addCacheListener(this); + + Instantiator.register(GemFireSessionInstantiator.create()); + Instantiator.register(GemFireSessionAttributesInstantiator.create()); + } + + /* (non-Javadoc) */ + boolean isCreate(EntryEvent event) { + return (isCreate(event.getOperation()) && isNotUpdate(event) && isExpiringSessionOrNull(event.getNewValue())); + } + + /* (non-Javadoc) */ + private boolean isCreate(Operation operation) { + return (operation.isCreate() && !Operation.LOCAL_LOAD_CREATE.equals(operation)); + } + + /** + * Used to determine whether the developer is storing (HTTP) Sessions with other, arbitrary application + * domain objects in the same GemFire cache {@link Region}; crazier things have happened! + * + * @param obj {@link Object} to evaluate. + * @return a boolean value indicating whether the {@link Object} from the entry event is indeed + * a {@link ExpiringSession}. + * @see org.springframework.session.ExpiringSession + */ + private boolean isExpiringSessionOrNull(Object obj) { + return (obj instanceof ExpiringSession || obj == null); + } + + /* (non-Javadoc) */ + private boolean isNotUpdate(EntryEvent event) { + return (isNotProxyRegion() || !this.cachedSessionIds.contains(ObjectUtils.nullSafeHashCode(event.getKey()))); + } + + /* (non-Javadoc) */ + private boolean isNotProxyRegion() { + return !isProxyRegion(); + } + + /* (non-Javadoc) */ + private boolean isProxyRegion() { + return GemFireUtils.isProxy(((GemfireAccessor) getTemplate()).getRegion()); + } + + boolean forget(Object sessionId) { + return this.cachedSessionIds.remove(ObjectUtils.nullSafeHashCode(sessionId)); + } + + boolean remember(Object sessionId) { + return (isProxyRegion() && this.cachedSessionIds.add(ObjectUtils.nullSafeHashCode(sessionId))); + } + + /* (non-Javadoc) */ + ExpiringSession toExpiringSession(Object obj) { + return (obj instanceof ExpiringSession ? (ExpiringSession) obj : null); + } + + /** + * Callback method triggered when an entry is created in the GemFire cache {@link Region}. + * + * @param event {@link EntryEvent} containing the details of the cache {@link Region} operation. + * @see org.apache.geode.cache.EntryEvent + * @see #handleCreated(String, ExpiringSession) + */ + @Override + public void afterCreate(EntryEvent event) { + if (isCreate(event)) { + handleCreated(event.getKey().toString(), toExpiringSession(event.getNewValue())); + } + } + + /** + * Callback method triggered when an entry is destroyed in the GemFire cache + * {@link Region}. + * + * @param event an EntryEvent containing the details of the cache operation. + * @see org.apache.geode.cache.EntryEvent + * @see #handleDestroyed(String, ExpiringSession) + */ + @Override + public void afterDestroy(EntryEvent event) { + handleDestroyed(event.getKey().toString(), toExpiringSession(event.getOldValue())); + } + + /** + * Callback method triggered when an entry is invalidated in the GemFire cache + * {@link Region}. + * + * @param event an EntryEvent containing the details of the cache operation. + * @see org.apache.geode.cache.EntryEvent + * @see #handleExpired(String, ExpiringSession) + */ + @Override + public void afterInvalidate(EntryEvent event) { + handleExpired(event.getKey().toString(), toExpiringSession(event.getOldValue())); + } + + /** + * Deletes the given {@link Session} from GemFire. + * + * @param session {@link Session} to delete. + * @return {@literal null}. + * @see org.springframework.session.Session + * @see #delete(String) + */ + protected ExpiringSession delete(Session session) { + delete(session.getId()); + return null; + } + + /** + * Causes Session created events to be published to the Spring application context. + * + * @param sessionId a String indicating the ID of the Session. + * @param session a reference to the Session triggering the event. + * @see org.springframework.session.events.SessionCreatedEvent + * @see org.springframework.session.ExpiringSession + * @see #publishEvent(ApplicationEvent) + */ + protected void handleCreated(String sessionId, ExpiringSession session) { + remember(sessionId); + + publishEvent(session != null ? new SessionCreatedEvent(this, session) + : new SessionCreatedEvent(this, sessionId)); + } + + /** + * Causes Session deleted events to be published to the Spring application context. + * + * @param sessionId a String indicating the ID of the Session. + * @param session a reference to the Session triggering the event. + * @see org.springframework.session.events.SessionDeletedEvent + * @see org.springframework.session.ExpiringSession + * @see #publishEvent(ApplicationEvent) + */ + protected void handleDeleted(String sessionId, ExpiringSession session) { + forget(sessionId); + + publishEvent(session != null ? new SessionDeletedEvent(this, session) + : new SessionDeletedEvent(this, sessionId)); + } + + /** + * Causes Session destroyed events to be published to the Spring application context. + * + * @param sessionId a String indicating the ID of the Session. + * @param session a reference to the Session triggering the event. + * @see org.springframework.session.events.SessionDestroyedEvent + * @see org.springframework.session.ExpiringSession + * @see #publishEvent(ApplicationEvent) + */ + protected void handleDestroyed(String sessionId, ExpiringSession session) { + forget(sessionId); + + publishEvent(session != null ? new SessionDestroyedEvent(this, session) + : new SessionDestroyedEvent(this, sessionId)); + } + + /** + * Causes Session expired events to be published to the Spring application context. + * + * @param sessionId a String indicating the ID of the Session. + * @param session a reference to the Session triggering the event. + * @see org.springframework.session.events.SessionExpiredEvent + * @see org.springframework.session.ExpiringSession + * @see #publishEvent(ApplicationEvent) + */ + protected void handleExpired(String sessionId, ExpiringSession session) { + forget(sessionId); + + publishEvent(session != null ? new SessionExpiredEvent(this, session) + : new SessionExpiredEvent(this, sessionId)); + } + + /** + * Publishes the specified ApplicationEvent to the Spring application context. + * + * @param event the ApplicationEvent to publish. + * @see org.springframework.context.ApplicationEventPublisher#publishEvent(ApplicationEvent) + * @see org.springframework.context.ApplicationEvent + */ + protected void publishEvent(ApplicationEvent event) { + try { + getApplicationEventPublisher().publishEvent(event); + } + catch (Throwable t) { + this.logger.error(String.format("Error occurred publishing event [%s]", event), t); + } + } + + /** + * Updates the {@link ExpiringSession#setLastAccessedTime(long)} property of the {@link ExpiringSession}. + * + * @param {@link Class} sub-type of the {@link ExpiringSession}. + * @param expiringSession {@link ExpiringSession} to touch. + * @return the {@link ExpiringSession}. + * @see org.springframework.session.ExpiringSession#setLastAccessedTime(long) + */ + protected T touch(T expiringSession) { + expiringSession.setLastAccessedTime(System.currentTimeMillis()); + return expiringSession; + } + + /** + * GemFireSession is a GemFire representation model of a Spring {@link ExpiringSession} + * that stores and manages Session state information in GemFire. This class implements + * GemFire's {@link DataSerializable} interface to better handle replication of Session + * state information across the GemFire cluster. + */ + @SuppressWarnings("serial") + public static class GemFireSession implements Comparable, + DataSerializable, Delta, ExpiringSession { + + protected static final boolean DEFAULT_ALLOW_JAVA_SERIALIZATION = true; + + protected static final DateFormat TO_STRING_DATE_FORMAT = new SimpleDateFormat("YYYY-MM-dd-HH-mm-ss"); + + protected static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT"; + + private transient boolean delta = false; + + private int maxInactiveIntervalInSeconds; + + private long creationTime; + private long lastAccessedTime; + + private transient final GemFireSessionAttributes sessionAttributes = new GemFireSessionAttributes(this); + + private transient final SpelExpressionParser parser = new SpelExpressionParser(); + + private String id; + + /* (non-Javadoc) */ + protected GemFireSession() { + this(UUID.randomUUID().toString()); + } + + /* (non-Javadoc) */ + protected GemFireSession(String id) { + this.id = validateId(id); + this.creationTime = System.currentTimeMillis(); + this.lastAccessedTime = this.creationTime; + } + + /* (non-Javadoc) */ + protected GemFireSession(ExpiringSession session) { + Assert.notNull(session, "The ExpiringSession to copy cannot be null"); + + this.id = session.getId(); + this.creationTime = session.getCreationTime(); + this.lastAccessedTime = session.getLastAccessedTime(); + this.maxInactiveIntervalInSeconds = session.getMaxInactiveIntervalInSeconds(); + this.sessionAttributes.from(session); + } + + /* (non-Javadoc) */ + public static GemFireSession create(int maxInactiveIntervalInSeconds) { + GemFireSession session = new GemFireSession(); + session.setMaxInactiveIntervalInSeconds(maxInactiveIntervalInSeconds); + return session; + } + + public static GemFireSession copy(ExpiringSession session) { + return new GemFireSession(session); + } + + /* (non-Javadoc) */ + public static GemFireSession from(ExpiringSession session) { + return (session instanceof GemFireSession ? (GemFireSession) session : copy(session)); + } + + /* (non-Javadoc) */ + private String validateId(String id) { + Assert.hasText(id, "ID must be specified"); + return id; + } + + /* (non-Javadoc) */ + protected boolean allowJavaSerialization() { + return DEFAULT_ALLOW_JAVA_SERIALIZATION; + } + + /* (non-Javadoc) */ + public synchronized String getId() { + return this.id; + } + + /* (non-Javadoc) */ + public synchronized long getCreationTime() { + return this.creationTime; + } + + /* (non-Javadoc) */ + public void setAttribute(String attributeName, Object attributeValue) { + this.sessionAttributes.setAttribute(attributeName, attributeValue); + } + + /* (non-Javadoc) */ + public void removeAttribute(String attributeName) { + this.sessionAttributes.removeAttribute(attributeName); + } + + /* (non-Javadoc) */ + public T getAttribute(String attributeName) { + return this.sessionAttributes.getAttribute(attributeName); + } + + /* (non-Javadoc) */ + public Set getAttributeNames() { + return this.sessionAttributes.getAttributeNames(); + } + + /* (non-Javadoc) */ + public GemFireSessionAttributes getAttributes() { + return this.sessionAttributes; + } + + /* (non-Javadoc) */ + public synchronized boolean isExpired() { + long lastAccessedTime = getLastAccessedTime(); + long maxInactiveIntervalInSeconds = getMaxInactiveIntervalInSeconds(); + + return (maxInactiveIntervalInSeconds >= 0 + && (idleTimeout(maxInactiveIntervalInSeconds) >= lastAccessedTime)); + } + + /* (non-Javadoc) */ + private long idleTimeout(long maxInactiveIntervalInSeconds) { + return (System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(maxInactiveIntervalInSeconds)); + } + + /* (non-Javadoc) */ + public synchronized void setLastAccessedTime(long lastAccessedTime) { + this.delta |= (this.lastAccessedTime != lastAccessedTime); + this.lastAccessedTime = lastAccessedTime; + } + + /* (non-Javadoc) */ + public synchronized long getLastAccessedTime() { + return this.lastAccessedTime; + } + + /* (non-Javadoc) */ + public synchronized void setMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds) { + this.delta |= (this.maxInactiveIntervalInSeconds != maxInactiveIntervalInSeconds); + this.maxInactiveIntervalInSeconds = maxInactiveIntervalInSeconds; + } + + /* (non-Javadoc) */ + public synchronized int getMaxInactiveIntervalInSeconds() { + return this.maxInactiveIntervalInSeconds; + } + + /* (non-Javadoc) */ + public synchronized void setPrincipalName(String principalName) { + setAttribute(PRINCIPAL_NAME_INDEX_NAME, principalName); + } + + /* (non-Javadoc) */ + public synchronized String getPrincipalName() { + String principalName = getAttribute(PRINCIPAL_NAME_INDEX_NAME); + + if (principalName == null) { + Object authentication = getAttribute(SPRING_SECURITY_CONTEXT); + + if (authentication != null) { + Expression expression = this.parser.parseExpression("authentication?.name"); + principalName = expression.getValue(authentication, String.class); + } + } + + return principalName; + } + + /* (non-Javadoc) */ + public synchronized void toData(DataOutput out) throws IOException { + out.writeUTF(getId()); + out.writeLong(getCreationTime()); + out.writeLong(getLastAccessedTime()); + out.writeInt(getMaxInactiveIntervalInSeconds()); + + String principalName = getPrincipalName(); + + int length = (StringUtils.hasText(principalName) ? principalName.length() : 0); + + out.writeInt(length); + + if (length > 0) { + out.writeUTF(principalName); + } + + writeObject(this.sessionAttributes, out); + + this.delta = false; + } + + /* (non-Javadoc) */ + void writeObject(Object obj, DataOutput out) throws IOException { + DataSerializer.writeObject(obj, out, allowJavaSerialization()); + } + + /* (non-Javadoc) */ + public synchronized void fromData(DataInput in) throws ClassNotFoundException, IOException { + this.id = in.readUTF(); + this.creationTime = in.readLong(); + setLastAccessedTime(in.readLong()); + setMaxInactiveIntervalInSeconds(in.readInt()); + + int principalNameLength = in.readInt(); + + if (principalNameLength > 0) { + setPrincipalName(in.readUTF()); + } + + this.sessionAttributes.from(this.readObject(in)); + + this.delta = false; + } + + /* (non-Javadoc) */ + T readObject(DataInput in) throws ClassNotFoundException, IOException { + return DataSerializer.readObject(in); + } + + /* (non-Javadoc) */ + public synchronized boolean hasDelta() { + return (this.delta || this.sessionAttributes.hasDelta()); + } + + /* (non-Javadoc) */ + public synchronized void toDelta(DataOutput out) throws IOException { + out.writeLong(getLastAccessedTime()); + out.writeInt(getMaxInactiveIntervalInSeconds()); + this.sessionAttributes.toDelta(out); + this.delta = false; + } + + /* (non-Javadoc) */ + public synchronized void fromDelta(DataInput in) throws IOException { + setLastAccessedTime(in.readLong()); + setMaxInactiveIntervalInSeconds(in.readInt()); + this.sessionAttributes.fromDelta(in); + this.delta = false; + } + + /* (non-Javadoc) */ + @SuppressWarnings("all") + public int compareTo(ExpiringSession session) { + return (Long.valueOf(getCreationTime()).compareTo(session.getCreationTime())); + } + + /* (non-Javadoc) */ + @Override + public boolean equals(final Object obj) { + if (obj == this) { + return true; + } + + if (!(obj instanceof Session)) { + return false; + } + + Session that = (Session) obj; + + return this.getId().equals(that.getId()); + } + + /* (non-Javadoc) */ + @Override + public int hashCode() { + int hashValue = 17; + hashValue = 37 * hashValue + getId().hashCode(); + return hashValue; + } + + /* (non-Javadoc) */ + @Override + public synchronized String toString() { + return String.format("{ @type = %1$s, id = %2$s, creationTime = %3$s, lastAccessedTime = %4$s" + + ", maxInactiveIntervalInSeconds = %5$s, principalName = %6$s }", + getClass().getName(), getId(), toString(getCreationTime()), toString(getLastAccessedTime()), + getMaxInactiveIntervalInSeconds(), getPrincipalName()); + } + + /* (non-Javadoc) */ + private String toString(long timestamp) { + return TO_STRING_DATE_FORMAT.format(new Date(timestamp)); + } + } + + /** + * GemFireSessionInstantiator is a GemFire {@link Instantiator} use to instantiate instances + * of the {@link GemFireSession} object used in GemFire's data serialization framework when + * persisting Session state in GemFire. + */ + public static class GemFireSessionInstantiator extends Instantiator { + + public static GemFireSessionInstantiator create() { + return new GemFireSessionInstantiator(GemFireSession.class, 800813552); + } + + public GemFireSessionInstantiator(Class type, int id) { + super(type, id); + } + + @Override + public DataSerializable newInstance() { + return new GemFireSession(); + } + } + + /** + * The GemFireSessionAttributes class is a container for Session attributes implementing + * both the {@link DataSerializable} and {@link Delta} GemFire interfaces for efficient + * storage and distribution (replication) in GemFire. Additionally, GemFireSessionAttributes + * extends {@link AbstractMap} providing {@link Map}-like behavior since attributes of a Session + * are effectively a name to value mapping. + * + * @see java.util.AbstractMap + * @see org.apache.geode.DataSerializable + * @see org.apache.geode.DataSerializer + * @see org.apache.geode.Delta + */ + @SuppressWarnings("serial") + public static class GemFireSessionAttributes extends AbstractMap + implements DataSerializable, Delta { + + protected static final boolean DEFAULT_ALLOW_JAVA_SERIALIZATION = true; + + private transient final Map sessionAttributes = new HashMap(); + private transient final Map sessionAttributeDeltas = new HashMap(); + + private transient final Object lock; + + /* (non-Javadoc) */ + protected GemFireSessionAttributes() { + this.lock = this; + } + + /* (non-Javadoc) */ + protected GemFireSessionAttributes(Object lock) { + this.lock = (lock != null ? lock : this); + } + + /* (non-Javadoc) */ + public void setAttribute(String attributeName, Object attributeValue) { + synchronized (this.lock) { + if (attributeValue != null) { + if (!attributeValue.equals(this.sessionAttributes.put(attributeName, attributeValue))) { + this.sessionAttributeDeltas.put(attributeName, attributeValue); + } + } + else { + removeAttribute(attributeName); + } + } + } + + /* (non-Javadoc) */ + public void removeAttribute(String attributeName) { + synchronized (this.lock) { + if (this.sessionAttributes.remove(attributeName) != null) { + this.sessionAttributeDeltas.put(attributeName, null); + } + } + } + + /* (non-Javadoc) */ + @SuppressWarnings("unchecked") + public T getAttribute(String attributeName) { + synchronized (this.lock) { + return (T) this.sessionAttributes.get(attributeName); + } + } + + /* (non-Javadoc) */ + public Set getAttributeNames() { + synchronized (this.lock) { + return Collections.unmodifiableSet(new HashSet(this.sessionAttributes.keySet())); + } + } + + /* (non-Javadoc) */ + protected boolean allowJavaSerialization() { + return DEFAULT_ALLOW_JAVA_SERIALIZATION; + } + + /* (non-Javadoc); NOTE: entrySet implementation is not Thread-safe. */ + @Override + @SuppressWarnings("all") + public Set> entrySet() { + return new AbstractSet>() { + @Override + public Iterator> iterator() { + return Collections.unmodifiableMap(GemFireSessionAttributes.this.sessionAttributes) + .entrySet().iterator(); + } + + @Override + public int size() { + return GemFireSessionAttributes.this.sessionAttributes.size(); + } + }; + } + + /* (non-Javadoc) */ + public void from(Session session) { + synchronized (this.lock) { + for (String attributeName : session.getAttributeNames()) { + setAttribute(attributeName, session.getAttribute(attributeName)); + } + } + } + + /* (non-Javadoc) */ + public void from(GemFireSessionAttributes sessionAttributes) { + synchronized (this.lock) { + for (String attributeName : sessionAttributes.getAttributeNames()) { + setAttribute(attributeName, sessionAttributes.getAttribute(attributeName)); + } + } + } + + /* (non-Javadoc) */ + public void toData(DataOutput out) throws IOException { + synchronized (this.lock) { + Set attributeNames = getAttributeNames(); + + out.writeInt(attributeNames.size()); + + for (String attributeName : attributeNames) { + out.writeUTF(attributeName); + writeObject(getAttribute(attributeName), out); + } + } + } + + /* (non-Javadoc) */ + void writeObject(Object obj, DataOutput out) throws IOException { + DataSerializer.writeObject(obj, out, allowJavaSerialization()); + } + + /* (non-Javadoc) */ + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + synchronized (this.lock) { + for (int count = in.readInt(); count > 0; count--) { + setAttribute(in.readUTF(), readObject(in)); + } + + this.sessionAttributeDeltas.clear(); + } + } + + /* (non-Javadoc) */ + T readObject(DataInput in) throws ClassNotFoundException, IOException { + return DataSerializer.readObject(in); + } + + /* (non-Javadoc) */ + public boolean hasDelta() { + synchronized (this.lock) { + return !this.sessionAttributeDeltas.isEmpty(); + } + } + + /* (non-Javadoc) */ + public void toDelta(DataOutput out) throws IOException { + synchronized (this.lock) { + out.writeInt(this.sessionAttributeDeltas.size()); + + for (Map.Entry entry : this.sessionAttributeDeltas.entrySet()) { + out.writeUTF(entry.getKey()); + writeObject(entry.getValue(), out); + } + + this.sessionAttributeDeltas.clear(); + } + } + + /* (non-Javadoc) */ + public void fromDelta(DataInput in) throws InvalidDeltaException, IOException { + synchronized (this.lock) { + try { + int count = in.readInt(); + + Map deltas = new HashMap(count); + + while (count-- > 0) { + deltas.put(in.readUTF(), readObject(in)); + } + + for (Map.Entry entry : deltas.entrySet()) { + setAttribute(entry.getKey(), entry.getValue()); + this.sessionAttributeDeltas.remove(entry.getKey()); + } + } + catch (ClassNotFoundException e) { + throw new InvalidDeltaException("class type in data not found", e); + } + } + } + + @Override + public String toString() { + return this.sessionAttributes.toString(); + } + } + + /** + * GemFireSessionAttributesInstantiator is a GemFire {@link Instantiator} use to instantiate instances + * of the {@link GemFireSessionAttributes} object used in GemFire's data serialization framework when + * persisting Session attributes state in GemFire. + */ + public static class GemFireSessionAttributesInstantiator extends Instantiator { + + public static GemFireSessionAttributesInstantiator create() { + return new GemFireSessionAttributesInstantiator(GemFireSessionAttributes.class, 800828008); + } + + public GemFireSessionAttributesInstantiator(Class type, int id) { + super(type, id); + } + + @Override + public DataSerializable newInstance() { + return new GemFireSessionAttributes(); + } + } +} diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.java new file mode 100644 index 0000000..7fedc18 --- /dev/null +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.java @@ -0,0 +1,155 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.geode.cache.query.SelectResults; + +import org.springframework.data.gemfire.GemfireOperations; +import org.springframework.session.ExpiringSession; +import org.springframework.session.SessionRepository; + +/** + * The {@link GemFireOperationsSessionRepository} class is a Spring {@link SessionRepository} implementation + * that interfaces with and uses GemFire to back and store Spring Sessions. + * + * @author John Blum + * @since 1.1.0 + * @see org.springframework.data.gemfire.GemfireOperations + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository + */ +public class GemFireOperationsSessionRepository extends AbstractGemFireOperationsSessionRepository { + + // GemFire OQL query used to lookup Sessions by arbitrary attributes. + protected static final String FIND_SESSIONS_BY_INDEX_NAME_VALUE_QUERY = "SELECT s FROM %1$s s WHERE s.attributes['%2$s'] = $1"; + + // GemFire OQL query used to look up Sessions by principal name. + protected static final String FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY = "SELECT s FROM %1$s s WHERE s.principalName = $1"; + + /** + * Constructs an instance of GemFireOperationsSessionRepository initialized with the + * required GemfireOperations object used to perform data access operations to manage + * Session state. + * + * @param template the GemfireOperations object used to access and manage Session + * state in GemFire. + * @see org.springframework.data.gemfire.GemfireOperations + */ + public GemFireOperationsSessionRepository(GemfireOperations template) { + super(template); + } + + /** + * Looks up all available Sessions with the particular attribute indexed by name + * having the given value. + * + * @param indexName name of the indexed Session attribute. (e.g. + * {@link org.springframework.session.FindByIndexNameSessionRepository#PRINCIPAL_NAME_INDEX_NAME} + * ). + * @param indexValue value of the indexed Session attribute to search on (e.g. + * username). + * @return a mapping of Session ID to Session instances. + * @see org.springframework.session.ExpiringSession + * @see java.util.Map + * @see #prepareQuery(String) + */ + public Map findByIndexNameAndIndexValue(String indexName, String indexValue) { + SelectResults results = getTemplate().find(prepareQuery(indexName), indexValue); + + Map sessions = new HashMap(results.size()); + + for (ExpiringSession session : results.asList()) { + sessions.put(session.getId(), session); + } + + return sessions; + } + + /** + * Prepares the appropriate GemFire OQL query based on the indexed Session attribute + * name. + * + * @param indexName a String indicating the name of the indexed Session attribute. + * @return an appropriate GemFire OQL statement for querying on a particular indexed + * Session attribute. + */ + protected String prepareQuery(String indexName) { + return (PRINCIPAL_NAME_INDEX_NAME.equals(indexName) + ? String.format(FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY, getFullyQualifiedRegionName()) + : String.format(FIND_SESSIONS_BY_INDEX_NAME_VALUE_QUERY, getFullyQualifiedRegionName(), indexName)); + } + + /** + * Constructs a new {@link ExpiringSession} instance backed by GemFire. + * + * @return an instance of {@link ExpiringSession} backed by GemFire. + * @see AbstractGemFireOperationsSessionRepository.GemFireSession#create(int) + * @see org.springframework.session.ExpiringSession + * @see #getMaxInactiveIntervalInSeconds() + */ + public ExpiringSession createSession() { + return GemFireSession.create(getMaxInactiveIntervalInSeconds()); + } + + /** + * Gets a copy of an existing, non-expired {@link ExpiringSession} by ID. If the + * Session is expired, then it is deleted. + * + * @param sessionId a String indicating the ID of the Session to get. + * @return an existing {@link ExpiringSession} by ID or null if not Session exists. + * @see AbstractGemFireOperationsSessionRepository.GemFireSession#from(ExpiringSession) + * @see org.springframework.session.ExpiringSession + * @see #delete(String) + */ + public ExpiringSession getSession(String sessionId) { + ExpiringSession storedSession = getTemplate().get(sessionId); + + if (storedSession != null) { + storedSession = storedSession.isExpired() + ? delete(storedSession) + : touch(GemFireSession.from(storedSession)); + } + + return storedSession; + } + + /** + * Saves the specified {@link ExpiringSession} to GemFire. + * + * @param session the {@link ExpiringSession} to save. + * @see org.springframework.data.gemfire.GemfireOperations#put(Object, Object) + * @see org.springframework.session.ExpiringSession + */ + public void save(ExpiringSession session) { + getTemplate().put(session.getId(), GemFireSession.from(session)); + } + + /** + * Deletes (removes) any existing {@link ExpiringSession} from GemFire. This operation + * also results in a SessionDeletedEvent. + * + * @param sessionId a String indicating the ID of the Session to remove from GemFire. + * @see org.springframework.data.gemfire.GemfireOperations#remove(Object) + * @see #handleDeleted(String, ExpiringSession) + */ + public void delete(String sessionId) { + handleDeleted(sessionId, getTemplate().remove(sessionId)); + } +} diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.java new file mode 100644 index 0000000..bdbb8e6 --- /dev/null +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.java @@ -0,0 +1,170 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.client.ClientRegionShortcut; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * Add this annotation to a Spring {@code @Configuration} class to expose the SessionRepositoryFilter + * as a bean named "springSessionRepositoryFilter" and backed by Pivotal GemFire or Apache Geode. + * + * In order to leverage the annotation, a single Pivotal GemFire/Apache Geode + * {@link org.apache.geode.cache.Cache} + * or {@link org.apache.geode.cache.client.ClientCache} instance must be provided. + * + * For example: + * + *
+ * 
+ * {@literal @Configuration}
+ * {@literal @EnableGemFireHttpSession}
+ * public class GemFirePeerCacheHttpSessionConfiguration {
+ *
+ *     {@literal @Bean}
+ *     public Properties gemfireProperties() {
+ *       Properties gemfireProperties = new Properties();
+ *       gemfireProperties.setProperty("name", "ExamplePeer");
+ *       gemfireProperties.setProperty("mcast-port", "0");
+ *       gemfireProperties.setProperty("log-level", "warning");
+ *       return gemfireProperties;
+ *     }
+ *
+ *     {@literal @Bean}
+ *     public CacheFactoryBean gemfireCache() throws Exception {
+ *       CacheFactoryBean cache  = new CacheFactoryBean();
+ *       cache.setProperties(gemfireProperties());
+ *       return cache;
+ *     }
+ * }
+ *  
+ * + * Alternatively, Spring Session can be configured to use Pivotal GemFire (Apache Geode) as a client + * using a dedicated GemFire Server cluster and a {@link org.apache.geode.cache.client.ClientCache}. + * + * For example: + * + * + * {@literal @Configuration} + * {@literal @EnableGemFireHttpSession} + * public class GemFireClientCacheHttpSessionConfiguration { + * + * {@literal @Bean} + * public Properties gemfireProperties() { + * Properties gemfireProperties = new Properties(); + * gemfireProperties.setProperty("name", "ExampleClient"); + * gemfireProperties.setProperty("log-level", "warning"); + * return gemfireProperties; + * } + * + * {@literal @Bean} + * public ClientCacheFactoryBean gemfireCache() throws Exception { + * ClientCacheFactoryBean clientCache = new ClientCacheFactoryBean(); + * clientCache.setClose(true) + * clientCache.setProperties(gemfireProperties()); + * return clientCache; + * } + * + * {@literal @Bean} + * public PoolFactoryBean gemfirePool() { + * PoolFactoryBean pool = new PoolFactoryBean(); + * pool.addServer(new ConnectionEndpoint("serverHost", 40404); + * return pool; + * } + * } + * + * + * More advanced configurations can extend {@link GemFireHttpSessionConfiguration} instead. + * + * @author John Blum + * @see org.springframework.session.config.annotation.web.http.EnableSpringHttpSession + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @since 1.1.0 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Configuration +@Import(GemFireHttpSessionConfiguration.class) +public @interface EnableGemFireHttpSession { + + /** + * Defines the GemFire ClientCache Region DataPolicy. + * + * @return a ClientRegionShortcut used to specify and configure the ClientCache Region + * DataPolicy. + * @see org.apache.geode.cache.client.ClientRegionShortcut + */ + ClientRegionShortcut clientRegionShortcut() default ClientRegionShortcut.PROXY; + + /** + * Identifies the Session attributes by name that should be indexed for query + * operations. For instance, find all Sessions in GemFire having attribute A defined + * with value X. + * + * @return an array of Strings identifying the names of Session attributes to index. + */ + String[] indexableSessionAttributes() default {}; + + /** + * Defines the maximum interval in seconds that a Session can remain inactive before + * it is considered expired. Defaults to 1800 seconds, or 30 minutes. + * + * @return an integer value defining the maximum inactive interval in seconds for + * declaring a Session expired. + */ + int maxInactiveIntervalInSeconds() default 1800; + + /** + * Specifies the name of the specific GemFire {@link org.apache.geode.cache.client.Pool} used + * by the Spring Session Data GemFire client Region ('ClusteredSpringSessions') when performing + * cache operations. This is attribute is only used in the client/server topology. + * + * @return the name of the GemFire {@link org.apache.geode.cache.client.Pool} to be used + * by the client Region used to manage (HTTP) Sessions. + * @see org.springframework.data.gemfire.config.xml.GemfireConstants#DEFAULT_GEMFIRE_POOL_NAME + */ + String poolName() default GemFireHttpSessionConfiguration.DEFAULT_GEMFIRE_POOL_NAME; + + /** + * Defines the name of the GemFire (Client)Cache Region used to store Sessions. + * + * @return a String specifying the name of the GemFire (Client)Cache Region used to + * store Sessions. + * @see org.apache.geode.cache.Region#getName() + */ + String regionName() default "ClusteredSpringSessions"; + + /** + * Defines the GemFire, Peer Cache Region DataPolicy. + * + * @return a RegionShortcut used to specify and configure the Peer Cache Region + * DataPolicy. + * @see org.apache.geode.cache.RegionShortcut + */ + RegionShortcut serverRegionShortcut() default RegionShortcut.PARTITION; + +} diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java new file mode 100644 index 0000000..8635aa8 --- /dev/null +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java @@ -0,0 +1,487 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http; + +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.ExpirationAttributes; +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.client.ClientRegionShortcut; +import org.apache.geode.cache.client.Pool; + +import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.ImportAware; +import org.springframework.core.annotation.AnnotationAttributes; +import org.springframework.core.type.AnnotationMetadata; +import org.springframework.data.gemfire.GemfireOperations; +import org.springframework.data.gemfire.GemfireTemplate; +import org.springframework.data.gemfire.IndexFactoryBean; +import org.springframework.data.gemfire.IndexType; +import org.springframework.data.gemfire.RegionAttributesFactoryBean; +import org.springframework.data.gemfire.config.xml.GemfireConstants; +import org.springframework.session.ExpiringSession; +import org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration; +import org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository.GemFireSession; +import org.springframework.session.data.gemfire.GemFireOperationsSessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean; +import org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.util.StringUtils; + +/** + * The {@link GemFireHttpSessionConfiguration} class is a Spring {@link Configuration @Configuration} class + * used to configure and initialize Pivotal GemFire (or Apache Geode) as a clustered, replicated + * {@link javax.servlet.http.HttpSession} provider implementation in Spring {@link ExpiringSession}. + * + * @author John Blum + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.client.Pool + * @see org.springframework.beans.factory.BeanClassLoaderAware + * @see org.springframework.context.annotation.Bean + * @see org.springframework.context.annotation.Configuration + * @see org.springframework.context.annotation.ImportAware + * @see org.springframework.data.gemfire.GemfireOperations + * @see org.springframework.data.gemfire.GemfireTemplate + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration + * @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository + * @see org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession + * @since 1.1.0 + */ +@Configuration +public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfiguration + implements BeanClassLoaderAware, ImportAware { + + /** + * The default maximum interval in seconds in which a Session can remain inactive + * before it is considered expired. + */ + public static final int DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS = (int) TimeUnit.MINUTES.toSeconds(30); + + protected static final Class SPRING_SESSION_GEMFIRE_REGION_KEY_CONSTRAINT = Object.class; + protected static final Class SPRING_SESSION_GEMFIRE_REGION_VALUE_CONSTRAINT = GemFireSession.class; + + /** + * The default {@link ClientRegionShortcut} used to configure the GemFire ClientCache + * Region that will store Spring Sessions. + */ + public static final ClientRegionShortcut DEFAULT_CLIENT_REGION_SHORTCUT = ClientRegionShortcut.PROXY; + + /** + * The default {@link RegionShortcut} used to configure the GemFire Cache Region that + * will store Spring Sessions. + */ + public static final RegionShortcut DEFAULT_SERVER_REGION_SHORTCUT = RegionShortcut.PARTITION; + + /** + * Name of the GemFire {@link Pool} used by the client Region for managing Session state information. + */ + public static final String DEFAULT_GEMFIRE_POOL_NAME = GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME; + + /** + * The default name of the Gemfire (Client)Cache Region used to store Sessions. + */ + public static final String DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME = "ClusteredSpringSessions"; + + /** + * The default names of all Session attributes that should be indexed by GemFire. + */ + public static final String[] DEFAULT_INDEXABLE_SESSION_ATTRIBUTES = {}; + + private int maxInactiveIntervalInSeconds = DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS; + + private ClassLoader beanClassLoader; + + private ClientRegionShortcut clientRegionShortcut = DEFAULT_CLIENT_REGION_SHORTCUT; + + private RegionShortcut serverRegionShortcut = DEFAULT_SERVER_REGION_SHORTCUT; + + private String poolName = DEFAULT_GEMFIRE_POOL_NAME; + + private String springSessionGemFireRegionName = DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME; + + private String[] indexableSessionAttributes = DEFAULT_INDEXABLE_SESSION_ATTRIBUTES; + + /** + * Sets a reference to the {@link ClassLoader} used to load bean definition class + * types in a Spring context. + * + * @param beanClassLoader the ClassLoader used by the Spring container to load bean + * class types. + * @see org.springframework.beans.factory.BeanClassLoaderAware#setBeanClassLoader(ClassLoader) + * @see java.lang.ClassLoader + */ + public void setBeanClassLoader(ClassLoader beanClassLoader) { + this.beanClassLoader = beanClassLoader; + } + + /** + * Gets a reference to the {@link ClassLoader} used to load bean definition class + * types in a Spring context. + * + * @return the ClassLoader used by the Spring container to load bean class types. + * @see java.lang.ClassLoader + */ + protected ClassLoader getBeanClassLoader() { + return this.beanClassLoader; + } + + /** + * Sets the {@link ClientRegionShortcut} used to configure the GemFire ClientCache + * Region that will store Spring Sessions. + * + * @param shortcut the ClientRegionShortcut used to configure the GemFire ClientCache + * Region. + * @see org.apache.geode.cache.client.ClientRegionShortcut + */ + public void setClientRegionShortcut(ClientRegionShortcut shortcut) { + this.clientRegionShortcut = shortcut; + } + + /** + * Gets the {@link ClientRegionShortcut} used to configure the GemFire ClientCache + * Region that will store Spring Sessions. Defaults to + * {@link ClientRegionShortcut#PROXY}. + * + * @return the ClientRegionShortcut used to configure the GemFire ClientCache Region. + * @see org.apache.geode.cache.client.ClientRegionShortcut + * @see EnableGemFireHttpSession#clientRegionShortcut() + */ + protected ClientRegionShortcut getClientRegionShortcut() { + return (this.clientRegionShortcut != null ? this.clientRegionShortcut : DEFAULT_CLIENT_REGION_SHORTCUT); + } + + /** + * Sets the names of all Session attributes that should be indexed by GemFire. + * + * @param indexableSessionAttributes an array of Strings indicating the names of all + * Session attributes for which an Index will be created by GemFire. + */ + public void setIndexableSessionAttributes(String[] indexableSessionAttributes) { + this.indexableSessionAttributes = indexableSessionAttributes; + } + + /** + * Get the names of all Session attributes that should be indexed by GemFire. + * + * @return an array of Strings indicating the names of all Session attributes for + * which an Index will be created by GemFire. Defaults to an empty String array if + * unspecified. + * @see EnableGemFireHttpSession#indexableSessionAttributes() + */ + protected String[] getIndexableSessionAttributes() { + return (this.indexableSessionAttributes != null ? this.indexableSessionAttributes + : DEFAULT_INDEXABLE_SESSION_ATTRIBUTES); + } + + /** + * Sets the maximum interval in seconds in which a Session can remain inactive before + * it is considered expired. + * + * @param maxInactiveIntervalInSeconds an integer value specifying the maximum + * interval in seconds that a Session can remain inactive before it is considered + * expired. + */ + public void setMaxInactiveIntervalInSeconds(int maxInactiveIntervalInSeconds) { + this.maxInactiveIntervalInSeconds = maxInactiveIntervalInSeconds; + } + + /** + * Gets the maximum interval in seconds in which a Session can remain inactive before + * it is considered expired. + * + * @return an integer value specifying the maximum interval in seconds that a Session + * can remain inactive before it is considered expired. + * @see EnableGemFireHttpSession#maxInactiveIntervalInSeconds() + */ + protected int getMaxInactiveIntervalInSeconds() { + return this.maxInactiveIntervalInSeconds; + } + + /** + * Sets the name of the GemFire {@link Pool} used by the client Region for managing Sessions + * during cache operations involving the server. + * + * @param poolName the name of a GemFire {@link Pool}. + * @see Pool#getName() + */ + public void setPoolName(String poolName) { + this.poolName = poolName; + } + + /** + * Returns the name of the GemFire {@link Pool} used by the client Region for managing Sessions + * during cache operations involving the server. + * + * @return the name of a GemFire {@link Pool}. + * @see Pool#getName() + */ + protected String getPoolName() { + return (StringUtils.hasText(this.poolName) ? this.poolName : DEFAULT_GEMFIRE_POOL_NAME); + } + + /** + * Sets the {@link RegionShortcut} used to configure the GemFire Cache Region that + * will store Spring Sessions. + * + * @param shortcut the RegionShortcut used to configure the GemFire Cache Region. + * @see org.apache.geode.cache.RegionShortcut + */ + public void setServerRegionShortcut(RegionShortcut shortcut) { + this.serverRegionShortcut = shortcut; + } + + /** + * Gets the {@link RegionShortcut} used to configure the GemFire Cache Region that + * will store Spring Sessions. Defaults to {@link RegionShortcut#PARTITION}. + * + * @return the RegionShortcut used to configure the GemFire Cache Region. + * @see org.apache.geode.cache.RegionShortcut + * @see EnableGemFireHttpSession#serverRegionShortcut() + */ + protected RegionShortcut getServerRegionShortcut() { + return (this.serverRegionShortcut != null ? this.serverRegionShortcut : DEFAULT_SERVER_REGION_SHORTCUT); + } + + /** + * Sets the name of the Gemfire (Client)Cache Region used to store Sessions. + * + * @param springSessionGemFireRegionName a String specifying the name of the GemFire + * (Client)Cache Region used to store the Session. + */ + public void setSpringSessionGemFireRegionName(String springSessionGemFireRegionName) { + this.springSessionGemFireRegionName = springSessionGemFireRegionName; + } + + /** + * Gets the name of the Gemfire (Client)Cache Region used to store Sessions. Defaults + * to 'ClusteredSpringSessions'. + * + * @return a String specifying the name of the GemFire (Client)Cache Region used to + * store the Session. + * @see org.apache.geode.cache.Region#getName() + * @see EnableGemFireHttpSession#regionName() + */ + protected String getSpringSessionGemFireRegionName() { + return (StringUtils.hasText(this.springSessionGemFireRegionName) ? this.springSessionGemFireRegionName + : DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + } + + /** + * Callback with the {@link AnnotationMetadata} of the class containing @Import + * annotation that imported this @Configuration class. + * + * @param importMetadata the AnnotationMetadata of the class importing + * this @Configuration class. + */ + public void setImportMetadata(AnnotationMetadata importMetadata) { + AnnotationAttributes enableGemFireHttpSessionAnnotationAttributes = + AnnotationAttributes.fromMap(importMetadata.getAnnotationAttributes( + EnableGemFireHttpSession.class.getName())); + + setClientRegionShortcut(ClientRegionShortcut.class.cast(enableGemFireHttpSessionAnnotationAttributes + .getEnum("clientRegionShortcut"))); + + setIndexableSessionAttributes(enableGemFireHttpSessionAnnotationAttributes + .getStringArray("indexableSessionAttributes")); + + setMaxInactiveIntervalInSeconds(enableGemFireHttpSessionAnnotationAttributes + .getNumber("maxInactiveIntervalInSeconds").intValue()); + + setPoolName(enableGemFireHttpSessionAnnotationAttributes.getString("poolName")); + + setServerRegionShortcut(RegionShortcut.class.cast(enableGemFireHttpSessionAnnotationAttributes + .getEnum("serverRegionShortcut"))); + + setSpringSessionGemFireRegionName(enableGemFireHttpSessionAnnotationAttributes + .getString("regionName")); + } + + /** + * Defines the Spring SessionRepository bean used to interact with GemFire as a Spring + * Session provider. + * + * @param gemfireOperations an instance of {@link GemfireOperations} used to manage + * Spring Sessions in GemFire. + * @return a GemFireOperationsSessionRepository for managing (clustering/replicating) + * Sessions using GemFire. + */ + @Bean + public GemFireOperationsSessionRepository sessionRepository( + @Qualifier("sessionRegionTemplate") GemfireOperations gemfireOperations) { + + GemFireOperationsSessionRepository sessionRepository = + new GemFireOperationsSessionRepository(gemfireOperations); + + sessionRepository.setMaxInactiveIntervalInSeconds(getMaxInactiveIntervalInSeconds()); + + return sessionRepository; + } + + /** + * Defines a Spring GemfireTemplate bean used to interact with GemFire's (Client)Cache + * {@link Region} storing Sessions. + * + * @param gemFireCache reference to the single GemFire cache instance used by the + * {@link GemfireTemplate} to perform GemFire cache data access operations. + * @return a {@link GemfireTemplate} used to interact with GemFire's (Client)Cache + * {@link Region} storing Sessions. + * @see org.springframework.data.gemfire.GemfireTemplate + * @see org.apache.geode.cache.Region + */ + @Bean + @DependsOn(DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME) + public GemfireTemplate sessionRegionTemplate(GemFireCache gemFireCache) { + return new GemfireTemplate(gemFireCache.getRegion(getSpringSessionGemFireRegionName())); + } + + /** + * Defines a Spring GemFire {@link org.apache.geode.cache.Cache} {@link Region} + * bean used to store and manage Sessions using either a client-server or peer-to-peer + * (p2p) topology. + * + * @param gemfireCache a reference to the GemFire + * {@link org.apache.geode.cache.Cache}. + * @param sessionRegionAttributes the GemFire {@link RegionAttributes} used to + * configure the {@link Region}. + * @return a {@link GemFireCacheTypeAwareRegionFactoryBean} used to configure and + * initialize a GemFire Cache {@link Region} for storing and managing Sessions. + * @see #getClientRegionShortcut() + * @see #getSpringSessionGemFireRegionName() + * @see #getServerRegionShortcut() + */ + @Bean(name = DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME) + public GemFireCacheTypeAwareRegionFactoryBean sessionRegion(GemFireCache gemfireCache, + @Qualifier("sessionRegionAttributes") RegionAttributes sessionRegionAttributes) { + + GemFireCacheTypeAwareRegionFactoryBean sessionRegion = + new GemFireCacheTypeAwareRegionFactoryBean(); + + sessionRegion.setClientRegionShortcut(getClientRegionShortcut()); + sessionRegion.setGemfireCache(gemfireCache); + sessionRegion.setPoolName(getPoolName()); + sessionRegion.setRegionAttributes(sessionRegionAttributes); + sessionRegion.setRegionName(getSpringSessionGemFireRegionName()); + sessionRegion.setServerRegionShortcut(getServerRegionShortcut()); + + return sessionRegion; + } + + /** + * Defines a Spring GemFire {@link RegionAttributes} bean used to configure and + * initialize the GemFire cache {@link Region} storing Sessions. Expiration is also + * configured for the {@link Region} on the basis that the GemFire cache + * {@link Region} is a not a proxy, on either the client or server. + * + * @param gemfireCache a reference to the GemFire cache. + * @return an instance of {@link RegionAttributes} used to configure and initialize + * the GemFire cache {@link Region} for storing and managing Sessions. + * @see org.springframework.data.gemfire.RegionAttributesFactoryBean + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.PartitionAttributes + * @see #isExpirationAllowed(GemFireCache) + */ + @Bean + @SuppressWarnings({ "unchecked", "deprecation" }) + public RegionAttributesFactoryBean sessionRegionAttributes(GemFireCache gemfireCache) { + RegionAttributesFactoryBean regionAttributes = new RegionAttributesFactoryBean(); + + regionAttributes.setKeyConstraint(SPRING_SESSION_GEMFIRE_REGION_KEY_CONSTRAINT); + regionAttributes.setValueConstraint(SPRING_SESSION_GEMFIRE_REGION_VALUE_CONSTRAINT); + + if (isExpirationAllowed(gemfireCache)) { + regionAttributes.setStatisticsEnabled(true); + regionAttributes.setEntryIdleTimeout( + new ExpirationAttributes(Math.max(getMaxInactiveIntervalInSeconds(), 0), ExpirationAction.INVALIDATE)); + } + + return regionAttributes; + } + + /** + * Determines whether expiration configuration is allowed to be set on the GemFire + * cache {@link Region} used to store and manage Sessions. + * + * @param gemfireCache a reference to the GemFire cache. + * @return a boolean indicating if a {@link Region} can be configured for Region entry + * idle-timeout expiration. + * @see GemFireUtils#isClient(GemFireCache) + * @see GemFireUtils#isProxy(ClientRegionShortcut) + * @see GemFireUtils#isProxy(RegionShortcut) + */ + boolean isExpirationAllowed(GemFireCache gemfireCache) { + return !(GemFireUtils.isClient(gemfireCache) ? GemFireUtils.isProxy(getClientRegionShortcut()) + : GemFireUtils.isProxy(getServerRegionShortcut())); + } + + /** + * Defines a GemFire Index bean on the GemFire cache {@link Region} storing and managing Sessions, + * specifically on the 'principalName' property for quick lookup of Sessions by 'principalName'. + * + * @param gemfireCache a reference to the GemFire cache. + * @return a {@link IndexFactoryBean} to create an GemFire Index on the 'principalName' property + * for Sessions stored in the GemFire cache {@link Region}. + * @see org.springframework.data.gemfire.IndexFactoryBean + * @see org.apache.geode.cache.GemFireCache + */ + @Bean + @DependsOn(DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME) + public IndexFactoryBean principalNameIndex(GemFireCache gemfireCache) { + IndexFactoryBean index = new IndexFactoryBean(); + + index.setCache(gemfireCache); + index.setName("principalNameIndex"); + index.setExpression("principalName"); + index.setFrom(GemFireUtils.toRegionPath(getSpringSessionGemFireRegionName())); + index.setOverride(true); + index.setType(IndexType.HASH); + + return index; + } + + /** + * Defines a GemFire Index bean on the GemFire cache {@link Region} storing and managing Sessions, + * specifically on all Session attributes for quick lookup and queries on Session attribute names + * with a given value. + * + * @param gemfireCache a reference to the GemFire cache. + * @return a {@link IndexFactoryBean} to create an GemFire Index on attributes of Sessions + * stored in the GemFire cache {@link Region}. + * @see org.springframework.data.gemfire.IndexFactoryBean + * @see org.apache.geode.cache.GemFireCache + */ + @Bean + @DependsOn(DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME) + public SessionAttributesIndexFactoryBean sessionAttributesIndex(GemFireCache gemfireCache) { + SessionAttributesIndexFactoryBean sessionAttributesIndex = new SessionAttributesIndexFactoryBean(); + + sessionAttributesIndex.setGemFireCache(gemfireCache); + sessionAttributesIndex.setIndexableSessionAttributes(getIndexableSessionAttributes()); + sessionAttributesIndex.setRegionName(getSpringSessionGemFireRegionName()); + + return sessionAttributesIndex; + } +} diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java new file mode 100644 index 0000000..1d18bcb --- /dev/null +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java @@ -0,0 +1,384 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http.support; + +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.InterestResultPolicy; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.client.ClientRegionShortcut; +import org.apache.geode.cache.client.Pool; + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.data.gemfire.GenericRegionFactoryBean; +import org.springframework.data.gemfire.client.ClientRegionFactoryBean; +import org.springframework.data.gemfire.client.Interest; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +/** + * The {@link GemFireCacheTypeAwareRegionFactoryBean} class is a Spring {@link FactoryBean} + * used to construct, configure and initialize the GemFire cache {@link Region} used to + * store and manage Session state. + * + * @param the type of keys + * @param the type of values + * @author John Blum + * @since 1.1.0 + * @see org.springframework.data.gemfire.GenericRegionFactoryBean + * @see org.springframework.beans.factory.BeanFactoryAware + * @see org.springframework.beans.factory.FactoryBean + * @see org.springframework.beans.factory.InitializingBean + */ +public class GemFireCacheTypeAwareRegionFactoryBean + implements BeanFactoryAware, FactoryBean>, InitializingBean { + + protected static final ClientRegionShortcut DEFAULT_CLIENT_REGION_SHORTCUT = + GemFireHttpSessionConfiguration.DEFAULT_CLIENT_REGION_SHORTCUT; + + protected static final RegionShortcut DEFAULT_SERVER_REGION_SHORTCUT = + GemFireHttpSessionConfiguration.DEFAULT_SERVER_REGION_SHORTCUT; + + protected static final String DEFAULT_GEMFIRE_POOL_NAME = + GemFireHttpSessionConfiguration.DEFAULT_GEMFIRE_POOL_NAME; + + protected static final String DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME = + GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME; + + private BeanFactory beanFactory; + + private ClientRegionShortcut clientRegionShortcut; + + private GemFireCache gemfireCache; + + private Region region; + + private RegionAttributes regionAttributes; + + private RegionShortcut serverRegionShortcut; + + private String poolName; + private String regionName; + + /** + * Post-construction initialization callback to create, configure and initialize the + * GemFire cache {@link Region} used to store, replicate (distribute) and manage + * Session state. This method intelligently handles both client-server and + * peer-to-peer (p2p) GemFire supported distributed system topologies. + * + * @throws Exception if the initialization of the GemFire cache {@link Region} fails. + * @see org.springframework.session.data.gemfire.support.GemFireUtils#isClient(GemFireCache) + * @see #getGemfireCache() + * @see #newClientRegion(GemFireCache) + * @see #newServerRegion(GemFireCache) + */ + public void afterPropertiesSet() throws Exception { + GemFireCache gemfireCache = getGemfireCache(); + + this.region = (GemFireUtils.isClient(gemfireCache) ? newClientRegion(gemfireCache) + : newServerRegion(gemfireCache)); + } + + /** + * Constructs a GemFire cache {@link Region} using a peer-to-peer (p2p) GemFire + * topology to store and manage Session state in a GemFire server cluster accessible + * from a GemFire cache client. + * + * @param gemfireCache a reference to the GemFire + * {@link org.apache.geode.cache.Cache}. + * @return a peer-to-peer-based GemFire cache {@link Region} to store and manage + * Session state. + * @throws Exception if the instantiation, configuration and initialization of the + * GemFire cache {@link Region} fails. + * @see org.springframework.data.gemfire.GenericRegionFactoryBean + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.Region + * @see #getRegionAttributes() + * @see #getRegionName() + * @see #getServerRegionShortcut() + */ + protected Region newServerRegion(GemFireCache gemfireCache) throws Exception { + GenericRegionFactoryBean serverRegion = new GenericRegionFactoryBean(); + + serverRegion.setAttributes(getRegionAttributes()); + serverRegion.setCache(gemfireCache); + serverRegion.setRegionName(getRegionName()); + serverRegion.setShortcut(getServerRegionShortcut()); + serverRegion.afterPropertiesSet(); + + return serverRegion.getObject(); + } + + /** + * Constructs a GemFire cache {@link Region} using the client-server GemFire topology + * to store and manage Session state in a GemFire server cluster accessible from a + * GemFire cache client. + * + * @param gemfireCache a reference to the GemFire + * {@link org.apache.geode.cache.Cache}. + * @return a client-server-based GemFire cache {@link Region} to store and manage + * Session state. + * @throws Exception if the instantiation, configuration and initialization of the + * GemFire cache {@link Region} fails. + * @see org.springframework.data.gemfire.client.ClientRegionFactoryBean + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.Region + * @see #getClientRegionShortcut() + * @see #getRegionAttributes() + * @see #getRegionName() + * @see #registerInterests(boolean) + */ + protected Region newClientRegion(GemFireCache gemfireCache) throws Exception { + ClientRegionFactoryBean clientRegion = new ClientRegionFactoryBean(); + + ClientRegionShortcut shortcut = getClientRegionShortcut(); + + clientRegion.setAttributes(getRegionAttributes()); + clientRegion.setBeanFactory(getBeanFactory()); + clientRegion.setCache(gemfireCache); + clientRegion.setInterests(registerInterests(!GemFireUtils.isLocal(shortcut))); + clientRegion.setPoolName(getPoolName()); + clientRegion.setRegionName(getRegionName()); + clientRegion.setShortcut(shortcut); + clientRegion.afterPropertiesSet(); + + return clientRegion.getObject(); + } + + /** + * Decides whether interests will be registered for all keys. Interests is only registered on + * a client and typically only when the client is a (CACHING) PROXY to the server (i.e. non-LOCAL only). + * + * @param register a boolean value indicating whether interests should be registered. + * @return an array of Interests KEY/VALUE registrations. + * @see org.springframework.data.gemfire.client.Interest + */ + @SuppressWarnings("unchecked") + protected Interest[] registerInterests(boolean register) { + return (!register ? new Interest[0] : new Interest[] { + new Interest("ALL_KEYS", InterestResultPolicy.KEYS) + }); + } + + /** + * Returns a reference to the constructed GemFire cache {@link Region} used to store + * and manage Session state. + * + * @return the {@link Region} used to store and manage Session state. + * @throws Exception if the {@link Region} reference cannot be obtained. + * @see org.apache.geode.cache.Region + */ + public Region getObject() throws Exception { + return this.region; + } + + /** + * Returns the specific type of GemFire cache {@link Region} this factory creates when + * initialized or Region.class when uninitialized. + * + * @return the GemFire cache {@link Region} class type constructed by this factory. + * @see org.apache.geode.cache.Region + * @see java.lang.Class + */ + public Class getObjectType() { + return (this.region != null ? this.region.getClass() : Region.class); + } + + /** + * Returns true indicating the GemFire cache {@link Region} created by this factory is + * the sole instance. + * + * @return true to indicate the GemFire cache {@link Region} storing and managing + * Sessions is a Singleton. + */ + public boolean isSingleton() { + return true; + } + + /** + * Sets a reference to the Spring {@link BeanFactory} responsible for + * creating GemFire components. + * + * @param beanFactory reference to the Spring {@link BeanFactory} + * @throws IllegalArgumentException if the {@link BeanFactory} reference is null. + * @see org.springframework.beans.factory.BeanFactory + */ + public void setBeanFactory(BeanFactory beanFactory) { + Assert.notNull(beanFactory, "BeanFactory must not be null"); + this.beanFactory = beanFactory; + } + + /** + * Gets a reference to the Spring {@link BeanFactory} responsible for + * creating GemFire components. + * + * @return a reference to the Spring {@link BeanFactory} + * @throws IllegalStateException if the {@link BeanFactory} reference + * is null. + * @see org.springframework.beans.factory.BeanFactory + */ + protected BeanFactory getBeanFactory() { + Assert.state(this.beanFactory != null, "A reference to the BeanFactory was not properly configured"); + return this.beanFactory; + } + + /** + * Sets the {@link Region} data policy used by the GemFire cache client to manage + * Session state. + * + * @param clientRegionShortcut a {@link ClientRegionShortcut} to specify the client + * {@link Region} data management policy. + * @see org.apache.geode.cache.client.ClientRegionShortcut + */ + public void setClientRegionShortcut(ClientRegionShortcut clientRegionShortcut) { + this.clientRegionShortcut = clientRegionShortcut; + } + + /** + * Returns the {@link Region} data policy used by the GemFire cache client to manage + * Session state. Defaults to {@link ClientRegionShortcut#PROXY}. + * + * @return a {@link ClientRegionShortcut} specifying the client {@link Region} data + * management policy. + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration#DEFAULT_CLIENT_REGION_SHORTCUT + * @see org.apache.geode.cache.client.ClientRegionShortcut + */ + protected ClientRegionShortcut getClientRegionShortcut() { + return (this.clientRegionShortcut != null ? this.clientRegionShortcut : DEFAULT_CLIENT_REGION_SHORTCUT); + } + + /** + * Sets a reference to the GemFire cache used to construct the appropriate + * {@link Region}. + * + * @param gemfireCache a reference to the GemFire cache. + * @throws IllegalArgumentException if the {@link GemFireCache} reference is null. + */ + public void setGemfireCache(GemFireCache gemfireCache) { + Assert.notNull(gemfireCache, "GemFireCache must not be null"); + this.gemfireCache = gemfireCache; + } + + /** + * Returns a reference to the GemFire cache used to construct the appropriate + * {@link Region}. + * + * @return a reference to the GemFire cache. + * @throws IllegalStateException if the {@link GemFireCache} reference is null. + */ + protected GemFireCache getGemfireCache() { + Assert.state(this.gemfireCache != null, "A reference to the GemFireCache was not properly configured"); + return this.gemfireCache; + } + + /** + * Sets the name of the GemFire {@link Pool} used by the client Region for managing Sessions + * during cache operations involving the server. + * + * @param poolName the name of a GemFire {@link Pool}. + * @see Pool#getName() + */ + public void setPoolName(final String poolName) { + this.poolName = poolName; + } + + /** + * Returns the name of the GemFire {@link Pool} used by the client Region for managing Sessions + * during cache operations involving the server. + * + * @return the name of a GemFire {@link Pool}. + * @see Pool#getName() + */ + protected String getPoolName() { + return (StringUtils.hasText(this.poolName) ? this.poolName : DEFAULT_GEMFIRE_POOL_NAME); + } + + /** + * Sets the GemFire {@link RegionAttributes} used to configure the GemFire cache + * {@link Region} used to store and manage Session state. + * + * @param regionAttributes the GemFire {@link RegionAttributes} used to configure the + * GemFire cache {@link Region}. + * @see org.apache.geode.cache.RegionAttributes + */ + public void setRegionAttributes(RegionAttributes regionAttributes) { + this.regionAttributes = regionAttributes; + } + + /** + * Returns the GemFire {@link RegionAttributes} used to configure the GemFire cache + * {@link Region} used to store and manage Session state. + * + * @return the GemFire {@link RegionAttributes} used to configure the GemFire cache + * {@link Region}. + * @see org.apache.geode.cache.RegionAttributes + */ + protected RegionAttributes getRegionAttributes() { + return this.regionAttributes; + } + + /** + * Sets the name of the GemFire cache {@link Region} use to store and manage Session + * state. + * + * @param regionName a String specifying the name of the GemFire cache {@link Region}. + */ + public void setRegionName(final String regionName) { + this.regionName = regionName; + } + + /** + * Returns the configured name of the GemFire cache {@link Region} use to store and + * manage Session state. Defaults to "ClusteredSpringSessions" + * + * @return a String specifying the name of the GemFire cache {@link Region}. + * @see org.apache.geode.cache.Region#getName() + */ + protected String getRegionName() { + return (StringUtils.hasText(this.regionName) ? this.regionName : DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + } + + /** + * Sets the {@link Region} data policy used by the GemFire peer cache to manage + * Session state. + * + * @param serverRegionShortcut a {@link RegionShortcut} to specify the peer + * {@link Region} data management policy. + * @see org.apache.geode.cache.RegionShortcut + */ + public void setServerRegionShortcut(RegionShortcut serverRegionShortcut) { + this.serverRegionShortcut = serverRegionShortcut; + } + + /** + * Returns the {@link Region} data policy used by the GemFire peer cache to manage + * Session state. Defaults to {@link RegionShortcut#PARTITION}. + * + * @return a {@link RegionShortcut} specifying the peer {@link Region} data management + * policy. + * @see org.apache.geode.cache.RegionShortcut + */ + protected RegionShortcut getServerRegionShortcut() { + return (this.serverRegionShortcut != null ? this.serverRegionShortcut : DEFAULT_SERVER_REGION_SHORTCUT); + } +} diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.java new file mode 100644 index 0000000..dc59c3b --- /dev/null +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.java @@ -0,0 +1,175 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http.support; + +import javax.servlet.http.HttpSession; + +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.query.Index; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.data.gemfire.IndexFactoryBean; +import org.springframework.session.data.gemfire.support.GemFireUtils; +import org.springframework.util.ObjectUtils; + +/** + * The SessionAttributesIndexFactoryBean class is a Spring {@link FactoryBean} that creates a GemFire {@link Index} + * on the session attributes of the {@link HttpSession} object. + * + * @author John Blum + * @since 1.3.0 + * @see org.springframework.beans.factory.BeanFactoryAware + * @see org.springframework.beans.factory.BeanNameAware + * @see org.springframework.beans.factory.FactoryBean + * @see org.springframework.beans.factory.InitializingBean + * @see org.apache.geode.cache.query.Index + */ +public class SessionAttributesIndexFactoryBean implements FactoryBean, + InitializingBean, BeanFactoryAware, BeanNameAware { + + protected static final String[] DEFAULT_INDEXABLE_SESSION_ATTRIBUTES = {}; + + private BeanFactory beanFactory; + + private GemFireCache gemfireCache; + + private Index sessionAttributesIndex; + + private String beanName; + private String regionName; + + private String[] indexableSessionAttributes; + + /* (non-Javadoc) */ + public void afterPropertiesSet() throws Exception { + if (isIndexableSessionAttributesConfigured()) { + this.sessionAttributesIndex = newIndex(); + } + } + + /** + * Determines whether any indexable Session attributes were configured for this {@link FactoryBean}. + * + * @return a boolean value indicating whether any indexable Session attributes were configured + * for this {@link FactoryBean} + * @see #setIndexableSessionAttributes(String[]) + */ + protected boolean isIndexableSessionAttributesConfigured() { + return !ObjectUtils.isEmpty(this.indexableSessionAttributes); + } + + /** + * Constructs a GemFire {@link Index} over the attributes of the {@link HttpSession}. + * + * @return a GemFire {@link Index} over the {@link HttpSession} attributes. + * @throws Exception if an error occurs while initializing the GemFire {@link Index}. + * @see org.springframework.data.gemfire.IndexFactoryBean + */ + protected Index newIndex() throws Exception { + IndexFactoryBean indexFactory = new IndexFactoryBean(); + + indexFactory.setBeanFactory(this.beanFactory); + indexFactory.setBeanName(this.beanName); + indexFactory.setCache(this.gemfireCache); + indexFactory.setName("sessionAttributesIndex"); + indexFactory.setExpression(String.format("s.attributes[%1$s]", + getIndexableSessionAttributesAsGemFireIndexExpression())); + indexFactory.setFrom(String.format("%1$s s", GemFireUtils.toRegionPath(this.regionName))); + indexFactory.setOverride(true); + indexFactory.afterPropertiesSet(); + + return indexFactory.getObject(); + } + + /** + * Gets the names of all Session attributes that will be indexed by GemFire as single, comma-delimited + * String value constituting the Index expression of the Index definition. + * + * @return a String composed of all the named Session attributes for which GemFire + * will create an Index as an Index definition expression. If the indexable Session + * attributes were not configured, then the wildcard ("*") is returned. + * @see org.apache.geode.cache.query.Index#getIndexedExpression() + */ + protected String getIndexableSessionAttributesAsGemFireIndexExpression() { + StringBuilder builder = new StringBuilder(); + + for (String sessionAttribute : getIndexableSessionAttributes()) { + builder.append(builder.length() > 0 ? ", " : ""); + builder.append(String.format("'%s'", sessionAttribute)); + } + + String indexExpression = builder.toString(); + + return (indexExpression.isEmpty() ? "*" : indexExpression); + } + + /* (non-Javadoc) */ + public Index getObject() throws Exception { + return this.sessionAttributesIndex; + } + + /* (non-Javadoc) */ + public Class getObjectType() { + return (this.sessionAttributesIndex != null ? this.sessionAttributesIndex.getClass() : Index.class); + } + + /* (non-Javadoc) */ + public boolean isSingleton() { + return true; + } + + /* (non-Javadoc) */ + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + this.beanFactory = beanFactory; + } + + /* (non-Javadoc) */ + public void setBeanName(String beanName) { + this.beanName = beanName; + } + + /* (non-Javadoc) */ + public void setGemFireCache(GemFireCache gemfireCache) { + this.gemfireCache = gemfireCache; + } + + /* (non-Javadoc) */ + public void setIndexableSessionAttributes(String[] indexableSessionAttributes) { + this.indexableSessionAttributes = indexableSessionAttributes; + } + + /* (non-Javadoc) */ + protected String[] getIndexableSessionAttributes() { + return (this.indexableSessionAttributes != null ? this.indexableSessionAttributes + : DEFAULT_INDEXABLE_SESSION_ATTRIBUTES); + } + + /* (non-Javadoc) */ + public void setRegionName(String regionName) { + this.regionName = regionName; + } + + /* (non-Javadoc) */ + protected String getRegionName() { + return this.regionName; + } +} diff --git a/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/support/GemFireUtils.java b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/support/GemFireUtils.java new file mode 100644 index 0000000..cd54af0 --- /dev/null +++ b/spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/support/GemFireUtils.java @@ -0,0 +1,170 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.support; + +import java.io.Closeable; +import java.io.IOException; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.ClientRegionShortcut; +import org.apache.geode.internal.cache.GemFireCacheImpl; + +/** + * GemFireUtils is an abstract, extensible utility class for working with GemFire types + * and functionality and is used by Spring Session's GemFire adapter support classes. + * + * @author John Blum + * @since 1.1.0 + */ +public abstract class GemFireUtils { + + /** + * Null-safe method to close the given {@link Closeable} object. + * + * @param obj the {@link Closeable} object to close. + * @return true if the {@link Closeable} object is not null and was successfully + * closed, otherwise return false. + * @see java.io.Closeable + */ + public static boolean close(Closeable obj) { + if (obj != null) { + try { + obj.close(); + return true; + } + catch (IOException ignore) { + } + } + + return false; + } + + /** + * Determines whether the GemFire cache is a client. + * + * @param gemFireCache a reference to the GemFire cache. + * @return a boolean value indicating whether the GemFire cache is a client. + * @see org.apache.geode.cache.client.ClientCache + * @see org.apache.geode.cache.GemFireCache + */ + public static boolean isClient(GemFireCache gemFireCache) { + boolean client = (gemFireCache instanceof ClientCache); + client &= (!(gemFireCache instanceof GemFireCacheImpl) || ((GemFireCacheImpl) gemFireCache).isClient()); + return client; + } + + /** + * Determines whether the GemFire cache is a peer. + * + * @param gemFireCache a reference to the GemFire cache. + * @return a boolean value indicating whether the GemFire cache is a peer. + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.GemFireCache + */ + public static boolean isPeer(GemFireCache gemFireCache) { + return (gemFireCache instanceof Cache && !isClient(gemFireCache)); + } + + /** + * Determines whether the given {@link ClientRegionShortcut} is local only. + * + * @param shortcut the ClientRegionShortcut to evaluate. + * @return a boolean value indicating if the {@link ClientRegionShortcut} is local or + * not. + * @see org.apache.geode.cache.client.ClientRegionShortcut + */ + public static boolean isLocal(ClientRegionShortcut shortcut) { + switch (shortcut) { + case LOCAL: + case LOCAL_HEAP_LRU: + case LOCAL_OVERFLOW: + case LOCAL_PERSISTENT: + case LOCAL_PERSISTENT_OVERFLOW: + return true; + default: + return false; + } + } + + /** + * Determines whether the client {@link ClientRegionShortcut} is a proxy-based + * shortcut. NOTE: "proxy"-based Regions keep no local state. + * + * @param shortcut the client {@link ClientRegionShortcut} to evaluate. + * @return a boolean value indicating whether the client {@link ClientRegionShortcut} + * refers to a proxy-based shortcut. + * @see org.apache.geode.cache.client.ClientRegionShortcut + */ + public static boolean isProxy(ClientRegionShortcut shortcut) { + switch (shortcut) { + case PROXY: + return true; + default: + return false; + } + } + + /** + * Determines whether the given {@link Region} is a PROXY, which would be indicated by the {@link Region} + * having a {@link DataPolicy} of {@link DataPolicy#EMPTY}. + * + * @param region {@link Region} to evaluate. + * @return a boolean value indicating whether the {@link Region} is a PROXY. + * @see org.apache.geode.cache.DataPolicy + * @see org.apache.geode.cache.Region + */ + public static boolean isProxy(Region region) { + return DataPolicy.EMPTY.equals(region.getAttributes().getDataPolicy()); + } + + /** + * Determines whether the peer {@link RegionShortcut} is a proxy-based shortcut. NOTE: + * "proxy"-based Regions keep no local state. + * + * @param shortcut the peer {@link RegionShortcut} to evaluate. + * @return a boolean value indicating whether the peer {@link RegionShortcut} refers + * to a proxy-based shortcut. + * @see org.apache.geode.cache.RegionShortcut + */ + public static boolean isProxy(RegionShortcut shortcut) { + switch (shortcut) { + case PARTITION_PROXY: + case PARTITION_PROXY_REDUNDANT: + case REPLICATE_PROXY: + return true; + default: + return false; + } + } + + /** + * Converts a {@link Region} name to a {@link Region} path. + * + * @param regionName a String specifying the name of the {@link Region}. + * @return a String path for the given {@link Region} by name. + * @see org.apache.geode.cache.Region#getFullPath() + * @see org.apache.geode.cache.Region#getName() + */ + public static String toRegionPath(String regionName) { + return String.format("%1$s%2$s", Region.SEPARATOR, regionName); + } +} diff --git a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.java b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.java new file mode 100644 index 0000000..a2fc8d4 --- /dev/null +++ b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.java @@ -0,0 +1,1909 @@ +/* + * Copyright 2014-2017 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 org.springframework.session.data.gemfire; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import edu.umd.cs.mtc.MultithreadedTestCase; +import edu.umd.cs.mtc.TestFramework; + +import org.apache.commons.logging.Log; +import org.apache.geode.cache.AttributesMutator; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.EntryEvent; +import org.apache.geode.cache.Operation; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; + +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.data.gemfire.GemfireOperations; +import org.springframework.data.gemfire.GemfireTemplate; +import org.springframework.session.ExpiringSession; +import org.springframework.session.FindByIndexNameSessionRepository; +import org.springframework.session.Session; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; +import org.springframework.session.events.AbstractSessionEvent; +import org.springframework.session.events.SessionCreatedEvent; +import org.springframework.session.events.SessionDeletedEvent; +import org.springframework.session.events.SessionDestroyedEvent; +import org.springframework.session.events.SessionExpiredEvent; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.ArgumentMatchers.same; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willAnswer; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +/** + * Unit tests for {@link AbstractGemFireOperationsSessionRepository}. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.mockito.Mock + * @see org.mockito.Mockito + * @see org.mockito.junit.MockitoJUnitRunner + * @see org.mockito.Spy + * @see org.springframework.data.gemfire.GemfireOperations + * @see org.springframework.session.ExpiringSession + * @see org.springframework.session.Session + * @see org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepository + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @see org.apache.geode.cache.Region + * @see edu.umd.cs.mtc.MultithreadedTestCase + * @see edu.umd.cs.mtc.TestFramework + */ +@RunWith(MockitoJUnitRunner.class) +public class AbstractGemFireOperationsSessionRepositoryTest { + + protected static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 600; + + private AbstractGemFireOperationsSessionRepository sessionRepository; + + @Mock + private ExpiringSession mockExpiringSession; + + @Mock + private Log mockLog; + + @Before + public void setup() { + this.sessionRepository = spy(new TestGemFireOperationsSessionRepository(new GemfireTemplate()) { + @Override + Log newLogger() { + return AbstractGemFireOperationsSessionRepositoryTest.this.mockLog; + } + }); + } + + protected static Set asSet(E... elements) { + Set set = new HashSet(elements.length); + Collections.addAll(set, elements); + return set; + } + + @SuppressWarnings("unchecked") + protected EntryEvent mockEntryEvent(Operation operation, K key, V oldValue, V newValue) { + EntryEvent mockEntryEvent = mock(EntryEvent.class); + + given(mockEntryEvent.getOperation()).willReturn(operation); + given(mockEntryEvent.getKey()).willReturn(key); + given(mockEntryEvent.getOldValue()).willReturn(oldValue); + given(mockEntryEvent.getNewValue()).willReturn(newValue); + + return mockEntryEvent; + } + + @SuppressWarnings("unchecked") + protected Region mockRegion(String name, DataPolicy dataPolicy) { + Region mockRegion = mock(Region.class, name); + RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); + + given(mockRegion.getAttributes()).willReturn(mockRegionAttributes); + given(mockRegionAttributes.getDataPolicy()).willReturn(dataPolicy); + + return mockRegion; + } + + protected ExpiringSession mockSession(String sessionId, long creationAndLastAccessedTime, + int maxInactiveIntervalInSeconds) { + + return mockSession(sessionId, creationAndLastAccessedTime, creationAndLastAccessedTime, + maxInactiveIntervalInSeconds); + } + + protected ExpiringSession mockSession(String sessionId, long creationTime, long lastAccessedTime, + int maxInactiveIntervalInSeconds) { + + ExpiringSession mockSession = mock(ExpiringSession.class, sessionId); + + given(mockSession.getId()).willReturn(sessionId); + given(mockSession.getCreationTime()).willReturn(creationTime); + given(mockSession.getLastAccessedTime()).willReturn(lastAccessedTime); + given(mockSession.getMaxInactiveIntervalInSeconds()).willReturn(maxInactiveIntervalInSeconds); + + return mockSession; + } + + protected AbstractGemFireOperationsSessionRepository withRegion( + AbstractGemFireOperationsSessionRepository sessionRepository, Region region) { + + ((GemfireTemplate) sessionRepository.getTemplate()).setRegion(region); + + return sessionRepository; + } + + @Test(expected = IllegalArgumentException.class) + public void constructGemFireOperationsSessionRepositoryWithNullTemplate() { + try { + new TestGemFireOperationsSessionRepository(null); + } + catch (IllegalArgumentException expected) { + assertThat(expected).hasMessage("GemfireOperations must not be null"); + assertThat(expected).hasNoCause(); + + throw expected; + } + } + + @Test + @SuppressWarnings("unchecked") + public void gemfireOperationsSessionRepositoryIsProperlyConstructedAndInitialized() throws Exception { + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + AttributesMutator mockAttributesMutator = mock(AttributesMutator.class); + Region mockRegion = mock(Region.class); + + given(mockRegion.getFullPath()).willReturn("/Example"); + given(mockRegion.getAttributesMutator()).willReturn(mockAttributesMutator); + + GemfireTemplate template = new GemfireTemplate(mockRegion); + + AbstractGemFireOperationsSessionRepository sessionRepository = + new TestGemFireOperationsSessionRepository(template); + + ApplicationEventPublisher applicationEventPublisher = sessionRepository.getApplicationEventPublisher(); + + assertThat(applicationEventPublisher).isNotNull(); + assertThat(sessionRepository.getFullyQualifiedRegionName()).isNull(); + assertThat(sessionRepository.getMaxInactiveIntervalInSeconds()) + .isEqualTo(GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS); + assertThat(sessionRepository.getTemplate()).isSameAs(template); + + sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + sessionRepository.setMaxInactiveIntervalInSeconds(300); + sessionRepository.afterPropertiesSet(); + + assertThat(sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + assertThat(sessionRepository.getFullyQualifiedRegionName()).isEqualTo("/Example"); + assertThat(sessionRepository.getMaxInactiveIntervalInSeconds()).isEqualTo(300); + assertThat(sessionRepository.getTemplate()).isSameAs(template); + + verify(mockRegion, times(1)).getAttributesMutator(); + verify(mockRegion, times(1)).getFullPath(); + verify(mockAttributesMutator, times(1)).addCacheListener(same(sessionRepository)); + } + + @Test + public void maxInactiveIntervalInSecondsAllowsNegativeValuesAndExtremelyLargeValues() { + assertThat(this.sessionRepository.getMaxInactiveIntervalInSeconds()) + .isEqualTo(GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS); + + this.sessionRepository.setMaxInactiveIntervalInSeconds(-1); + + assertThat(this.sessionRepository.getMaxInactiveIntervalInSeconds()).isEqualTo(-1); + + this.sessionRepository.setMaxInactiveIntervalInSeconds(Integer.MIN_VALUE); + + assertThat(this.sessionRepository.getMaxInactiveIntervalInSeconds()).isEqualTo(Integer.MIN_VALUE); + + this.sessionRepository.setMaxInactiveIntervalInSeconds(1024000); + + assertThat(this.sessionRepository.getMaxInactiveIntervalInSeconds()).isEqualTo(1024000); + + this.sessionRepository.setMaxInactiveIntervalInSeconds(Integer.MAX_VALUE); + + assertThat(this.sessionRepository.getMaxInactiveIntervalInSeconds()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void isCreateWithCreateOperationReturnsTrue() { + EntryEvent mockEvent = + this.mockEntryEvent(Operation.CREATE, "123", null, + this.mockExpiringSession); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + assertThat(this.sessionRepository.isCreate(mockEvent)).isTrue(); + + verify(mockEvent, times(1)).getOperation(); + verify(mockEvent, times(1)).getKey(); + verify(mockEvent, times(1)).getNewValue(); + verify(mockEvent, never()).getOldValue(); + } + + @Test + public void isCreateWithCreateOperationAndNonProxyRegionReturnsTrue() { + EntryEvent mockEvent = + this.mockEntryEvent(Operation.CREATE, "123", null, null); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.NORMAL)); + + this.sessionRepository.remember("123"); + + assertThat(this.sessionRepository.isCreate(mockEvent)).isTrue(); + + verify(mockEvent, times(1)).getOperation(); + verify(mockEvent, never()).getKey(); + verify(mockEvent, times(1)).getNewValue(); + verify(mockEvent, never()).getOldValue(); + } + + @Test + public void isCreateWithLocalLoadCreateOperationReturnsFalse() { + EntryEvent mockEvent = + this.mockEntryEvent(Operation.LOCAL_LOAD_CREATE, "123", null, + this.mockExpiringSession); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + assertThat(this.sessionRepository.isCreate(mockEvent)).isFalse(); + + verify(mockEvent, times(1)).getOperation(); + verify(mockEvent, never()).getKey(); + verify(mockEvent, never()).getNewValue(); + verify(mockEvent, never()).getOldValue(); + } + + @Test + public void isCreateWithUpdateOperationReturnsFalse() { + EntryEvent mockEvent = + this.mockEntryEvent(Operation.UPDATE, "123", null, + this.mockExpiringSession); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + assertThat(this.sessionRepository.isCreate(mockEvent)).isFalse(); + + verify(mockEvent, times(1)).getOperation(); + verify(mockEvent, never()).getKey(); + verify(mockEvent, never()).getNewValue(); + verify(mockEvent, never()).getOldValue(); + } + + @Test + public void isCreateWithRememberedSessionIdReturnsFalse() { + EntryEvent mockEvent = + this.mockEntryEvent(Operation.CREATE, "123", null, + this.mockExpiringSession); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + this.sessionRepository.remember("123"); + + assertThat(this.sessionRepository.isCreate(mockEvent)).isFalse(); + + verify(mockEvent, times(1)).getOperation(); + verify(mockEvent, times(1)).getKey(); + verify(mockEvent, never()).getNewValue(); + verify(mockEvent, never()).getOldValue(); + } + + @Test + public void isCreateWithTombstoneReturnsFalse() { + EntryEvent mockEvent = + this.mockEntryEvent(Operation.CREATE, "123", null, + new Tombstone()); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + assertThat(this.sessionRepository.isCreate(mockEvent)).isFalse(); + + verify(mockEvent, times(1)).getOperation(); + verify(mockEvent, times(1)).getKey(); + verify(mockEvent, times(1)).getNewValue(); + verify(mockEvent, never()).getOldValue(); + } + + @Test + @SuppressWarnings("unchecked") + public void afterCreateWithSessionPublishesSessionCreatedEvent() { + final String sessionId = "abc123"; + final ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.getId()).willReturn(sessionId); + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionCreatedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isEqualTo(mockSession); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = + this.mockEntryEvent(Operation.CREATE, sessionId, null, mockSession); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterCreate(mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getOperation(); + verify(mockEntryEvent, times(2)).getKey(); + verify(mockEntryEvent, times(2)).getNewValue(); + verify(mockEntryEvent, never()).getOldValue(); + verify(mockSession, times(1)).getId(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionCreatedEvent.class)); + } + + @Test + @SuppressWarnings("unchecked") + public void afterCreateWithSessionIdPublishesSessionCreatedEvent() { + final String sessionId = "abc123"; + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionCreatedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = + this.mockEntryEvent(Operation.CREATE, sessionId, null, null); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterCreate(mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getOperation(); + verify(mockEntryEvent, times(2)).getKey(); + verify(mockEntryEvent, times(2)).getNewValue(); + verify(mockEntryEvent, never()).getOldValue(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionCreatedEvent.class)); + } + + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void afterCreateForDestroyOperationDoesNotPublishSessionCreatedEvent() { + Region mockRegion = mockRegion("Example", DataPolicy.EMPTY); + + TestGemFireOperationsSessionRepository sessionRepository = + new TestGemFireOperationsSessionRepository(new GemfireTemplate(mockRegion)) { + @Override + protected void handleCreated(String sessionId, ExpiringSession session) { + fail("handleCreated(..) should not have been called"); + } + }; + + EntryEvent mockEntryEvent = + mockEntryEvent(Operation.DESTROY, null, null, null); + + sessionRepository.afterCreate(mockEntryEvent); + + verify(mockEntryEvent, times(1)).getOperation(); + verify(mockEntryEvent, never()).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, never()).getOldValue(); + } + + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void afterCreateForModificationDoesNotPublishSessionCreatedEvent() { + Region mockRegion = mockRegion("Example", DataPolicy.EMPTY); + + TestGemFireOperationsSessionRepository sessionRepository = + new TestGemFireOperationsSessionRepository(new GemfireTemplate(mockRegion)) { + @Override + protected void handleCreated(String sessionId, ExpiringSession session) { + fail("handleCreated(..) should not have been called"); + } + }; + + EntryEvent mockEntryEvent = + this.mockEntryEvent(Operation.CREATE, "123", null, null); + + sessionRepository.remember("123"); + sessionRepository.afterCreate(mockEntryEvent); + + verify(mockEntryEvent, times(1)).getOperation(); + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, never()).getOldValue(); + } + + @Test + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void afterCreateForNonSessionTypeDoesNotPublishSessionCreatedEvent() { + Region mockRegion = mockRegion("Example", DataPolicy.EMPTY); + + TestGemFireOperationsSessionRepository sessionRepository = + new TestGemFireOperationsSessionRepository(new GemfireTemplate(mockRegion)) { + @Override + protected void handleCreated(String sessionId, ExpiringSession session) { + fail("handleCreated(..) should not have been called"); + } + }; + + EntryEvent mockEntryEvent = mockEntryEvent(Operation.CREATE, null, null, new Tombstone()); + + sessionRepository.afterCreate((EntryEvent) mockEntryEvent); + + verify(mockEntryEvent, times(1)).getOperation(); + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, times(1)).getNewValue(); + verify(mockEntryEvent, never()).getOldValue(); + } + + @Test + @SuppressWarnings("unchecked") + public void afterDestroyWithSessionPublishesSessionDestroyedEvent() { + final String sessionId = "def456"; + final ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.getId()).willReturn(sessionId); + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDestroyedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isEqualTo(mockSession); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = + this.mockEntryEvent(Operation.DESTROY, sessionId, mockSession, null); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterDestroy(mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, times(1)).getOldValue(); + verify(mockSession, times(1)).getId(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDestroyedEvent.class)); + } + + @Test + @SuppressWarnings("unchecked") + public void afterDestroyWithSessionIdPublishesSessionDestroyedEvent() { + final String sessionId = "def456"; + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDestroyedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = + this.mockEntryEvent(Operation.DESTROY, sessionId, null, null); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterDestroy(mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, times(1)).getOldValue(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDestroyedEvent.class)); + } + + @Test + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void afterDestroyWithNonSessionTypePublishesSessionDestroyedEventWithSessionId() { + final String sessionId = "def456"; + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDestroyedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = mockEntryEvent(Operation.DESTROY, sessionId, new Tombstone(), null); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterDestroy((EntryEvent) mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, times(1)).getOldValue(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDestroyedEvent.class)); + } + + @Test + @SuppressWarnings("unchecked") + public void afterInvalidateWithSessionPublishesSessionExpiredEvent() { + final String sessionId = "ghi789"; + final ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.getId()).willReturn(sessionId); + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionExpiredEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isEqualTo(mockSession); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = + this.mockEntryEvent(Operation.INVALIDATE, sessionId, mockSession, null); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterInvalidate(mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, times(1)).getOldValue(); + verify(mockSession, times(1)).getId(); + verify(mockApplicationEventPublisher, times(1)).publishEvent(isA(SessionExpiredEvent.class)); + } + + @Test + @SuppressWarnings("unchecked") + public void afterInvalidateWithSessionIdPublishesSessionExpiredEvent() { + final String sessionId = "ghi789"; + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionExpiredEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = + this.mockEntryEvent(Operation.INVALIDATE, sessionId, null, null); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterInvalidate(mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, times(1)).getOldValue(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionExpiredEvent.class)); + } + + @Test + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void afterInvalidateWithNonSessionTypePublishesSessionExpiredEventWithSessionId() { + final String sessionId = "ghi789"; + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionExpiredEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockEntryEvent = mock(EntryEvent.class); + + given(mockEntryEvent.getKey()).willReturn(sessionId); + given(mockEntryEvent.getOldValue()).willReturn(new Tombstone()); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterInvalidate((EntryEvent) mockEntryEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockEntryEvent, times(1)).getKey(); + verify(mockEntryEvent, never()).getNewValue(); + verify(mockEntryEvent, times(1)).getOldValue(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionExpiredEvent.class)); + } + + @Test + public void sessionCreateCreateExpireRecreatePublishesSessionEventsCreateExpireCreate() { + final String sessionId = "123456789"; + final ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.getId()).willReturn(sessionId); + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + int index = 0; + + Class[] expectedSessionTypes = { + SessionCreatedEvent.class, SessionExpiredEvent.class, SessionCreatedEvent.class + }; + + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(this.expectedSessionTypes[this.index++]); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isEqualTo(mockSession); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + EntryEvent mockCreateEvent = + this.mockEntryEvent(Operation.CREATE, sessionId, null, mockSession); + + EntryEvent mockExpireEvent = + this.mockEntryEvent(Operation.INVALIDATE, sessionId, mockSession, null); + + withRegion(this.sessionRepository, mockRegion("Example", DataPolicy.EMPTY)); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.afterCreate(mockCreateEvent); + this.sessionRepository.afterCreate(mockCreateEvent); + this.sessionRepository.afterInvalidate(mockExpireEvent); + this.sessionRepository.afterCreate(mockCreateEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockCreateEvent, times(3)).getOperation(); + verify(mockCreateEvent, times(5)).getKey(); + verify(mockCreateEvent, times(4)).getNewValue(); + verify(mockCreateEvent, never()).getOldValue(); + verify(mockExpireEvent, never()).getOperation(); + verify(mockExpireEvent, times(1)).getKey(); + verify(mockExpireEvent, never()).getNewValue(); + verify(mockExpireEvent, times(1)).getOldValue(); + verify(mockSession, times(3)).getId(); + verify(mockApplicationEventPublisher, times(2)) + .publishEvent(isA(SessionCreatedEvent.class)); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionExpiredEvent.class)); + } + + @Test + public void deleteSessionCallsDeleteSessionId() { + Session mockSession = mock(Session.class); + + doNothing().when(this.sessionRepository).delete(anyString()); + given(mockSession.getId()).willReturn("2"); + + assertThat(this.sessionRepository.delete(mockSession)).isNull(); + + verify(this.sessionRepository, times(1)).delete(eq("2")); + } + + @Test + public void handleDeletedWithSessionPublishesSessionDeletedEvent() { + final String sessionId = "abc123"; + final ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.getId()).willReturn(sessionId); + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDeletedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isEqualTo(mockSession); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.handleDeleted(sessionId, mockSession); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockSession, times(1)).getId(); + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDeletedEvent.class)); + } + + @Test + public void handleDeletedWithSessionIdPublishesSessionDeletedEvent() { + final String sessionId = "abc123"; + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDeletedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isEqualTo(AbstractGemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(sessionId); + + return null; + } + }).given(mockApplicationEventPublisher).publishEvent(isA(ApplicationEvent.class)); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.handleDeleted(sessionId, null); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDeletedEvent.class)); + } + + @Test + public void publishEventHandlesThrowable() { + ApplicationEvent mockApplicationEvent = mock(ApplicationEvent.class); + + ApplicationEventPublisher mockApplicationEventPublisher = mock(ApplicationEventPublisher.class); + + willThrow(new IllegalStateException("test")).given(mockApplicationEventPublisher) + .publishEvent(any(ApplicationEvent.class)); + + this.sessionRepository.setApplicationEventPublisher(mockApplicationEventPublisher); + this.sessionRepository.publishEvent(mockApplicationEvent); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(mockApplicationEventPublisher); + + verify(mockApplicationEventPublisher, times(1)).publishEvent(eq(mockApplicationEvent)); + verify(this.mockLog, times(1)) + .error(eq(String.format("Error occurred publishing event [%s]", mockApplicationEvent)), + isA(IllegalStateException.class)); + } + + @Test + public void touchSetsLastAccessedTime() { + ExpiringSession mockSession = mock(ExpiringSession.class); + + assertThat(this.sessionRepository.touch(mockSession)).isSameAs(mockSession); + + verify(mockSession, times(1)).setLastAccessedTime(anyLong()); + } + + @Test + public void constructGemFireSessionWithDefaultInitialization() { + long beforeOrAtCreationTime = System.currentTimeMillis(); + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession(); + + assertThat(session.getId()).isNotNull(); + assertThat(session.getCreationTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(session.getLastAccessedTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(0); + assertThat(session.getAttributeNames()).isNotNull(); + assertThat(session.getAttributeNames()).isEmpty(); + } + + @Test + public void constructGemFireSessionWithId() { + long beforeOrAtCreationTime = System.currentTimeMillis(); + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession("1"); + + assertThat(session.getId()).isEqualTo("1"); + assertThat(session.getCreationTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(session.getLastAccessedTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(0); + assertThat(session.getAttributeNames()).isNotNull(); + assertThat(session.getAttributeNames()).isEmpty(); + } + + @Test(expected = IllegalArgumentException.class) + public void constructGemFireSessionWithUnspecifiedId() { + try { + new AbstractGemFireOperationsSessionRepository.GemFireSession(" "); + } + catch (IllegalArgumentException expected) { + assertThat(expected).hasMessage("ID must be specified"); + assertThat(expected).hasNoCause(); + + throw expected; + } + } + + @Test + public void constructGemFireSessionWithSession() { + long expectedCreationTime = 1L; + long expectedLastAccessTime = 2L; + + ExpiringSession mockSession = + mockSession("2", expectedCreationTime, expectedLastAccessTime, MAX_INACTIVE_INTERVAL_IN_SECONDS); + + Set expectedAttributedNames = asSet("attrOne", "attrTwo"); + + given(mockSession.getAttributeNames()).willReturn(expectedAttributedNames); + given(mockSession.getAttribute(eq("attrOne"))).willReturn("testOne"); + given(mockSession.getAttribute(eq("attrTwo"))).willReturn("testTwo"); + + AbstractGemFireOperationsSessionRepository.GemFireSession gemfireSession = + new AbstractGemFireOperationsSessionRepository.GemFireSession(mockSession); + + assertThat(gemfireSession.getId()).isEqualTo("2"); + assertThat(gemfireSession.getCreationTime()).isEqualTo(expectedCreationTime); + assertThat(gemfireSession.getLastAccessedTime()).isEqualTo(expectedLastAccessTime); + assertThat(gemfireSession.getMaxInactiveIntervalInSeconds()).isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + assertThat(gemfireSession.getAttributeNames()).isEqualTo(expectedAttributedNames); + assertThat(gemfireSession.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(gemfireSession.getAttribute("attrTwo")).isEqualTo("testTwo"); + + verify(mockSession, times(1)).getId(); + verify(mockSession, times(1)).getCreationTime(); + verify(mockSession, times(1)).getLastAccessedTime(); + verify(mockSession, times(1)).getMaxInactiveIntervalInSeconds(); + verify(mockSession, times(1)).getAttributeNames(); + verify(mockSession, times(1)).getAttribute(eq("attrOne")); + verify(mockSession, times(1)).getAttribute(eq("attrTwo")); + } + + @Test(expected = IllegalArgumentException.class) + public void constructGemFireSessionWithNullSession() { + try { + new AbstractGemFireOperationsSessionRepository.GemFireSession((ExpiringSession) null); + } + catch (IllegalArgumentException expected) { + assertThat(expected).hasMessage("The ExpiringSession to copy cannot be null"); + assertThat(expected).hasNoCause(); + + throw expected; + } + } + + @Test + public void createNewGemFireSession() { + long beforeOrAtCreationTime = System.currentTimeMillis(); + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + AbstractGemFireOperationsSessionRepository.GemFireSession.create(120); + + assertThat(session).isNotNull(); + assertThat(session.getId()).isNotNull(); + assertThat(session.getCreationTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(session.getLastAccessedTime()).isEqualTo(session.getCreationTime()); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(120); + assertThat(session.getAttributeNames()).isNotNull(); + assertThat(session.getAttributeNames().isEmpty()).isTrue(); + } + + @Test + public void fromExistingSession() { + long expectedCreationTime = 1L; + long expectedLastAccessedTime = 2L; + + ExpiringSession mockSession = mockSession("4", expectedCreationTime, expectedLastAccessedTime, + MAX_INACTIVE_INTERVAL_IN_SECONDS); + + given(mockSession.getAttributeNames()).willReturn(Collections.emptySet()); + + AbstractGemFireOperationsSessionRepository.GemFireSession gemfireSession = + AbstractGemFireOperationsSessionRepository.GemFireSession.from(mockSession); + + assertThat(gemfireSession).isNotNull(); + assertThat(gemfireSession.getId()).isEqualTo("4"); + assertThat(gemfireSession.getCreationTime()).isEqualTo(expectedCreationTime); + assertThat(gemfireSession.getLastAccessedTime()).isEqualTo(expectedLastAccessedTime); + assertThat(gemfireSession.getMaxInactiveIntervalInSeconds()).isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + assertThat(gemfireSession.getAttributeNames()).isNotNull(); + assertThat(gemfireSession.getAttributeNames().isEmpty()).isTrue(); + + verify(mockSession, times(1)).getId(); + verify(mockSession, times(1)).getCreationTime(); + verify(mockSession, times(1)).getLastAccessedTime(); + verify(mockSession, times(1)).getMaxInactiveIntervalInSeconds(); + verify(mockSession, times(1)).getAttributeNames(); + verify(mockSession, never()).getAttribute(anyString()); + } + + @Test + public void fromExistingGemFireSessionIsGemFireSession() { + AbstractGemFireOperationsSessionRepository.GemFireSession gemfireSession = + AbstractGemFireOperationsSessionRepository.GemFireSession.create(300); + + AbstractGemFireOperationsSessionRepository.GemFireSession fromGemFireSession = + AbstractGemFireOperationsSessionRepository.GemFireSession.from(gemfireSession); + + assertThat(fromGemFireSession).isSameAs(gemfireSession); + } + + @Test + public void setGetAndRemoveAttribute() { + AbstractGemFireOperationsSessionRepository.GemFireSession session = + AbstractGemFireOperationsSessionRepository.GemFireSession.create(60); + + assertThat(session).isNotNull(); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(60); + assertThat(session.getAttributeNames().isEmpty()).isTrue(); + + session.setAttribute("attrOne", "testOne"); + + assertThat(session.getAttributeNames()).isEqualTo(asSet("attrOne")); + assertThat(session.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(session.getAttribute("attrTwo")).isNull(); + + session.setAttribute("attrTwo", "testTwo"); + + assertThat(session.getAttributeNames()).isEqualTo(asSet("attrOne", "attrTwo")); + assertThat(session.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(session.getAttribute("attrTwo")).isEqualTo("testTwo"); + + session.setAttribute("attrTwo", null); + + assertThat(session.getAttributeNames()).isEqualTo(asSet("attrOne")); + assertThat(session.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(session.getAttribute("attrTwo")).isNull(); + + session.removeAttribute("attrOne"); + + assertThat(session.getAttribute("attrOne")).isNull(); + assertThat(session.getAttribute("attrTwo")).isNull(); + assertThat(session.getAttributeNames().isEmpty()).isTrue(); + } + + @Test + public void isExpiredIsFalseWhenMaxInactiveIntervalIsNegative() { + final int expectedMaxInactiveIntervalInSeconds = -1; + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + AbstractGemFireOperationsSessionRepository.GemFireSession.create(expectedMaxInactiveIntervalInSeconds); + + assertThat(session).isNotNull(); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + assertThat(session.isExpired()).isFalse(); + } + + @Test + public void isExpiredIsFalseWhenSessionIsActive() { + final int expectedMaxInactiveIntervalInSeconds = (int) TimeUnit.HOURS.toSeconds(2); + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + AbstractGemFireOperationsSessionRepository.GemFireSession.create(expectedMaxInactiveIntervalInSeconds); + + assertThat(session).isNotNull(); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + + final long now = System.currentTimeMillis(); + + session.setLastAccessedTime(now); + + assertThat(session.getLastAccessedTime()).isEqualTo(now); + assertThat(session.isExpired()).isFalse(); + } + + @Test + public void isExpiredIsTrueWhenSessionIsInactive() { + final int expectedMaxInactiveIntervalInSeconds = 60; + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + AbstractGemFireOperationsSessionRepository.GemFireSession.create(expectedMaxInactiveIntervalInSeconds); + + assertThat(session).isNotNull(); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + + final long twoHoursAgo = (System.currentTimeMillis() - TimeUnit.HOURS.toMillis(2)); + + session.setLastAccessedTime(twoHoursAgo); + + assertThat(session.getLastAccessedTime()).isEqualTo(twoHoursAgo); + assertThat(session.isExpired()).isTrue(); + } + + @Test + public void setAndGetPrincipalName() { + AbstractGemFireOperationsSessionRepository.GemFireSession session = + AbstractGemFireOperationsSessionRepository.GemFireSession.create(0); + + assertThat(session).isNotNull(); + assertThat(session.getPrincipalName()).isNull(); + + session.setPrincipalName("jblum"); + + assertThat(session.getPrincipalName()).isEqualTo("jblum"); + assertThat(session.getAttributeNames()) + .isEqualTo(asSet(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME)); + assertThat(session.getAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME)) + .isEqualTo("jblum"); + + session.setAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, "rwinch"); + + assertThat(session.getAttributeNames()) + .isEqualTo(asSet(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME)); + assertThat(session.getAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME)) + .isEqualTo("rwinch"); + assertThat(session.getPrincipalName()).isEqualTo("rwinch"); + + session.removeAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME); + + assertThat(session.getPrincipalName()).isNull(); + } + + @Test + public void sessionToData() throws Exception { + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession("1") { + @Override + void writeObject(Object obj, DataOutput out) throws IOException { + assertThat(obj) + .isInstanceOf(AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes.class); + assertThat(out).isNotNull(); + } + }; + + session.setLastAccessedTime(123L); + session.setMaxInactiveIntervalInSeconds(MAX_INACTIVE_INTERVAL_IN_SECONDS); + session.setPrincipalName("jblum"); + + DataOutput mockDataOutput = mock(DataOutput.class); + + session.toData(mockDataOutput); + + verify(mockDataOutput, times(1)).writeUTF(eq("1")); + verify(mockDataOutput, times(1)).writeLong(eq(session.getCreationTime())); + verify(mockDataOutput, times(1)).writeLong(eq(session.getLastAccessedTime())); + verify(mockDataOutput, times(1)) + .writeInt(eq(session.getMaxInactiveIntervalInSeconds())); + verify(mockDataOutput, times(1)).writeInt(eq("jblum".length())); + verify(mockDataOutput, times(1)).writeUTF(eq(session.getPrincipalName())); + } + + @Test + public void sessionFromData() throws Exception { + long expectedCreationTime = 1L; + long expectedLastAccessedTime = 2L; + + int expectedMaxInactiveIntervalInSeconds = (int) TimeUnit.HOURS.toSeconds(6); + + final String expectedPrincipalName = "jblum"; + + DataInput mockDataInput = mock(DataInput.class); + + given(mockDataInput.readUTF()).willReturn("2").willReturn(expectedPrincipalName); + given(mockDataInput.readLong()).willReturn(expectedCreationTime).willReturn(expectedLastAccessedTime); + given(mockDataInput.readInt()).willReturn(expectedMaxInactiveIntervalInSeconds); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession("1") { + @Override + @SuppressWarnings("unchecked") + T readObject(DataInput in) throws ClassNotFoundException, IOException { + assertThat(in).isNotNull(); + + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes(); + + sessionAttributes.setAttribute("attrOne", "testOne"); + sessionAttributes.setAttribute("attrTwo", "testTwo"); + + return (T) sessionAttributes; + } + }; + + session.fromData(mockDataInput); + + Set expectedAttributeNames = + asSet("attrOne", "attrTwo", FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME); + + assertThat(session.getId()).isEqualTo("2"); + assertThat(session.getCreationTime()).isEqualTo(expectedCreationTime); + assertThat(session.getLastAccessedTime()).isEqualTo(expectedLastAccessedTime); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + assertThat(session.getPrincipalName()).isEqualTo(expectedPrincipalName); + assertThat(session.getAttributeNames().size()).isEqualTo(3); + assertThat(session.getAttributeNames().containsAll(expectedAttributeNames)).isTrue(); + assertThat(session.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(session.getAttribute("attrTwo")).isEqualTo("testTwo"); + assertThat(session.getAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME)) + .isEqualTo(expectedPrincipalName); + + verify(mockDataInput, times(2)).readUTF(); + verify(mockDataInput, times(2)).readLong(); + verify(mockDataInput, times(2)).readInt(); + } + + @Test + public void sessionToDataThenFromDataWhenPrincipalNameIsNullGetsHandledProperly() + throws ClassNotFoundException, IOException { + + final long beforeOrAtCreationTime = System.currentTimeMillis(); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSession expectedSession = + new AbstractGemFireOperationsSessionRepository.GemFireSession("123") { + @Override + void writeObject(Object obj, DataOutput out) throws IOException { + assertThat(obj) + .isInstanceOf(AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes.class); + assertThat(out).isNotNull(); + } + }; + + assertThat(expectedSession.getId()).isEqualTo("123"); + assertThat(expectedSession.getCreationTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(expectedSession.getLastAccessedTime()).isGreaterThanOrEqualTo(expectedSession.getCreationTime()); + assertThat(expectedSession.getMaxInactiveIntervalInSeconds()).isEqualTo(0); + assertThat(expectedSession.getPrincipalName()).isNull(); + + ByteArrayOutputStream outBytes = new ByteArrayOutputStream(); + + expectedSession.toData(new DataOutputStream(outBytes)); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSession deserializedSession = + new AbstractGemFireOperationsSessionRepository.GemFireSession("0") { + @Override + @SuppressWarnings("unchecked") + T readObject(DataInput in) throws ClassNotFoundException, IOException { + return (T) new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes(); + } + }; + + deserializedSession.fromData(new DataInputStream(new ByteArrayInputStream(outBytes.toByteArray()))); + + assertThat(deserializedSession).isEqualTo(expectedSession); + assertThat(deserializedSession.getCreationTime()).isEqualTo(expectedSession.getCreationTime()); + assertThat(deserializedSession.getLastAccessedTime()).isEqualTo(expectedSession.getLastAccessedTime()); + assertThat(deserializedSession.getMaxInactiveIntervalInSeconds()) + .isEqualTo(expectedSession.getMaxInactiveIntervalInSeconds()); + assertThat(deserializedSession.getPrincipalName()).isNull(); + } + + @Test + public void hasDeltaWhenNoSessionChangesIsFalse() { + assertThat(new AbstractGemFireOperationsSessionRepository.GemFireSession().hasDelta()).isFalse(); + } + + @Test + public void hasDeltaWhenSessionAttributesChangeIsTrue() { + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession(); + + assertThat(session.hasDelta()).isFalse(); + + session.setAttribute("attrOne", "test"); + + assertThat(session.hasDelta()).isTrue(); + } + + @Test + public void hasDeltaWhenSessionLastAccessedTimeIsUpdatedIsTrue() { + long expectedLastAccessTime = 1L; + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession(); + + assertThat(session.getLastAccessedTime()).isNotEqualTo(expectedLastAccessTime); + assertThat(session.hasDelta()).isFalse(); + + session.setLastAccessedTime(expectedLastAccessTime); + + assertThat(session.getLastAccessedTime()).isEqualTo(expectedLastAccessTime); + assertThat(session.hasDelta()).isTrue(); + + session.setLastAccessedTime(expectedLastAccessTime); + + assertThat(session.getLastAccessedTime()).isEqualTo(expectedLastAccessTime); + assertThat(session.hasDelta()).isTrue(); + } + + @Test + public void hasDeltaWhenSessionMaxInactiveIntervalInSecondsIsUpdatedIsTrue() { + int expectedMaxInactiveIntervalInSeconds = 300; + + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession(); + + assertThat(session.getMaxInactiveIntervalInSeconds()).isNotEqualTo(expectedMaxInactiveIntervalInSeconds); + assertThat(session.hasDelta()).isFalse(); + + session.setMaxInactiveIntervalInSeconds(expectedMaxInactiveIntervalInSeconds); + + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + assertThat(session.hasDelta()).isTrue(); + + session.setMaxInactiveIntervalInSeconds(expectedMaxInactiveIntervalInSeconds); + + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + assertThat(session.hasDelta()).isTrue(); + } + + @Test + public void sessionToDelta() throws Exception { + final DataOutput mockDataOutput = mock(DataOutput.class); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession() { + @Override + void writeObject(Object obj, DataOutput out) throws IOException { + assertThat(String.valueOf(obj)).isEqualTo("test"); + assertThat(out).isSameAs(mockDataOutput); + } + }; + + session.setLastAccessedTime(1L); + session.setMaxInactiveIntervalInSeconds(300); + session.setAttribute("attrOne", "test"); + + assertThat(session.hasDelta()).isTrue(); + + session.toDelta(mockDataOutput); + + assertThat(session.hasDelta()).isFalse(); + + verify(mockDataOutput, times(1)).writeLong(eq(1L)); + verify(mockDataOutput, times(1)).writeInt(eq(300)); + verify(mockDataOutput, times(1)).writeInt(eq(1)); + verify(mockDataOutput, times(1)).writeUTF(eq("attrOne")); + } + + @Test + public void sessionFromDelta() throws Exception { + final DataInput mockDataInput = mock(DataInput.class); + + given(mockDataInput.readLong()).willReturn(1L); + given(mockDataInput.readInt()).willReturn(600).willReturn(0); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession() { + @Override + @SuppressWarnings("unchecked") + T readObject(DataInput in) throws ClassNotFoundException, IOException { + assertThat(in).isSameAs(mockDataInput); + return (T) "test"; + } + }; + + session.fromDelta(mockDataInput); + + assertThat(session.hasDelta()).isFalse(); + assertThat(session.getLastAccessedTime()).isEqualTo(1L); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(600); + assertThat(session.getAttributeNames().isEmpty()).isTrue(); + + verify(mockDataInput, times(1)).readLong(); + verify(mockDataInput, times(2)).readInt(); + verify(mockDataInput, never()).readUTF(); + } + + @Test + public void sessionComparisons() { + long twoHoursAgo = (System.currentTimeMillis() - TimeUnit.HOURS.toMillis(2)); + + AbstractGemFireOperationsSessionRepository.GemFireSession sessionOne = + new AbstractGemFireOperationsSessionRepository.GemFireSession( + mockSession("1", twoHoursAgo, MAX_INACTIVE_INTERVAL_IN_SECONDS)); + + AbstractGemFireOperationsSessionRepository.GemFireSession sessionTwo = + new AbstractGemFireOperationsSessionRepository.GemFireSession("2"); + + assertThat(sessionOne.getCreationTime()).isEqualTo(twoHoursAgo); + assertThat(sessionTwo.getCreationTime()).isGreaterThan(twoHoursAgo); + assertThat(sessionOne.compareTo(sessionTwo)).isLessThan(0); + assertThat(sessionOne.compareTo(sessionOne)).isEqualTo(0); + assertThat(sessionTwo.compareTo(sessionOne)).isGreaterThan(0); + } + + @Test + public void sessionEqualsDifferentSessionBasedOnId() { + AbstractGemFireOperationsSessionRepository.GemFireSession sessionOne = + new AbstractGemFireOperationsSessionRepository.GemFireSession("1"); + + sessionOne.setLastAccessedTime(12345L); + sessionOne.setMaxInactiveIntervalInSeconds(120); + sessionOne.setPrincipalName("jblum"); + + AbstractGemFireOperationsSessionRepository.GemFireSession sessionTwo = + new AbstractGemFireOperationsSessionRepository.GemFireSession("1"); + + sessionTwo.setLastAccessedTime(67890L); + sessionTwo.setMaxInactiveIntervalInSeconds(300); + sessionTwo.setPrincipalName("rwinch"); + + assertThat(sessionOne.getId().equals(sessionTwo.getId())).isTrue(); + assertThat(sessionOne.getLastAccessedTime() == sessionTwo.getLastAccessedTime()).isFalse(); + assertThat(sessionOne.getMaxInactiveIntervalInSeconds() == sessionTwo.getMaxInactiveIntervalInSeconds()) + .isFalse(); + assertThat(sessionOne.getPrincipalName().equals(sessionTwo.getPrincipalName())).isFalse(); + assertThat(sessionOne.equals(sessionTwo)).isTrue(); + } + + @Test + public void sessionHashCodeIsNotEqualToStringIdHashCode() { + AbstractGemFireOperationsSessionRepository.GemFireSession session = + new AbstractGemFireOperationsSessionRepository.GemFireSession("1"); + + assertThat(session.getId()).isEqualTo("1"); + assertThat(session.hashCode()).isNotEqualTo("1".hashCode()); + } + + @Test + public void sessionAttributesFromSession() { + Session mockSession = mock(Session.class); + + given(mockSession.getAttributeNames()).willReturn(asSet("attrOne", "attrTwo")); + given(mockSession.getAttribute(eq("attrOne"))).willReturn("testOne"); + given(mockSession.getAttribute(eq("attrTwo"))).willReturn("testTwo"); + + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes(); + + assertThat(sessionAttributes.getAttributeNames().isEmpty()).isTrue(); + + sessionAttributes.from(mockSession); + + assertThat(sessionAttributes.getAttributeNames().size()).isEqualTo(2); + assertThat(sessionAttributes.getAttributeNames().containsAll(asSet("attrOne", "attrTwo"))).isTrue(); + assertThat(sessionAttributes.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(sessionAttributes.getAttribute("attrTwo")).isEqualTo("testTwo"); + + verify(mockSession, times(1)).getAttributeNames(); + verify(mockSession, times(1)).getAttribute(eq("attrOne")); + verify(mockSession, times(1)).getAttribute(eq("attrTwo")); + } + + @Test + public void sessionAttributesFromSessionAttributes() { + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes source = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes(); + + source.setAttribute("attrOne", "testOne"); + source.setAttribute("attrTwo", "testTwo"); + + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes target = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes(); + + assertThat(target.getAttributeNames().isEmpty()).isTrue(); + + target.from(source); + + assertThat(target.getAttributeNames().size()).isEqualTo(2); + assertThat(target.getAttributeNames().containsAll(asSet("attrOne", "attrTwo"))).isTrue(); + assertThat(target.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(target.getAttribute("attrTwo")).isEqualTo("testTwo"); + } + + @Test + public void sessionAttributesToData() throws Exception { + final DataOutput mockDataOutput = mock(DataOutput.class); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes() { + private int count = 0; + + @Override + void writeObject(Object obj, DataOutput out) throws IOException { + assertThat(Arrays.asList("testOne", "testTwo").get(count++)).isEqualTo(String.valueOf(obj)); + assertThat(out).isSameAs(mockDataOutput); + } + }; + + sessionAttributes.setAttribute("attrOne", "testOne"); + sessionAttributes.setAttribute("attrTwo", "testTwo"); + + sessionAttributes.toData(mockDataOutput); + + verify(mockDataOutput, times(1)).writeInt(eq(2)); + verify(mockDataOutput, times(1)).writeUTF(eq("attrOne")); + verify(mockDataOutput, times(1)).writeUTF(eq("attrTwo")); + } + + @Test + public void sessionAttributesFromData() throws Exception { + final DataInput mockDataInput = mock(DataInput.class); + + given(mockDataInput.readInt()).willReturn(2); + given(mockDataInput.readUTF()).willReturn("attrOne").willReturn("attrTwo"); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes() { + private int count = 0; + + @Override + @SuppressWarnings("unchecked") + T readObject(DataInput in) throws ClassNotFoundException, IOException { + assertThat(in).isSameAs(mockDataInput); + return (T) Arrays.asList("testOne", "testTwo").get(count++); + } + }; + + assertThat(sessionAttributes.getAttributeNames().isEmpty()).isTrue(); + + sessionAttributes.fromData(mockDataInput); + + assertThat(sessionAttributes.getAttributeNames().size()).isEqualTo(2); + assertThat(sessionAttributes.getAttributeNames().containsAll(asSet("attrOne", "attrTwo"))).isTrue(); + assertThat(sessionAttributes.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(sessionAttributes.getAttribute("attrTwo")).isEqualTo("testTwo"); + + verify(mockDataInput, times(1)).readInt(); + verify(mockDataInput, times(2)).readUTF(); + } + + @Test + public void sessionAttributesHasDeltaIsFalse() { + assertThat(new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes().hasDelta()).isFalse(); + } + + @Test + public void sessionAttributesHasDeltaIsTrue() { + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes(); + + assertThat(sessionAttributes.hasDelta()).isFalse(); + + sessionAttributes.setAttribute("attrOne", "testOne"); + + assertThat(sessionAttributes.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(sessionAttributes.hasDelta()).isTrue(); + } + + @Test + public void sessionAttributesToDelta() throws Exception { + final DataOutput mockDataOutput = mock(DataOutput.class); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes() { + private int count = 0; + + @Override + void writeObject(Object obj, DataOutput out) throws IOException { + assertThat(Arrays.asList("testOne", "testTwo", "testThree").get(count++)) + .isEqualTo(String.valueOf(obj)); + assertThat(out).isSameAs(mockDataOutput); + } + }; + + sessionAttributes.setAttribute("attrOne", "testOne"); + sessionAttributes.setAttribute("attrTwo", "testTwo"); + + assertThat(sessionAttributes.hasDelta()).isTrue(); + + sessionAttributes.toDelta(mockDataOutput); + + assertThat(sessionAttributes.hasDelta()).isFalse(); + + verify(mockDataOutput, times(1)).writeInt(eq(2)); + verify(mockDataOutput, times(1)).writeUTF("attrOne"); + verify(mockDataOutput, times(1)).writeUTF("attrTwo"); + reset(mockDataOutput); + + sessionAttributes.setAttribute("attrOne", "testOne"); + + assertThat(sessionAttributes.hasDelta()).isFalse(); + + sessionAttributes.toDelta(mockDataOutput); + + verify(mockDataOutput, times(1)).writeInt(eq(0)); + verify(mockDataOutput, never()).writeUTF(any(String.class)); + reset(mockDataOutput); + + sessionAttributes.setAttribute("attrTwo", "testThree"); + + assertThat(sessionAttributes.hasDelta()).isTrue(); + + sessionAttributes.toDelta(mockDataOutput); + + verify(mockDataOutput, times(1)).writeInt(eq(1)); + verify(mockDataOutput, times(1)).writeUTF(eq("attrTwo")); + } + + @Test + public void sessionAttributesFromDelta() throws Exception { + final DataInput mockDataInput = mock(DataInput.class); + + given(mockDataInput.readInt()).willReturn(2); + given(mockDataInput.readUTF()).willReturn("attrOne").willReturn("attrTwo"); + + @SuppressWarnings("serial") + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes() { + private int count = 0; + + @Override + @SuppressWarnings("unchecked") + T readObject(DataInput in) throws ClassNotFoundException, IOException { + assertThat(in).isSameAs(mockDataInput); + return (T) Arrays.asList("testOne", "testTwo", "testThree").get(count++); + } + }; + + sessionAttributes.setAttribute("attrOne", "one"); + sessionAttributes.setAttribute("attrTwo", "two"); + + assertThat(sessionAttributes.getAttributeNames().size()).isEqualTo(2); + assertThat(sessionAttributes.getAttributeNames().containsAll(asSet("attrOne", "attrTwo"))).isTrue(); + assertThat(sessionAttributes.getAttribute("attrOne")).isEqualTo("one"); + assertThat(sessionAttributes.getAttribute("attrTwo")).isEqualTo("two"); + assertThat(sessionAttributes.hasDelta()).isTrue(); + + sessionAttributes.fromDelta(mockDataInput); + + assertThat(sessionAttributes.getAttributeNames().size()).isEqualTo(2); + assertThat(sessionAttributes.getAttributeNames().containsAll(asSet("attrOne", "attrTwo"))).isTrue(); + assertThat(sessionAttributes.getAttribute("attrOne")).isEqualTo("testOne"); + assertThat(sessionAttributes.getAttribute("attrTwo")).isEqualTo("testTwo"); + assertThat(sessionAttributes.hasDelta()).isFalse(); + + verify(mockDataInput, times(1)).readInt(); + verify(mockDataInput, times(2)).readUTF(); + reset(mockDataInput); + + given(mockDataInput.readInt()).willReturn(1); + given(mockDataInput.readUTF()).willReturn("attrTwo"); + + sessionAttributes.setAttribute("attrOne", "one"); + sessionAttributes.setAttribute("attrTwo", "two"); + + assertThat(sessionAttributes.getAttributeNames().size()).isEqualTo(2); + assertThat(sessionAttributes.getAttributeNames().containsAll(asSet("attrOne", "attrTwo"))).isTrue(); + assertThat(sessionAttributes.getAttribute("attrOne")).isEqualTo("one"); + assertThat(sessionAttributes.getAttribute("attrTwo")).isEqualTo("two"); + assertThat(sessionAttributes.hasDelta()).isTrue(); + + sessionAttributes.fromDelta(mockDataInput); + + assertThat(sessionAttributes.getAttributeNames().size()).isEqualTo(2); + assertThat(sessionAttributes.getAttributeNames().containsAll(asSet("attrOne", "attrTwo"))).isTrue(); + assertThat(sessionAttributes.getAttribute("attrOne")).isEqualTo("one"); + assertThat(sessionAttributes.getAttribute("attrTwo")).isEqualTo("testThree"); + assertThat(sessionAttributes.hasDelta()).isTrue(); + + verify(mockDataInput, times(1)).readInt(); + verify(mockDataInput, times(1)).readUTF(); + } + + @Test + public void sessionAttributesEntrySetIteratesAttributeNameValues() { + AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes sessionAttributes = + new AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes(); + + sessionAttributes.setAttribute("keyOne", "valueOne"); + sessionAttributes.setAttribute("keyTwo", "valueTwo"); + + Set> sessionAttributeEntries = sessionAttributes.entrySet(); + + assertThat(sessionAttributeEntries).isNotNull(); + assertThat(sessionAttributeEntries.size()).isEqualTo(2); + + Set expectedNames = asSet("keyOne", "keyTwo"); + Set expectedValues = asSet("valueOne", "valueTwo"); + + for (Map.Entry entry : sessionAttributeEntries) { + expectedNames.remove(entry.getKey()); + expectedValues.remove(entry.getValue()); + } + + assertThat(expectedNames.isEmpty()).isTrue(); + assertThat(expectedValues.isEmpty()).isTrue(); + + sessionAttributes.setAttribute("keyThree", "valueThree"); + + assertThat(sessionAttributeEntries.size()).isEqualTo(3); + + expectedNames = asSet("keyOne", "keyTwo"); + expectedValues = asSet("valueOne", "valueTwo"); + + for (Map.Entry entry : sessionAttributeEntries) { + expectedNames.remove(entry.getKey()); + expectedValues.remove(entry.getValue()); + } + + assertThat(expectedNames.isEmpty()).isTrue(); + assertThat(expectedValues.isEmpty()).isTrue(); + + sessionAttributes.removeAttribute("keyOne"); + sessionAttributes.removeAttribute("keyTwo"); + + assertThat(sessionAttributeEntries.size()).isEqualTo(1); + + Map.Entry entry = sessionAttributeEntries.iterator().next(); + + assertThat(entry.getKey()).isEqualTo("keyThree"); + assertThat(entry.getValue()).isEqualTo("valueThree"); + } + + @Test + public void sessionWithAttributesAreThreadSafe() throws Throwable { + TestFramework.runOnce(new ThreadSafeSessionTest()); + } + + protected static final class ThreadSafeSessionTest extends MultithreadedTestCase { + + private final long beforeOrAtCreationTime = System.currentTimeMillis(); + + private AbstractGemFireOperationsSessionRepository.GemFireSession session; + + private volatile long expectedCreationTime; + + @Override + public void initialize() { + this.session = new AbstractGemFireOperationsSessionRepository.GemFireSession("1"); + + assertThat(this.session).isNotNull(); + assertThat(this.session.getId()).isEqualTo("1"); + assertThat(this.session.getCreationTime()).isGreaterThanOrEqualTo(this.beforeOrAtCreationTime); + assertThat(this.session.getLastAccessedTime()).isEqualTo(this.session.getCreationTime()); + assertThat(this.session.getMaxInactiveIntervalInSeconds()).isEqualTo(0); + assertThat(this.session.getPrincipalName()).isNull(); + assertThat(this.session.getAttributeNames().isEmpty()).isTrue(); + + this.expectedCreationTime = this.session.getCreationTime(); + + this.session.setLastAccessedTime(0L); + this.session.setMaxInactiveIntervalInSeconds(60); + this.session.setPrincipalName("jblum"); + } + + public void thread1() { + assertTick(0); + + Thread.currentThread().setName("HTTP Request Processing Thread 1"); + + assertThat(this.session).isNotNull(); + assertThat(this.session.getId()).isEqualTo("1"); + assertThat(this.session.getCreationTime()).isEqualTo(this.expectedCreationTime); + assertThat(this.session.getLastAccessedTime()).isEqualTo(0L); + assertThat(this.session.getMaxInactiveIntervalInSeconds()).isEqualTo(60); + assertThat(this.session.getPrincipalName()).isEqualTo("jblum"); + assertThat(this.session.getAttributeNames().size()).isEqualTo(1); + assertThat(this.session.getAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME)) + .isEqualTo("jblum"); + + this.session.setAttribute("tennis", "ping"); + this.session.setAttribute("junk", "test"); + this.session.setLastAccessedTime(1L); + this.session.setMaxInactiveIntervalInSeconds(120); + this.session.setPrincipalName("rwinch"); + + waitForTick(2); + + assertThat(this.session).isNotNull(); + assertThat(this.session.getId()).isEqualTo("1"); + assertThat(this.session.getCreationTime()).isEqualTo(this.expectedCreationTime); + assertThat(this.session.getLastAccessedTime()).isEqualTo(2L); + assertThat(this.session.getMaxInactiveIntervalInSeconds()).isEqualTo(180); + assertThat(this.session.getPrincipalName()).isEqualTo("ogierke"); + assertThat(this.session.getAttributeNames().size()).isEqualTo(3); + assertThat(this.session.getAttributeNames().containsAll(asSet("tennis", "greeting"))).isTrue(); + assertThat(this.session.getAttributeNames().contains("junk")).isFalse(); + assertThat(this.session.getAttribute("junk")).isNull(); + assertThat(this.session.getAttribute("tennis")).isEqualTo("pong"); + assertThat(this.session.getAttribute("greeting")).isEqualTo("hello"); + } + + public void thread2() { + assertTick(0); + + Thread.currentThread().setName("HTTP Request Processing Thread 2"); + + waitForTick(1); + assertTick(1); + + assertThat(this.session).isNotNull(); + assertThat(this.session.getId()).isEqualTo("1"); + assertThat(this.session.getCreationTime()).isEqualTo(this.expectedCreationTime); + assertThat(this.session.getLastAccessedTime()).isEqualTo(1L); + assertThat(this.session.getMaxInactiveIntervalInSeconds()).isEqualTo(120); + assertThat(this.session.getPrincipalName()).isEqualTo("rwinch"); + assertThat(this.session.getAttributeNames().size()).isEqualTo(3); + assertThat(this.session.getAttributeNames().containsAll(asSet("tennis", "junk"))).isTrue(); + assertThat(this.session.getAttribute("junk")).isEqualTo("test"); + assertThat(this.session.getAttribute("tennis")).isEqualTo("ping"); + + this.session.setAttribute("tennis", "pong"); + this.session.setAttribute("greeting", "hello"); + this.session.removeAttribute("junk"); + this.session.setLastAccessedTime(2L); + this.session.setMaxInactiveIntervalInSeconds(180); + this.session.setPrincipalName("ogierke"); + } + + @Override + public void finish() { + this.session = null; + } + } + + static class Tombstone { + } + + static class TestGemFireOperationsSessionRepository extends AbstractGemFireOperationsSessionRepository { + + TestGemFireOperationsSessionRepository(GemfireOperations gemfireOperations) { + super(gemfireOperations); + } + + public ExpiringSession createSession() { + throw new UnsupportedOperationException("Not Implemented"); + } + + public Map findByIndexNameAndIndexValue(String indexName, String indexValue) { + throw new UnsupportedOperationException("Not Implemented"); + } + + public ExpiringSession getSession(String id) { + throw new UnsupportedOperationException("Not Implemented"); + } + + public void save(ExpiringSession session) { + throw new UnsupportedOperationException("Not Implemented"); + } + + public void delete(String id) { + throw new UnsupportedOperationException("Not Implemented"); + } + } +} diff --git a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.java b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.java new file mode 100644 index 0000000..86fc286 --- /dev/null +++ b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.java @@ -0,0 +1,436 @@ +/* + * Copyright 2014-2017 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 org.springframework.session.data.gemfire; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.apache.geode.cache.AttributesMutator; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.query.SelectResults; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; + +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.data.gemfire.GemfireAccessor; +import org.springframework.data.gemfire.GemfireOperations; +import org.springframework.session.ExpiringSession; +import org.springframework.session.FindByIndexNameSessionRepository; +import org.springframework.session.events.AbstractSessionEvent; +import org.springframework.session.events.SessionDeletedEvent; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.ArgumentMatchers.same; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +/** + * The GemFireOperationsSessionRepositoryTest class is a test suite of test cases testing + * the contract and functionality of the GemFireOperationsSessionRepository class. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.junit.runner.RunWith + * @see org.mockito.Mock + * @see org.mockito.Mockito + * @see org.mockito.junit.MockitoJUnitRunner + * @see org.springframework.data.gemfire.GemfireOperations + * @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository + * @see org.apache.geode.cache.Region + */ +@RunWith(MockitoJUnitRunner.class) +public class GemFireOperationsSessionRepositoryTest { + + protected static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 600; + + @Mock + private ApplicationEventPublisher mockApplicationEventPublisher; + + @Mock + private AttributesMutator mockAttributesMutator; + + @Mock + private GemfireOperationsAccessor mockTemplate; + + private GemFireOperationsSessionRepository sessionRepository; + + @Mock + private Region mockRegion; + + @Before + public void setup() throws Exception { + given(this.mockRegion.getAttributesMutator()).willReturn(this.mockAttributesMutator); + given(this.mockRegion.getFullPath()).willReturn("/Example"); + given(this.mockTemplate.getRegion()).willReturn(this.mockRegion); + + this.sessionRepository = new GemFireOperationsSessionRepository(this.mockTemplate); + this.sessionRepository.setApplicationEventPublisher(this.mockApplicationEventPublisher); + this.sessionRepository.setMaxInactiveIntervalInSeconds(MAX_INACTIVE_INTERVAL_IN_SECONDS); + this.sessionRepository.afterPropertiesSet(); + + assertThat(this.sessionRepository.getApplicationEventPublisher()).isSameAs(this.mockApplicationEventPublisher); + assertThat(this.sessionRepository.getFullyQualifiedRegionName()).isEqualTo("/Example"); + assertThat(this.sessionRepository.getMaxInactiveIntervalInSeconds()).isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + } + + @After + public void tearDown() { + verify(this.mockAttributesMutator, times(1)).addCacheListener(same(this.sessionRepository)); + verify(this.mockRegion, times(1)).getFullPath(); + verify(this.mockTemplate, times(1)).getRegion(); + } + + @Test + @SuppressWarnings("unchecked") + public void findByIndexNameValueFindsMatchingSession() { + ExpiringSession mockSession = mock(ExpiringSession.class, "MockSession"); + + given(mockSession.getId()).willReturn("1"); + + SelectResults mockSelectResults = mock(SelectResults.class); + + given(mockSelectResults.asList()).willReturn(Collections.singletonList(mockSession)); + + String indexName = "vip"; + String indexValue = "rwinch"; + + String expectedQql = String.format(GemFireOperationsSessionRepository.FIND_SESSIONS_BY_INDEX_NAME_VALUE_QUERY, + this.sessionRepository.getFullyQualifiedRegionName(), indexName); + + given(this.mockTemplate.find(eq(expectedQql), eq(indexValue))).willReturn(mockSelectResults); + + Map sessions = + this.sessionRepository.findByIndexNameAndIndexValue(indexName, indexValue); + + assertThat(sessions).isNotNull(); + assertThat(sessions.size()).isEqualTo(1); + assertThat(sessions.get("1")).isEqualTo(mockSession); + + verify(this.mockTemplate, times(1)).find(eq(expectedQql), eq(indexValue)); + verify(mockSelectResults, times(1)).asList(); + verify(mockSession, times(1)).getId(); + } + + @Test + @SuppressWarnings("unchecked") + public void findByPrincipalNameFindsMatchingSessions() throws Exception { + ExpiringSession mockSessionOne = mock(ExpiringSession.class, "MockSessionOne"); + ExpiringSession mockSessionTwo = mock(ExpiringSession.class, "MockSessionTwo"); + ExpiringSession mockSessionThree = mock(ExpiringSession.class, "MockSessionThree"); + + given(mockSessionOne.getId()).willReturn("1"); + given(mockSessionTwo.getId()).willReturn("2"); + given(mockSessionThree.getId()).willReturn("3"); + + SelectResults mockSelectResults = mock(SelectResults.class); + + given(mockSelectResults.asList()) + .willReturn(Arrays.asList(mockSessionOne, mockSessionTwo, mockSessionThree)); + + String principalName = "jblum"; + + String expectedOql = String.format(GemFireOperationsSessionRepository.FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY, + this.sessionRepository.getFullyQualifiedRegionName()); + + given(this.mockTemplate.find(eq(expectedOql), eq(principalName))).willReturn(mockSelectResults); + + Map sessions = this.sessionRepository.findByIndexNameAndIndexValue( + FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, principalName); + + assertThat(sessions).isNotNull(); + assertThat(sessions.size()).isEqualTo(3); + assertThat(sessions.get("1")).isEqualTo(mockSessionOne); + assertThat(sessions.get("2")).isEqualTo(mockSessionTwo); + assertThat(sessions.get("3")).isEqualTo(mockSessionThree); + + verify(this.mockTemplate, times(1)).find(eq(expectedOql), eq(principalName)); + verify(mockSelectResults, times(1)).asList(); + verify(mockSessionOne, times(1)).getId(); + verify(mockSessionTwo, times(1)).getId(); + verify(mockSessionThree, times(1)).getId(); + } + + @Test + @SuppressWarnings("unchecked") + public void findByPrincipalNameReturnsNoMatchingSessions() { + SelectResults mockSelectResults = mock(SelectResults.class); + + given(mockSelectResults.asList()).willReturn(Collections.emptyList()); + + String principalName = "jblum"; + + String expectedOql = String.format(GemFireOperationsSessionRepository.FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY, + this.sessionRepository.getFullyQualifiedRegionName()); + + given(this.mockTemplate.find(eq(expectedOql), eq(principalName))).willReturn(mockSelectResults); + + Map sessions = this.sessionRepository.findByIndexNameAndIndexValue( + FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, principalName); + + assertThat(sessions).isNotNull(); + assertThat(sessions.isEmpty()).isTrue(); + + verify(this.mockTemplate, times(1)).find(eq(expectedOql), eq(principalName)); + verify(mockSelectResults, times(1)).asList(); + } + + @Test + public void prepareQueryReturnsPrincipalNameOql() { + String actualQql = + this.sessionRepository.prepareQuery(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME); + + String expectedOql = String.format(GemFireOperationsSessionRepository.FIND_SESSIONS_BY_PRINCIPAL_NAME_QUERY, + this.sessionRepository.getFullyQualifiedRegionName()); + + assertThat(actualQql).isEqualTo(expectedOql); + } + + @Test + public void prepareQueryReturnsIndexNameValueOql() { + String attributeName = "testAttributeName"; + String actualOql = this.sessionRepository.prepareQuery(attributeName); + String expectedOql = String.format(GemFireOperationsSessionRepository.FIND_SESSIONS_BY_INDEX_NAME_VALUE_QUERY, + this.sessionRepository.getFullyQualifiedRegionName(), attributeName); + + assertThat(actualOql).isEqualTo(expectedOql); + } + + @Test + public void createProperlyInitializedSession() { + long beforeOrAtCreationTime = System.currentTimeMillis(); + + ExpiringSession session = this.sessionRepository.createSession(); + + assertThat(session).isInstanceOf(AbstractGemFireOperationsSessionRepository.GemFireSession.class); + assertThat(session.getId()).isNotNull(); + assertThat(session.getAttributeNames().isEmpty()).isTrue(); + assertThat(session.getCreationTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(session.getLastAccessedTime()).isGreaterThanOrEqualTo(beforeOrAtCreationTime); + assertThat(session.getMaxInactiveIntervalInSeconds()).isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + } + + @Test + public void getSessionDeletesMatchingExpiredSessionById() { + final String expectedSessionId = "1"; + + final ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.isExpired()).willReturn(true); + given(mockSession.getId()).willReturn(expectedSessionId); + given(this.mockTemplate.get(eq(expectedSessionId))).willReturn(mockSession); + given(this.mockTemplate.remove(eq(expectedSessionId))).willReturn(mockSession); + + willAnswer(new Answer() { + public Void answer(final InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDeletedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isSameAs(GemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isSameAs(mockSession); + assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSessionId); + + return null; + } + }).given(this.mockApplicationEventPublisher).publishEvent(any(ApplicationEvent.class)); + + assertThat(this.sessionRepository.getSession(expectedSessionId)).isNull(); + + verify(this.mockTemplate, times(1)).get(eq(expectedSessionId)); + verify(this.mockTemplate, times(1)).remove(eq(expectedSessionId)); + verify(mockSession, times(1)).isExpired(); + verify(mockSession, times(2)).getId(); + verify(this.mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDeletedEvent.class)); + } + + @Test + public void getSessionFindsMatchingNonExpiredSessionById() { + String expectedId = "1"; + + long expectedCreationTime = System.currentTimeMillis(); + long currentLastAccessedTime = (expectedCreationTime + TimeUnit.MINUTES.toMillis(5)); + + ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.isExpired()).willReturn(false); + given(mockSession.getId()).willReturn(expectedId); + given(mockSession.getCreationTime()).willReturn(expectedCreationTime); + given(mockSession.getLastAccessedTime()).willReturn(currentLastAccessedTime); + given(mockSession.getAttributeNames()).willReturn(Collections.singleton("attrOne")); + given(mockSession.getAttribute(eq("attrOne"))).willReturn("test"); + given(this.mockTemplate.get(eq(expectedId))).willReturn(mockSession); + + ExpiringSession actualSession = this.sessionRepository.getSession(expectedId); + + assertThat(actualSession).isNotSameAs(mockSession); + assertThat(actualSession.getId()).isEqualTo(expectedId); + assertThat(actualSession.getCreationTime()).isEqualTo(expectedCreationTime); + assertThat(actualSession.getLastAccessedTime()).isNotEqualTo(currentLastAccessedTime); + assertThat(actualSession.getLastAccessedTime()).isGreaterThanOrEqualTo(expectedCreationTime); + assertThat(actualSession.getAttributeNames()).isEqualTo(Collections.singleton("attrOne")); + assertThat(String.valueOf(actualSession.getAttribute("attrOne"))).isEqualTo("test"); + + verify(this.mockTemplate, times(1)).get(eq(expectedId)); + verify(mockSession, times(1)).isExpired(); + verify(mockSession, times(1)).getId(); + verify(mockSession, times(1)).getCreationTime(); + verify(mockSession, times(1)).getLastAccessedTime(); + verify(mockSession, times(1)).getAttributeNames(); + verify(mockSession, times(1)).getAttribute(eq("attrOne")); + } + + @Test + public void getSessionReturnsNull() { + given(this.mockTemplate.get(anyString())).willReturn(null); + assertThat(this.sessionRepository.getSession("1")).isNull(); + } + + @Test + public void saveStoresSession() { + final String expectedSessionId = "1"; + + final long expectedCreationTime = System.currentTimeMillis(); + final long expectedLastAccessTime = (expectedCreationTime + TimeUnit.MINUTES.toMillis(5)); + + ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.getId()).willReturn(expectedSessionId); + given(mockSession.getCreationTime()).willReturn(expectedCreationTime); + given(mockSession.getLastAccessedTime()).willReturn(expectedLastAccessTime); + given(mockSession.getMaxInactiveIntervalInSeconds()) + .willReturn(MAX_INACTIVE_INTERVAL_IN_SECONDS); + given(mockSession.getAttributeNames()).willReturn(Collections.emptySet()); + + given(this.mockTemplate.put(eq(expectedSessionId), + isA(AbstractGemFireOperationsSessionRepository.GemFireSession.class))) + .willAnswer(new Answer() { + public ExpiringSession answer(InvocationOnMock invocation) throws Throwable { + ExpiringSession session = invocation.getArgument(1); + + assertThat(session).isNotNull(); + assertThat(session.getId()).isEqualTo(expectedSessionId); + assertThat(session.getCreationTime()).isEqualTo(expectedCreationTime); + assertThat(session.getLastAccessedTime()).isEqualTo(expectedLastAccessTime); + assertThat(session.getMaxInactiveIntervalInSeconds()) + .isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS); + assertThat(session.getAttributeNames().isEmpty()).isTrue(); + + return null; + } + }); + + this.sessionRepository.save(mockSession); + + verify(mockSession, times(2)).getId(); + verify(mockSession, times(1)).getCreationTime(); + verify(mockSession, times(1)).getLastAccessedTime(); + verify(mockSession, times(1)).getMaxInactiveIntervalInSeconds(); + verify(mockSession, times(1)).getAttributeNames(); + verify(this.mockTemplate, times(1)).put(eq(expectedSessionId), + isA(AbstractGemFireOperationsSessionRepository.GemFireSession.class)); + } + + @Test + public void deleteRemovesExistingSessionAndHandlesDelete() { + final String expectedSessionId = "1"; + + final ExpiringSession mockSession = mock(ExpiringSession.class); + + given(mockSession.getId()).willReturn(expectedSessionId); + given(this.mockTemplate.remove(eq(expectedSessionId))).willReturn(mockSession); + + willAnswer(new Answer() { + public Void answer(final InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDeletedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()) + .isSameAs(GemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isSameAs(mockSession); + assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSessionId); + + return null; + } + }).given(this.mockApplicationEventPublisher).publishEvent(isA(SessionDeletedEvent.class)); + + this.sessionRepository.delete(expectedSessionId); + + verify(mockSession, times(1)).getId(); + verify(this.mockTemplate, times(1)).remove(eq(expectedSessionId)); + verify(this.mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDeletedEvent.class)); + } + + @Test + public void deleteRemovesNonExistingSessionAndHandlesDelete() { + final String expectedSessionId = "1"; + + given(this.mockTemplate.remove(anyString())).willReturn(null); + + willAnswer(new Answer() { + public Void answer(final InvocationOnMock invocation) throws Throwable { + ApplicationEvent applicationEvent = invocation.getArgument(0); + + assertThat(applicationEvent).isInstanceOf(SessionDeletedEvent.class); + + AbstractSessionEvent sessionEvent = (AbstractSessionEvent) applicationEvent; + + assertThat(sessionEvent.getSource()). + isSameAs(GemFireOperationsSessionRepositoryTest.this.sessionRepository); + assertThat(sessionEvent.getSession()).isNull(); + assertThat(sessionEvent.getSessionId()).isEqualTo(expectedSessionId); + + return null; + } + }).given(this.mockApplicationEventPublisher).publishEvent(isA(SessionDeletedEvent.class)); + + this.sessionRepository.delete(expectedSessionId); + + verify(this.mockTemplate, times(1)).remove(eq(expectedSessionId)); + verify(this.mockApplicationEventPublisher, times(1)) + .publishEvent(isA(SessionDeletedEvent.class)); + } + + protected abstract class GemfireOperationsAccessor extends GemfireAccessor + implements GemfireOperations { + } +} diff --git a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.java b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.java new file mode 100644 index 0000000..40c3e84 --- /dev/null +++ b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.java @@ -0,0 +1,407 @@ +/* + * Copyright 2014-2017 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 org.springframework.session.data.gemfire.config.annotation.web.http; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.ExpirationAttributes; +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.ClientRegionShortcut; +import org.junit.Before; +import org.junit.Test; + +import org.springframework.core.type.AnnotationMetadata; +import org.springframework.data.gemfire.GemfireOperations; +import org.springframework.data.gemfire.GemfireTemplate; +import org.springframework.data.gemfire.RegionAttributesFactoryBean; +import org.springframework.session.ExpiringSession; +import org.springframework.session.data.gemfire.GemFireOperationsSessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; + +/** + * The GemFireHttpSessionConfigurationTest class is a test suite of test cases testing the + * contract and functionality of the {@link GemFireHttpSessionConfiguration} class. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.springframework.data.gemfire.GemfireOperations + * @see org.springframework.data.gemfire.GemfireTemplate + * @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.client.ClientCache + */ +public class GemFireHttpSessionConfigurationTest { + + private GemFireHttpSessionConfiguration gemfireConfiguration; + + @SuppressWarnings("unchecked") + protected T getField(Object obj, String fieldName) { + try { + Field field = obj.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + return (T) field.get(obj); + } + catch (NoSuchFieldException e) { + throw new IllegalArgumentException(String.format( + "field with name [%1$s] was not found in class [%2$s]", fieldName, obj), e); + } + catch (IllegalAccessException e) { + throw new Error(String.format("unable to access field [%1$s] on object of type [%2$s]", + fieldName, obj.getClass().getName()), e); + } + } + + protected T[] toArray(T... array) { + return array; + } + + @Before + public void setup() { + this.gemfireConfiguration = new GemFireHttpSessionConfiguration(); + } + + @Test + public void setAndGetBeanClassLoader() { + assertThat(this.gemfireConfiguration.getBeanClassLoader()).isNull(); + + this.gemfireConfiguration.setBeanClassLoader(Thread.currentThread().getContextClassLoader()); + + assertThat(this.gemfireConfiguration.getBeanClassLoader()).isEqualTo( + Thread.currentThread().getContextClassLoader()); + + this.gemfireConfiguration.setBeanClassLoader(null); + + assertThat(this.gemfireConfiguration.getBeanClassLoader()).isNull(); + } + + @Test + public void setAndGetClientRegionShortcut() { + assertThat(this.gemfireConfiguration.getClientRegionShortcut()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_CLIENT_REGION_SHORTCUT); + + this.gemfireConfiguration.setClientRegionShortcut(ClientRegionShortcut.CACHING_PROXY); + + assertThat(this.gemfireConfiguration.getClientRegionShortcut()).isEqualTo( + ClientRegionShortcut.CACHING_PROXY); + + this.gemfireConfiguration.setClientRegionShortcut(null); + + assertThat(this.gemfireConfiguration.getClientRegionShortcut()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_CLIENT_REGION_SHORTCUT); + } + + @Test + public void setAndGetMaxInactiveIntervalInSeconds() { + assertThat(this.gemfireConfiguration.getMaxInactiveIntervalInSeconds()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS); + + this.gemfireConfiguration.setMaxInactiveIntervalInSeconds(300); + + assertThat(this.gemfireConfiguration.getMaxInactiveIntervalInSeconds()).isEqualTo(300); + + this.gemfireConfiguration.setMaxInactiveIntervalInSeconds(Integer.MAX_VALUE); + + assertThat(this.gemfireConfiguration.getMaxInactiveIntervalInSeconds()).isEqualTo(Integer.MAX_VALUE); + + this.gemfireConfiguration.setMaxInactiveIntervalInSeconds(-1); + + assertThat(this.gemfireConfiguration.getMaxInactiveIntervalInSeconds()).isEqualTo(-1); + + this.gemfireConfiguration.setMaxInactiveIntervalInSeconds(Integer.MIN_VALUE); + + assertThat(this.gemfireConfiguration.getMaxInactiveIntervalInSeconds()).isEqualTo(Integer.MIN_VALUE); + } + + @Test + public void setAndGetPoolName() { + assertThat(this.gemfireConfiguration.getPoolName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_GEMFIRE_POOL_NAME); + + this.gemfireConfiguration.setPoolName("TestPoolName"); + + assertThat(this.gemfireConfiguration.getPoolName()).isEqualTo("TestPoolName"); + + this.gemfireConfiguration.setPoolName(" "); + + assertThat(this.gemfireConfiguration.getPoolName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_GEMFIRE_POOL_NAME); + + this.gemfireConfiguration.setPoolName(""); + + assertThat(this.gemfireConfiguration.getPoolName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_GEMFIRE_POOL_NAME); + + this.gemfireConfiguration.setPoolName(null); + + assertThat(this.gemfireConfiguration.getPoolName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_GEMFIRE_POOL_NAME); + } + + @Test + public void setAndGetServerRegionShortcut() { + assertThat(this.gemfireConfiguration.getServerRegionShortcut()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_SERVER_REGION_SHORTCUT); + + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.REPLICATE_PERSISTENT); + + assertThat(this.gemfireConfiguration.getServerRegionShortcut()).isEqualTo( + RegionShortcut.REPLICATE_PERSISTENT); + + this.gemfireConfiguration.setServerRegionShortcut(null); + + assertThat(this.gemfireConfiguration.getServerRegionShortcut()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_SERVER_REGION_SHORTCUT); + } + + @Test + public void setAndGetSpringSessionGemFireRegionName() { + assertThat(this.gemfireConfiguration.getSpringSessionGemFireRegionName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + + this.gemfireConfiguration.setSpringSessionGemFireRegionName("test"); + + assertThat(this.gemfireConfiguration.getSpringSessionGemFireRegionName()).isEqualTo("test"); + + this.gemfireConfiguration.setSpringSessionGemFireRegionName(" "); + + assertThat(this.gemfireConfiguration.getSpringSessionGemFireRegionName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + + this.gemfireConfiguration.setSpringSessionGemFireRegionName(""); + + assertThat(this.gemfireConfiguration.getSpringSessionGemFireRegionName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + + this.gemfireConfiguration.setSpringSessionGemFireRegionName(null); + + assertThat(this.gemfireConfiguration.getSpringSessionGemFireRegionName()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + } + + @Test + public void setsImportMetadata() { + AnnotationMetadata mockAnnotationMetadata = mock(AnnotationMetadata.class); + + Map annotationAttributes = new HashMap(4); + + annotationAttributes.put("clientRegionShortcut", ClientRegionShortcut.CACHING_PROXY); + annotationAttributes.put("indexableSessionAttributes", toArray("one", "two", "three")); + annotationAttributes.put("maxInactiveIntervalInSeconds", 600); + annotationAttributes.put("poolName", "TestPool"); + annotationAttributes.put("serverRegionShortcut", RegionShortcut.REPLICATE); + annotationAttributes.put("regionName", "TEST"); + + given(mockAnnotationMetadata.getAnnotationAttributes(eq(EnableGemFireHttpSession.class.getName()))) + .willReturn(annotationAttributes); + + this.gemfireConfiguration.setImportMetadata(mockAnnotationMetadata); + + assertThat(this.gemfireConfiguration.getClientRegionShortcut()).isEqualTo(ClientRegionShortcut.CACHING_PROXY); + assertThat(this.gemfireConfiguration.getIndexableSessionAttributes()).isEqualTo(toArray("one", "two", "three")); + assertThat(this.gemfireConfiguration.getMaxInactiveIntervalInSeconds()).isEqualTo(600); + assertThat(this.gemfireConfiguration.getPoolName()).isEqualTo("TestPool"); + assertThat(this.gemfireConfiguration.getServerRegionShortcut()).isEqualTo(RegionShortcut.REPLICATE); + assertThat(this.gemfireConfiguration.getSpringSessionGemFireRegionName()).isEqualTo("TEST"); + + verify(mockAnnotationMetadata, times(1)).getAnnotationAttributes(eq(EnableGemFireHttpSession.class.getName())); + } + + @Test + public void createsAndInitializesSessionRepositoryBean() { + GemfireOperations mockGemfireOperations = mock(GemfireOperations.class); + + this.gemfireConfiguration.setMaxInactiveIntervalInSeconds(120); + + GemFireOperationsSessionRepository sessionRepository = this.gemfireConfiguration.sessionRepository( + mockGemfireOperations); + + assertThat(sessionRepository).isNotNull(); + assertThat(sessionRepository.getTemplate()).isSameAs(mockGemfireOperations); + assertThat(sessionRepository.getMaxInactiveIntervalInSeconds()).isEqualTo(120); + } + + @Test + @SuppressWarnings("unchecked") + public void createsAndInitializesSessionRegionTemplateBean() { + GemFireCache mockGemFireCache = mock(GemFireCache.class); + Region mockRegion = mock(Region.class); + + given(mockGemFireCache.getRegion(eq("Example"))).willReturn(mockRegion); + + this.gemfireConfiguration.setSpringSessionGemFireRegionName("Example"); + + GemfireTemplate template = this.gemfireConfiguration.sessionRegionTemplate(mockGemFireCache); + + assertThat(this.gemfireConfiguration.getSpringSessionGemFireRegionName()).isEqualTo("Example"); + assertThat(template).isNotNull(); + assertThat(template.getRegion()).isSameAs(mockRegion); + + verify(mockGemFireCache, times(1)).getRegion(eq("Example")); + } + + @Test + @SuppressWarnings("unchecked") + public void createsAndInitializesSessionRegionBean() { + GemFireCache mockGemFireCache = mock(GemFireCache.class); + RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); + + this.gemfireConfiguration.setClientRegionShortcut(ClientRegionShortcut.CACHING_PROXY); + this.gemfireConfiguration.setPoolName("TestPool"); + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.REPLICATE_PERSISTENT); + this.gemfireConfiguration.setSpringSessionGemFireRegionName("TestRegion"); + + GemFireCacheTypeAwareRegionFactoryBean sessionRegionFactoryBean = + this.gemfireConfiguration.sessionRegion(mockGemFireCache, mockRegionAttributes); + + assertThat(sessionRegionFactoryBean).isNotNull(); + assertThat(this.getField(sessionRegionFactoryBean, "clientRegionShortcut")) + .isEqualTo(ClientRegionShortcut.CACHING_PROXY); + assertThat(this.getField(sessionRegionFactoryBean, "gemfireCache")) + .isEqualTo(mockGemFireCache); + assertThat(this.getField(sessionRegionFactoryBean, "poolName")).isEqualTo("TestPool"); + assertThat(this.>getField(sessionRegionFactoryBean, + "regionAttributes")).isEqualTo(mockRegionAttributes); + assertThat(this.getField(sessionRegionFactoryBean, "regionName")).isEqualTo("TestRegion"); + assertThat(this.getField(sessionRegionFactoryBean, "serverRegionShortcut")) + .isEqualTo(RegionShortcut.REPLICATE_PERSISTENT); + + verifyZeroInteractions(mockGemFireCache); + verifyZeroInteractions(mockRegionAttributes); + } + + @Test + @SuppressWarnings("unchecked") + public void createsAndInitializesSessionRegionAttributesWithExpiration() throws Exception { + Cache mockCache = mock(Cache.class); + + this.gemfireConfiguration.setMaxInactiveIntervalInSeconds(300); + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.LOCAL); + + RegionAttributesFactoryBean regionAttributesFactory = + this.gemfireConfiguration.sessionRegionAttributes(mockCache); + + assertThat(regionAttributesFactory).isNotNull(); + + regionAttributesFactory.afterPropertiesSet(); + + RegionAttributes sessionRegionAttributes = regionAttributesFactory.getObject(); + + assertThat(sessionRegionAttributes).isNotNull(); + assertThat(sessionRegionAttributes.getKeyConstraint()).isEqualTo( + GemFireHttpSessionConfiguration.SPRING_SESSION_GEMFIRE_REGION_KEY_CONSTRAINT); + assertThat(sessionRegionAttributes.getValueConstraint()).isEqualTo( + GemFireHttpSessionConfiguration.SPRING_SESSION_GEMFIRE_REGION_VALUE_CONSTRAINT); + + ExpirationAttributes entryIdleTimeoutExpiration = sessionRegionAttributes.getEntryIdleTimeout(); + + assertThat(entryIdleTimeoutExpiration).isNotNull(); + assertThat(entryIdleTimeoutExpiration.getAction()).isEqualTo(ExpirationAction.INVALIDATE); + assertThat(entryIdleTimeoutExpiration.getTimeout()).isEqualTo(300); + } + + @Test + @SuppressWarnings("unchecked") + public void createsAndInitializesSessionRegionAttributesWithoutExpiration() throws Exception { + ClientCache mockClientCache = mock(ClientCache.class); + + this.gemfireConfiguration.setMaxInactiveIntervalInSeconds(300); + + RegionAttributesFactoryBean regionAttributesFactory = + this.gemfireConfiguration.sessionRegionAttributes(mockClientCache); + + assertThat(regionAttributesFactory).isNotNull(); + + regionAttributesFactory.afterPropertiesSet(); + + RegionAttributes sessionRegionAttributes = regionAttributesFactory.getObject(); + + assertThat(sessionRegionAttributes).isNotNull(); + assertThat(sessionRegionAttributes.getKeyConstraint()).isEqualTo( + GemFireHttpSessionConfiguration.SPRING_SESSION_GEMFIRE_REGION_KEY_CONSTRAINT); + assertThat(sessionRegionAttributes.getValueConstraint()).isEqualTo( + GemFireHttpSessionConfiguration.SPRING_SESSION_GEMFIRE_REGION_VALUE_CONSTRAINT); + + ExpirationAttributes entryIdleTimeoutExpiration = sessionRegionAttributes.getEntryIdleTimeout(); + + assertThat(entryIdleTimeoutExpiration).isNotNull(); + assertThat(entryIdleTimeoutExpiration.getAction()).isEqualTo(ExpirationAction.INVALIDATE); + assertThat(entryIdleTimeoutExpiration.getTimeout()).isEqualTo(0); + } + + @Test + public void expirationIsAllowed() { + Cache mockCache = mock(Cache.class); + + ClientCache mockClientCache = mock(ClientCache.class); + + this.gemfireConfiguration.setClientRegionShortcut(ClientRegionShortcut.PROXY); + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.REPLICATE); + + assertThat(this.gemfireConfiguration.isExpirationAllowed(mockCache)).isTrue(); + + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT_OVERFLOW); + + assertThat(this.gemfireConfiguration.isExpirationAllowed(mockCache)).isTrue(); + + this.gemfireConfiguration.setClientRegionShortcut(ClientRegionShortcut.CACHING_PROXY); + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.PARTITION_PROXY); + + assertThat(this.gemfireConfiguration.isExpirationAllowed(mockClientCache)).isTrue(); + + this.gemfireConfiguration.setClientRegionShortcut(ClientRegionShortcut.LOCAL_PERSISTENT_OVERFLOW); + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.REPLICATE_PROXY); + + assertThat(this.gemfireConfiguration.isExpirationAllowed(mockClientCache)).isTrue(); + } + + @Test + public void expirationIsNotAllowed() { + Cache mockCache = mock(Cache.class); + ClientCache mockClientCache = mock(ClientCache.class); + + this.gemfireConfiguration.setClientRegionShortcut(ClientRegionShortcut.PROXY); + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.PARTITION); + + assertThat(this.gemfireConfiguration.isExpirationAllowed(mockClientCache)).isFalse(); + + this.gemfireConfiguration.setClientRegionShortcut(ClientRegionShortcut.LOCAL); + this.gemfireConfiguration.setServerRegionShortcut(RegionShortcut.PARTITION_PROXY); + + assertThat(this.gemfireConfiguration.isExpirationAllowed(mockCache)).isFalse(); + } +} diff --git a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java new file mode 100644 index 0000000..fd24f6c --- /dev/null +++ b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java @@ -0,0 +1,295 @@ +/* + * Copyright 2014-2017 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 org.springframework.session.data.gemfire.config.annotation.web.http.support; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.InterestResultPolicy; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.ClientRegionShortcut; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.data.gemfire.client.Interest; +import org.springframework.session.ExpiringSession; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * The GemFireCacheTypeAwareRegionFactoryBeanTest class is a test suite of test cases + * testing the contract and functionality of the GemFireCacheTypeAwareRegionFactoryBean + * class. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Rule + * @see org.junit.Test + * @see org.junit.rules.ExpectedException + * @see org.mockito.Mockito + * @see org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBean + * @see org.apache.geode.cache.Cache + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.cache.InterestResultPolicy + * @see org.apache.geode.cache.Region + * @see org.apache.geode.cache.RegionAttributes + * @see org.apache.geode.cache.RegionShortcut + * @see org.apache.geode.cache.client.ClientCache + * @see org.apache.geode.cache.client.ClientRegionShortcut + */ +@RunWith(MockitoJUnitRunner.class) +public class GemFireCacheTypeAwareRegionFactoryBeanTest { + + @Rule + public ExpectedException exception = ExpectedException.none(); + + @Mock + Cache mockCache; + + @Mock + ClientCache mockClientCache; + + @Mock + Region mockClientRegion; + + @Mock + Region mockServerRegion; + + private GemFireCacheTypeAwareRegionFactoryBean regionFactoryBean; + + @Before + public void setup() { + this.regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean(); + } + + protected void afterPropertiesSetCreatesCorrectRegionForGemFireCacheType(final GemFireCache expectedCache, + Region expectedRegion) throws Exception { + + this.regionFactoryBean = new GemFireCacheTypeAwareRegionFactoryBean() { + @Override + protected Region newClientRegion(GemFireCache gemfireCache) throws Exception { + assertThat(gemfireCache).isSameAs(expectedCache); + return GemFireCacheTypeAwareRegionFactoryBeanTest.this.mockClientRegion; + } + + @Override + protected Region newServerRegion(GemFireCache gemfireCache) throws Exception { + assertThat(gemfireCache).isSameAs(expectedCache); + return GemFireCacheTypeAwareRegionFactoryBeanTest.this.mockServerRegion; + } + }; + + this.regionFactoryBean.setGemfireCache(expectedCache); + this.regionFactoryBean.afterPropertiesSet(); + + assertThat(this.regionFactoryBean.getGemfireCache()).isSameAs(expectedCache); + assertThat(this.regionFactoryBean.getObject()).isEqualTo(expectedRegion); + assertThat(this.regionFactoryBean.getObjectType()).isEqualTo(expectedRegion.getClass()); + } + + @Test + public void afterPropertiesSetCreatesClientRegionForClientCache() throws Exception { + afterPropertiesSetCreatesCorrectRegionForGemFireCacheType(this.mockClientCache, this.mockClientRegion); + } + + @Test + public void afterPropertiesSetCreatesServerRegionForPeerCache() throws Exception { + afterPropertiesSetCreatesCorrectRegionForGemFireCacheType(this.mockCache, this.mockServerRegion); + } + + @Test + public void allKeysInterestsRegistration() { + Interest[] interests = this.regionFactoryBean.registerInterests(true); + + assertThat(interests).isNotNull(); + assertThat(interests.length).isEqualTo(1); + assertThat(interests[0].isDurable()).isFalse(); + assertThat(interests[0].getKey().toString()).isEqualTo("ALL_KEYS"); + assertThat(interests[0].getPolicy()).isEqualTo(InterestResultPolicy.KEYS); + assertThat(interests[0].isReceiveValues()).isTrue(); + } + + @Test + public void emptyInterestsRegistration() { + Interest[] interests = this.regionFactoryBean.registerInterests(false); + + assertThat(interests).isNotNull(); + assertThat(interests.length).isEqualTo(0); + } + + @Test + public void getObjectTypeBeforeInitializationIsRegionClass() { + assertThat(this.regionFactoryBean.getObjectType()).isEqualTo(Region.class); + } + + @Test + public void isSingletonIsTrue() { + assertThat(this.regionFactoryBean.isSingleton()).isTrue(); + } + + @Test + public void setAndGetBeanFactory() { + BeanFactory mockBeanFactory = mock(BeanFactory.class); + + this.regionFactoryBean.setBeanFactory(mockBeanFactory); + + assertThat(this.regionFactoryBean.getBeanFactory()).isEqualTo(mockBeanFactory); + } + + @Test + public void setBeanFactoryToNullThrowsIllegalArgumentException() { + this.exception.expect(IllegalArgumentException.class); + this.exception.expectMessage("BeanFactory must not be null"); + this.regionFactoryBean.setBeanFactory(null); + } + + @Test + public void getBeanFactoryWhenNullThrowsIllegalStateException() { + this.exception.expect(IllegalStateException.class); + this.exception.expectMessage("A reference to the BeanFactory was not properly configured"); + this.regionFactoryBean.getBeanFactory(); + } + + @Test + public void setAndGetClientRegionShortcut() { + assertThat(this.regionFactoryBean.getClientRegionShortcut()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_CLIENT_REGION_SHORTCUT); + + this.regionFactoryBean.setClientRegionShortcut(ClientRegionShortcut.LOCAL_PERSISTENT); + + assertThat(this.regionFactoryBean.getClientRegionShortcut()).isEqualTo( + ClientRegionShortcut.LOCAL_PERSISTENT); + + this.regionFactoryBean.setClientRegionShortcut(null); + + assertThat(this.regionFactoryBean.getClientRegionShortcut()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_CLIENT_REGION_SHORTCUT); + } + + @Test + public void setAndGetGemfireCache() { + Cache mockCache = mock(Cache.class); + + this.regionFactoryBean.setGemfireCache(mockCache); + + assertThat(this.regionFactoryBean.getGemfireCache()).isEqualTo(mockCache); + } + + @Test + public void setGemfireCacheToNullThrowsIllegalArgumentException() { + this.exception.expect(IllegalArgumentException.class); + this.exception.expectMessage("GemFireCache must not be null"); + this.regionFactoryBean.setGemfireCache(null); + } + + @Test + public void getGemfireCacheWhenNullThrowsIllegalStateException() { + this.exception.expect(IllegalStateException.class); + this.exception.expectMessage("A reference to the GemFireCache was not properly configured"); + this.regionFactoryBean.getGemfireCache(); + } + + @Test + public void setAndGetPoolName() { + assertThat(this.regionFactoryBean.getPoolName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_GEMFIRE_POOL_NAME); + + this.regionFactoryBean.setPoolName("TestPoolName"); + + assertThat(this.regionFactoryBean.getPoolName()).isEqualTo("TestPoolName"); + + this.regionFactoryBean.setPoolName(" "); + + assertThat(this.regionFactoryBean.getPoolName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_GEMFIRE_POOL_NAME); + + this.regionFactoryBean.setPoolName(""); + + assertThat(this.regionFactoryBean.getPoolName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_GEMFIRE_POOL_NAME); + + this.regionFactoryBean.setPoolName(null); + + assertThat(this.regionFactoryBean.getPoolName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_GEMFIRE_POOL_NAME); + } + + @Test + @SuppressWarnings("unchecked") + public void setAndGetRegionAttributes() { + RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); + + assertThat(this.regionFactoryBean.getRegionAttributes()).isNull(); + + this.regionFactoryBean.setRegionAttributes(mockRegionAttributes); + + assertThat(this.regionFactoryBean.getRegionAttributes()).isSameAs(mockRegionAttributes); + + this.regionFactoryBean.setRegionAttributes(null); + + assertThat(this.regionFactoryBean.getRegionAttributes()).isNull(); + } + + @Test + public void setAndGetRegionName() { + assertThat(this.regionFactoryBean.getRegionName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + + this.regionFactoryBean.setRegionName("Example"); + + assertThat(this.regionFactoryBean.getRegionName()).isEqualTo("Example"); + + this.regionFactoryBean.setRegionName(" "); + + assertThat(this.regionFactoryBean.getRegionName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + + this.regionFactoryBean.setRegionName(""); + + assertThat(this.regionFactoryBean.getRegionName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + + this.regionFactoryBean.setRegionName(null); + + assertThat(this.regionFactoryBean.getRegionName()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + } + + @Test + public void setAndGetServerRegionShortcut() { + assertThat(this.regionFactoryBean.getServerRegionShortcut()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_SERVER_REGION_SHORTCUT); + + this.regionFactoryBean.setServerRegionShortcut(RegionShortcut.LOCAL_PERSISTENT); + + assertThat(this.regionFactoryBean.getServerRegionShortcut()).isEqualTo(RegionShortcut.LOCAL_PERSISTENT); + + this.regionFactoryBean.setServerRegionShortcut(null); + + assertThat(this.regionFactoryBean.getServerRegionShortcut()).isEqualTo( + GemFireCacheTypeAwareRegionFactoryBean.DEFAULT_SERVER_REGION_SHORTCUT); + } +} diff --git a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.java b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.java new file mode 100644 index 0000000..d0e767f --- /dev/null +++ b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.java @@ -0,0 +1,132 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.config.annotation.web.http.support; + +import org.apache.geode.cache.query.Index; + +import org.junit.Before; +import org.junit.Test; + +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Test suite of test cases testing the contract and functionality + * of the {@link SessionAttributesIndexFactoryBean} class. + * + * @author John Blum + * @since 1.3.0 + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBean + */ +public class SessionAttributesIndexFactoryBeanTests { + + static T[] toArray(T... array) { + return array; + } + + private SessionAttributesIndexFactoryBean indexFactoryBean; + + @Before + public void setup() { + this.indexFactoryBean = new SessionAttributesIndexFactoryBean(); + } + + @Test + public void indexIsNotInitializedWhenNoIndexableSessionAttributesAreConfigured() throws Exception { + final Index mockIndex = mock(Index.class); + + SessionAttributesIndexFactoryBean indexFactoryBean = new SessionAttributesIndexFactoryBean() { + @Override + protected Index newIndex() throws Exception { + return mockIndex; + } + }; + + indexFactoryBean.afterPropertiesSet(); + + assertThat(indexFactoryBean.getObject()).isNull(); + assertThat(indexFactoryBean.getObjectType()).isEqualTo(Index.class); + } + + @Test + public void initializesIndexWhenIndexableSessionAttributesAreConfigured() throws Exception { + final Index mockIndex = mock(Index.class); + + SessionAttributesIndexFactoryBean indexFactoryBean = new SessionAttributesIndexFactoryBean() { + @Override + protected Index newIndex() throws Exception { + return mockIndex; + } + }; + + indexFactoryBean.setIndexableSessionAttributes(toArray("one", "two")); + indexFactoryBean.afterPropertiesSet(); + + assertThat(indexFactoryBean.getObject()).isEqualTo(mockIndex); + assertThat(indexFactoryBean.getObjectType()).isEqualTo(mockIndex.getClass()); + } + + @Test + public void isSingletonIsTrue() { + assertThat(this.indexFactoryBean.isSingleton()).isTrue(); + } + + @Test + public void setAndGetIndexableSessionAttributes() { + assertThat(this.indexFactoryBean.getIndexableSessionAttributes()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_INDEXABLE_SESSION_ATTRIBUTES); + + assertThat(this.indexFactoryBean.getIndexableSessionAttributesAsGemFireIndexExpression()).isEqualTo("*"); + + this.indexFactoryBean.setIndexableSessionAttributes(toArray("one", "two", "three")); + + assertThat(this.indexFactoryBean.getIndexableSessionAttributes()).isEqualTo( + toArray("one", "two", "three")); + + assertThat(this.indexFactoryBean.getIndexableSessionAttributesAsGemFireIndexExpression()).isEqualTo( + "'one', 'two', 'three'"); + + this.indexFactoryBean.setIndexableSessionAttributes(toArray("one")); + + assertThat(this.indexFactoryBean.getIndexableSessionAttributes()).isEqualTo(toArray("one")); + assertThat(this.indexFactoryBean.getIndexableSessionAttributesAsGemFireIndexExpression()).isEqualTo("'one'"); + + this.indexFactoryBean.setIndexableSessionAttributes(null); + + assertThat(this.indexFactoryBean.getIndexableSessionAttributes()).isEqualTo( + GemFireHttpSessionConfiguration.DEFAULT_INDEXABLE_SESSION_ATTRIBUTES); + + assertThat(this.indexFactoryBean.getIndexableSessionAttributesAsGemFireIndexExpression()).isEqualTo("*"); + } + + @Test + public void setAndGetRegionName() { + assertThat(this.indexFactoryBean.getRegionName()).isNull(); + + this.indexFactoryBean.setRegionName("Example"); + + assertThat(this.indexFactoryBean.getRegionName()).isEqualTo("Example"); + + this.indexFactoryBean.setRegionName(null); + + assertThat(this.indexFactoryBean.getRegionName()).isNull(); + } +} diff --git a/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/support/GemFireUtilsTest.java b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/support/GemFireUtilsTest.java new file mode 100644 index 0000000..3b28d72 --- /dev/null +++ b/spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/support/GemFireUtilsTest.java @@ -0,0 +1,203 @@ +/* + * Copyright 2014-2016 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 org.springframework.session.data.gemfire.support; + +import java.io.Closeable; +import java.io.IOException; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionAttributes; +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.ClientRegionShortcut; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +/** + * The GemFireUtilsTest class is a test suite of test cases testing the contract and + * functionality of the GemFireUtils utility class. + * + * @author John Blum + * @since 1.1.0 + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.springframework.session.data.gemfire.support.GemFireUtils + */ +public class GemFireUtilsTest { + + @Test + public void closeNonNullCloseableSuccessfullyReturnsTrue() throws IOException { + Closeable mockCloseable = mock(Closeable.class); + assertThat(GemFireUtils.close(mockCloseable)).isTrue(); + verify(mockCloseable, times(1)).close(); + } + + @Test + public void closeNonNullCloseableObjectThrowingIOExceptionReturnsFalse() throws IOException { + Closeable mockCloseable = mock(Closeable.class); + willThrow(new IOException("test")).given(mockCloseable).close(); + assertThat(GemFireUtils.close(mockCloseable)).isFalse(); + verify(mockCloseable, times(1)).close(); + } + + @Test + public void closeNullCloseableObjectReturnsFalse() { + assertThat(GemFireUtils.close(null)).isFalse(); + } + + @Test + public void clientCacheIsClient() { + assertThat(GemFireUtils.isClient(mock(ClientCache.class))).isTrue(); + } + + @Test + public void genericCacheIsNotClient() { + assertThat(GemFireUtils.isClient(mock(GemFireCache.class))).isFalse(); + } + + @Test + public void peerCacheIsNotClient() { + assertThat(GemFireUtils.isClient(mock(Cache.class))).isFalse(); + } + + @Test + public void peerCacheIsPeer() { + assertThat(GemFireUtils.isPeer(mock(Cache.class))).isTrue(); + } + + @Test + public void genericCacheIsNotPeer() { + assertThat(GemFireUtils.isPeer(mock(GemFireCache.class))).isFalse(); + } + + @Test + public void clientCacheIsNotPeer() { + assertThat(GemFireUtils.isPeer(mock(ClientCache.class))).isFalse(); + } + + @Test + public void clientRegionShortcutIsLocal() { + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.LOCAL)).isTrue(); + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.LOCAL_HEAP_LRU)).isTrue(); + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.LOCAL_OVERFLOW)).isTrue(); + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.LOCAL_PERSISTENT)).isTrue(); + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.LOCAL_PERSISTENT_OVERFLOW)).isTrue(); + } + + @Test + public void clientRegionShortcutIsNotLocal() { + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.CACHING_PROXY)).isFalse(); + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.CACHING_PROXY_HEAP_LRU)).isFalse(); + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.CACHING_PROXY_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isLocal(ClientRegionShortcut.PROXY)).isFalse(); + } + + @Test + public void clientRegionShortcutIsProxy() { + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.PROXY)).isTrue(); + } + + @Test + public void clientRegionShortcutIsNotProxy() { + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.CACHING_PROXY)).isFalse(); + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.CACHING_PROXY_HEAP_LRU)).isFalse(); + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.CACHING_PROXY_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.LOCAL)).isFalse(); + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.LOCAL_HEAP_LRU)).isFalse(); + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.LOCAL_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.LOCAL_PERSISTENT)).isFalse(); + assertThat(GemFireUtils.isProxy(ClientRegionShortcut.LOCAL_PERSISTENT_OVERFLOW)).isFalse(); + } + + @Test + public void regionShortcutIsProxy() { + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_PROXY)).isTrue(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_PROXY_REDUNDANT)).isTrue(); + assertThat(GemFireUtils.isProxy(RegionShortcut.REPLICATE_PROXY)).isTrue(); + } + + @Test + public void regionIsProxy() { + Region mockRegion = mock(Region.class); + RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); + + given(mockRegion.getAttributes()).willReturn(mockRegionAttributes); + given(mockRegionAttributes.getDataPolicy()).willReturn(DataPolicy.EMPTY); + + assertThat(GemFireUtils.isProxy(mockRegion)).isTrue(); + + verify(mockRegion, times(1)).getAttributes(); + verify(mockRegionAttributes, times(1)).getDataPolicy(); + } + + @Test + public void regionIsNotProxy() { + Region mockRegion = mock(Region.class); + RegionAttributes mockRegionAttributes = mock(RegionAttributes.class); + + given(mockRegion.getAttributes()).willReturn(mockRegionAttributes); + given(mockRegionAttributes.getDataPolicy()).willReturn(DataPolicy.NORMAL); + + assertThat(GemFireUtils.isProxy(mockRegion)).isFalse(); + + verify(mockRegion, times(1)).getAttributes(); + verify(mockRegionAttributes, times(1)).getDataPolicy(); + } + + @Test + public void regionShortcutIsNotProxy() { + assertThat(GemFireUtils.isProxy(RegionShortcut.LOCAL)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.LOCAL_HEAP_LRU)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.LOCAL_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.LOCAL_PERSISTENT)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.LOCAL_PERSISTENT_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.REPLICATE)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.REPLICATE_HEAP_LRU)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.REPLICATE_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.REPLICATE_PERSISTENT)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.REPLICATE_PERSISTENT_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_HEAP_LRU)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_PERSISTENT)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_PERSISTENT_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_REDUNDANT)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_REDUNDANT_HEAP_LRU)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_REDUNDANT_OVERFLOW)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT)).isFalse(); + assertThat(GemFireUtils.isProxy(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT_OVERFLOW)).isFalse(); + } + + @Test + public void toRegionPath() { + assertThat(GemFireUtils.toRegionPath("A")).isEqualTo("/A"); + assertThat(GemFireUtils.toRegionPath("Example")).isEqualTo("/Example"); + assertThat(GemFireUtils.toRegionPath("/Example")).isEqualTo("//Example"); + assertThat(GemFireUtils.toRegionPath("/")).isEqualTo("//"); + assertThat(GemFireUtils.toRegionPath("")).isEqualTo("/"); + } +} diff --git a/spring-session-data-geode/src/test/resources/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml b/spring-session-data-geode/src/test/resources/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml new file mode 100644 index 0000000..6ccf874 --- /dev/null +++ b/spring-session-data-geode/src/test/resources/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml @@ -0,0 +1,26 @@ + + + + + GemFireHttpSessionXmlConfigurationTests + 0 + warning + + + + + + +