From 35e1ba929b0255e27f5acb6fe9d54045c2c2c324 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 10 May 2017 16:36:14 -0500 Subject: [PATCH] Initial spirng-session-data-geode setup. (cherry picked from commit c5a1ee021016d37dda5e5eb96320ee1be9869314) Signed-off-by: John Blum --- .../.gradle/3.5/file-changes/last-build.bin | Bin 0 -> 1 bytes .../3.5/fileContent/annotation-processors.bin | Bin 0 -> 18551 bytes .../.gradle/3.5/fileContent/fileContent.lock | Bin 0 -> 17 bytes .../.gradle/3.5/taskHistory/fileHashes.bin | Bin 0 -> 19297 bytes .../.gradle/3.5/taskHistory/fileSnapshots.bin | Bin 0 -> 35059 bytes .../.gradle/3.5/taskHistory/taskHistory.bin | Bin 0 -> 35823 bytes .../.gradle/3.5/taskHistory/taskHistory.lock | Bin 0 -> 17 bytes buildSrc/.gradle/buildOutputCleanup/built.bin | 0 .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/cache.properties.lock | 1 + buildSrc/.gradle/noVersion/buildSrc/built.bin | 0 .../noVersion/buildSrc/cache.properties | 2 + .../noVersion/buildSrc/cache.properties.lock | 1 + ...in$GemFireServerTask$_greet_closure1.class | Bin 0 -> 2192 bytes ...emFireServerPlugin$GemFireServerTask.class | Bin 0 -> 6834 bytes .../GemFireServerPlugin$_apply_closure1.class | Bin 0 -> 3083 bytes ...$_apply_closure2$_closure4$_closure5.class | Bin 0 -> 3266 bytes ...rverPlugin$_apply_closure2$_closure4.class | Bin 0 -> 2960 bytes .../GemFireServerPlugin$_apply_closure2.class | Bin 0 -> 3119 bytes ...ServerPlugin$_availablePort_closure3.class | Bin 0 -> 2301 bytes .../main/build/GemFireServerPlugin.class | Bin 0 -> 5608 bytes buildSrc/build/libs/buildSrc.jar | Bin 0 -> 15133 bytes .../gradle-plugins/gemfire-server.properties | 1 + buildSrc/build/tmp/jar/MANIFEST.MF | 2 + .../groovy/build/GemFireServerPlugin.groovy | 70 + .../gradle-plugins/gemfire-server.properties | 1 + docs/spring-session-docs.gradle | 36 + .../docs/asciidoc/guides/boot-gemfire.adoc | 270 +++ .../guides/java-gemfire-clientserver.adoc | 272 +++ .../asciidoc/guides/java-gemfire-p2p.adoc | 209 ++ .../guides/xml-gemfire-clientserver.adoc | 273 +++ .../docs/asciidoc/guides/xml-gemfire-p2p.adoc | 210 ++ docs/src/docs/asciidoc/index.adoc | 1194 +++++++++ .../HttpSessionGemFireIndexingITests.java | 102 + ...ttpSessionGemFireIndexingCustomITests.java | 72 + gradle.properties | 3 + gradle/spring3.gradle | 39 + .../spring-session-sample-boot-gemfire.gradle | 87 + .../java/sample/AttributeTests.java | 76 + .../java/sample/pages/HomePage.java | 151 ++ .../main/java/sample/client/Application.java | 336 +++ .../java/sample/server/GemFireServer.java | 110 + .../sample/server/NativeGemFireServer.java | 186 ++ .../src/main/resources/templates/index.html | 49 + ...ple-javaconfig-gemfire-clientserver.gradle | 22 + .../java/sample/AttributeTests.java | 62 + .../java/sample/pages/HomePage.java | 151 ++ .../src/main/java/sample/ClientConfig.java | 216 ++ .../src/main/java/sample/Initializer.java | 28 + .../src/main/java/sample/ServerConfig.java | 99 + .../src/main/java/sample/SessionServlet.java | 42 + .../src/main/webapp/META-INF/MANIFEST.MF | 0 .../src/main/webapp/index.jsp | 50 + ...ssion-sample-javaconfig-gemfire-p2p.gradle | 19 + .../java/sample/AttributeTests.java | 62 + .../java/sample/pages/HomePage.java | 151 ++ .../src/main/java/sample/Config.java | 53 + .../src/main/java/sample/Initializer.java | 28 + .../src/main/java/sample/SessionServlet.java | 42 + .../src/main/webapp/META-INF/MANIFEST.MF | 0 .../gemfire-p2p/src/main/webapp/index.jsp | 50 + ...ion-sample-xml-gemfire-clientserver.gradle | 22 + .../java/sample/AttributeTests.java | 62 + .../java/sample/pages/HomePage.java | 151 ++ .../src/main/java/sample/Application.java | 33 + ...ireClientServerReadyBeanPostProcessor.java | 148 ++ .../src/main/java/sample/SessionServlet.java | 40 + .../META-INF/spring/application.properties | 2 + .../META-INF/spring/session-server.xml | 48 + .../src/main/webapp/META-INF/MANIFEST.MF | 0 .../webapp/WEB-INF/spring/session-client.xml | 50 + .../src/main/webapp/WEB-INF/web.xml | 53 + .../src/main/webapp/index.jsp | 50 + ...ring-session-sample-xml-gemfire-p2p.gradle | 19 + .../java/sample/AttributeTests.java | 62 + .../java/sample/pages/HomePage.java | 151 ++ .../src/main/java/sample/SessionServlet.java | 40 + .../src/main/webapp/META-INF/MANIFEST.MF | 0 .../main/webapp/WEB-INF/spring/session.xml | 34 + .../src/main/webapp/WEB-INF/web.xml | 57 + .../xml/gemfire-p2p/src/main/webapp/index.jsp | 50 + settings.gradle | 26 + .../AbstractGemFireIntegrationTests$1.class | Bin 0 -> 1489 bytes .../AbstractGemFireIntegrationTests$2.class | Bin 0 -> 978 bytes .../AbstractGemFireIntegrationTests$3.class | Bin 0 -> 919 bytes ...actGemFireIntegrationTests$Condition.class | Bin 0 -> 340 bytes ...egrationTests$SessionEventListener$1.class | Bin 0 -> 1450 bytes ...ntegrationTests$SessionEventListener.class | Bin 0 -> 2478 bytes .../AbstractGemFireIntegrationTests.class | Bin 0 -> 15745 bytes ...essionDataGemFireClientConfiguration.class | Bin 0 -> 5367 bytes ...essionDataGemFireServerConfiguration.class | Bin 0 -> 3740 bytes ...onsSessionRepositoryIntegrationTests.class | Bin 0 -> 10217 bytes ...essionDataGemFireClientConfiguration.class | Bin 0 -> 4806 bytes ...essionDataGemFireServerConfiguration.class | Bin 0 -> 3663 bytes ...ssionAttributesDeltaIntegrationTests.class | Bin 0 -> 6662 bytes ...essionDataGemFireClientConfiguration.class | Bin 0 -> 5150 bytes ...essionDataGemFireServerConfiguration.class | Bin 0 -> 3671 bytes ...ionSessionOperationsIntegrationTests.class | Bin 0 -> 7438 bytes ...ionRepositoryIntegrationTests$Person.class | Bin 0 -> 3408 bytes ...ts$SpringSessionGemFireConfiguration.class | Bin 0 -> 1746 bytes ...onsSessionRepositoryIntegrationTests.class | Bin 0 -> 15207 bytes ...ingSessionGemFireClientConfiguration.class | Bin 0 -> 5936 bytes ...ingSessionGemFireServerConfiguration.class | Bin 0 -> 3925 bytes ...onsSessionRepositoryIntegrationTests.class | Bin 0 -> 9049 bytes ...ts$SpringSessionGemFireConfiguration.class | Bin 0 -> 2362 bytes ...ireHttpSessionEventsIntegrationTests.class | Bin 0 -> 7576 bytes ...figurationTests$GemFireConfiguration.class | Bin 0 -> 2076 bytes ...ireHttpSessionJavaConfigurationTests.class | Bin 0 -> 4515 bytes ...FireHttpSessionXmlConfigurationTests.class | Bin 0 -> 4511 bytes ...GemFireOperationsSessionRepository$1.class | Bin 0 -> 1170 bytes ...ionsSessionRepository$GemFireSession.class | Bin 0 -> 9973 bytes ...epository$GemFireSessionAttributes$1.class | Bin 0 -> 1847 bytes ...nRepository$GemFireSessionAttributes.class | Bin 0 -> 7207 bytes ...GemFireSessionAttributesInstantiator.class | Bin 0 -> 1421 bytes ...epository$GemFireSessionInstantiator.class | Bin 0 -> 1361 bytes ...ctGemFireOperationsSessionRepository.class | Bin 0 -> 10716 bytes .../GemFireOperationsSessionRepository.class | Bin 0 -> 4886 bytes .../web/http/EnableGemFireHttpSession.class | Bin 0 -> 1306 bytes .../GemFireHttpSessionConfiguration.class | Bin 0 -> 12415 bytes ...mFireCacheTypeAwareRegionFactoryBean.class | Bin 0 -> 9864 bytes .../SessionAttributesIndexFactoryBean.class | Bin 0 -> 5582 bytes .../data/gemfire/support/GemFireUtils$1.class | Bin 0 -> 1492 bytes .../data/gemfire/support/GemFireUtils.class | Bin 0 -> 3048 bytes ...ireOperationsSessionRepositoryTest$1.class | Bin 0 -> 1460 bytes ...reOperationsSessionRepositoryTest$10.class | Bin 0 -> 2919 bytes ...reOperationsSessionRepositoryTest$11.class | Bin 0 -> 2801 bytes ...reOperationsSessionRepositoryTest$12.class | Bin 0 -> 2819 bytes ...reOperationsSessionRepositoryTest$13.class | Bin 0 -> 3164 bytes ...reOperationsSessionRepositoryTest$14.class | Bin 0 -> 2917 bytes ...reOperationsSessionRepositoryTest$15.class | Bin 0 -> 2799 bytes ...reOperationsSessionRepositoryTest$16.class | Bin 0 -> 1867 bytes ...reOperationsSessionRepositoryTest$17.class | Bin 0 -> 2143 bytes ...reOperationsSessionRepositoryTest$18.class | Bin 0 -> 1921 bytes ...reOperationsSessionRepositoryTest$19.class | Bin 0 -> 1654 bytes ...ireOperationsSessionRepositoryTest$2.class | Bin 0 -> 2913 bytes ...reOperationsSessionRepositoryTest$20.class | Bin 0 -> 1890 bytes ...reOperationsSessionRepositoryTest$21.class | Bin 0 -> 1702 bytes ...reOperationsSessionRepositoryTest$22.class | Bin 0 -> 2149 bytes ...reOperationsSessionRepositoryTest$23.class | Bin 0 -> 1980 bytes ...reOperationsSessionRepositoryTest$24.class | Bin 0 -> 2174 bytes ...reOperationsSessionRepositoryTest$25.class | Bin 0 -> 2001 bytes ...ireOperationsSessionRepositoryTest$3.class | Bin 0 -> 2795 bytes ...ireOperationsSessionRepositoryTest$4.class | Bin 0 -> 1647 bytes ...ireOperationsSessionRepositoryTest$5.class | Bin 0 -> 1643 bytes ...ireOperationsSessionRepositoryTest$6.class | Bin 0 -> 1645 bytes ...ireOperationsSessionRepositoryTest$7.class | Bin 0 -> 2918 bytes ...ireOperationsSessionRepositoryTest$8.class | Bin 0 -> 2800 bytes ...ireOperationsSessionRepositoryTest$9.class | Bin 0 -> 2818 bytes ...stGemFireOperationsSessionRepository.class | Bin 0 -> 2340 bytes ...RepositoryTest$ThreadSafeSessionTest.class | Bin 0 -> 4750 bytes ...tionsSessionRepositoryTest$Tombstone.class | Bin 0 -> 601 bytes ...mFireOperationsSessionRepositoryTest.class | Bin 0 -> 41530 bytes ...ireOperationsSessionRepositoryTest$1.class | Bin 0 -> 2853 bytes ...ireOperationsSessionRepositoryTest$2.class | Bin 0 -> 2950 bytes ...ireOperationsSessionRepositoryTest$3.class | Bin 0 -> 2854 bytes ...ireOperationsSessionRepositoryTest$4.class | Bin 0 -> 2737 bytes ...sitoryTest$GemfireOperationsAccessor.class | Bin 0 -> 920 bytes ...mFireOperationsSessionRepositoryTest.class | Bin 0 -> 14553 bytes .../GemFireHttpSessionConfigurationTest.class | Bin 0 -> 14470 bytes ...acheTypeAwareRegionFactoryBeanTest$1.class | Bin 0 -> 2404 bytes ...eCacheTypeAwareRegionFactoryBeanTest.class | Bin 0 -> 10169 bytes ...ionAttributesIndexFactoryBeanTests$1.class | Bin 0 -> 1399 bytes ...ionAttributesIndexFactoryBeanTests$2.class | Bin 0 -> 1392 bytes ...ssionAttributesIndexFactoryBeanTests.class | Bin 0 -> 4634 bytes .../gemfire/support/GemFireUtilsTest.class | Bin 0 -> 7105 bytes .../build/docs/javadoc/allclasses-frame.html | 29 + .../docs/javadoc/allclasses-noframe.html | 29 + .../build/docs/javadoc/constant-values.html | 259 ++ .../build/docs/javadoc/deprecated-list.html | 122 + .../build/docs/javadoc/help-doc.html | 223 ++ .../build/docs/javadoc/index-all.html | 841 +++++++ .../build/docs/javadoc/index.html | 75 + ...tionsSessionRepository.GemFireSession.html | 833 +++++++ ...onRepository.GemFireSessionAttributes.html | 611 +++++ ....GemFireSessionAttributesInstantiator.html | 307 +++ ...Repository.GemFireSessionInstantiator.html | 307 +++ ...actGemFireOperationsSessionRepository.html | 864 +++++++ .../GemFireOperationsSessionRepository.html | 551 +++++ .../web/http/EnableGemFireHttpSession.html | 474 ++++ .../http/GemFireHttpSessionConfiguration.html | 1021 ++++++++ .../annotation/web/http/package-frame.html | 24 + .../annotation/web/http/package-summary.html | 163 ++ .../annotation/web/http/package-tree.html | 143 ++ ...emFireCacheTypeAwareRegionFactoryBean.html | 936 +++++++ .../SessionAttributesIndexFactoryBean.html | 559 +++++ .../web/http/support/package-frame.html | 21 + .../web/http/support/package-summary.html | 151 ++ .../web/http/support/package-tree.html | 136 ++ .../session/data/gemfire/package-frame.html | 25 + .../session/data/gemfire/package-summary.html | 181 ++ .../session/data/gemfire/package-tree.html | 155 ++ .../data/gemfire/support/GemFireUtils.html | 467 ++++ .../data/gemfire/support/package-frame.html | 20 + .../data/gemfire/support/package-summary.html | 143 ++ .../data/gemfire/support/package-tree.html | 135 ++ .../build/docs/javadoc/overview-frame.html | 24 + .../build/docs/javadoc/overview-summary.html | 148 ++ .../build/docs/javadoc/overview-tree.html | 170 ++ .../build/docs/javadoc/package-list | 4 + .../build/docs/javadoc/script.js | 30 + .../build/docs/javadoc/serialized-form.html | 217 ++ .../build/docs/javadoc/stylesheet.css | 574 +++++ ...tionsSessionRepositoryIntegrationTests.xml | 130 + ...SessionAttributesDeltaIntegrationTests.xml | 61 + ...egionSessionOperationsIntegrationTests.xml | 61 + ...tionsSessionRepositoryIntegrationTests.xml | 1981 +++++++++++++++ ...tionsSessionRepositoryIntegrationTests.xml | 61 + ...mFireHttpSessionEventsIntegrationTests.xml | 1981 +++++++++++++++ ...mFireHttpSessionJavaConfigurationTests.xml | 857 +++++++ ...emFireHttpSessionXmlConfigurationTests.xml | 643 +++++ .../build/jacoco/integrationTest.exec | Bin 0 -> 100672 bytes .../build/jacoco/test.exec | Bin 0 -> 132951 bytes ...ata-geode-2.0.0.BUILD-SNAPSHOT-javadoc.jar | Bin 0 -> 96466 bytes ...ata-geode-2.0.0.BUILD-SNAPSHOT-sources.jar | Bin 0 -> 24788 bytes ...ession-data-geode-2.0.0.BUILD-SNAPSHOT.jar | Bin 0 -> 33379 bytes ...ionsSessionRepositoryIntegrationTests.html | 248 ++ ...essionAttributesDeltaIntegrationTests.html | 179 ++ ...gionSessionOperationsIntegrationTests.html | 179 ++ ...ionsSessionRepositoryIntegrationTests.html | 2144 +++++++++++++++++ ...ionsSessionRepositoryIntegrationTests.html | 179 ++ ...FireHttpSessionEventsIntegrationTests.html | 2144 +++++++++++++++++ ...FireHttpSessionJavaConfigurationTests.html | 984 ++++++++ ...mFireHttpSessionXmlConfigurationTests.html | 770 ++++++ .../integration-tests/css/base-style.css | 179 ++ .../reports/integration-tests/css/style.css | 84 + .../reports/integration-tests/index.html | 309 +++ .../reports/integration-tests/js/report.js | 194 ++ ...ta.gemfire.config.annotation.web.http.html | 183 ++ ....springframework.session.data.gemfire.html | 195 ++ ...emFireOperationsSessionRepositoryTest.html | 500 ++++ ...emFireOperationsSessionRepositoryTest.html | 151 ++ ...p.GemFireHttpSessionConfigurationTest.html | 161 ++ ...reCacheTypeAwareRegionFactoryBeanTest.html | 176 ++ ...essionAttributesIndexFactoryBeanTests.html | 116 + ...data.gemfire.support.GemFireUtilsTest.html | 181 ++ .../reports/tests/test/css/base-style.css | 179 ++ .../build/reports/tests/test/css/style.css | 84 + .../build/reports/tests/test/index.html | 207 ++ .../build/reports/tests/test/js/report.js | 194 ++ ...ta.gemfire.config.annotation.web.http.html | 103 + ...re.config.annotation.web.http.support.html | 113 + ....springframework.session.data.gemfire.html | 113 + ...ramework.session.data.gemfire.support.html | 103 + ...tpSessionXmlConfigurationTests-context.xml | 26 + .../integrationTest/binary/output.bin | Bin 0 -> 367451 bytes .../integrationTest/binary/output.bin.idx | Bin 0 -> 281 bytes .../integrationTest/binary/results.bin | Bin 0 -> 321285 bytes ...GemFireOperationsSessionRepositoryTest.xml | 153 ++ ...GemFireOperationsSessionRepositoryTest.xml | 18 + ...tp.GemFireHttpSessionConfigurationTest.xml | 20 + ...ireCacheTypeAwareRegionFactoryBeanTest.xml | 23 + ...SessionAttributesIndexFactoryBeanTests.xml | 11 + ....data.gemfire.support.GemFireUtilsTest.xml | 24 + .../build/test-results/test/binary/output.bin | Bin 0 -> 7675 bytes .../test-results/test/binary/output.bin.idx | Bin 0 -> 36 bytes .../test-results/test/binary/results.bin | Bin 0 -> 6992 bytes .../META-INF/MANIFEST.MF | 31 + .../META-INF/MTNMINDS.RSA | Bin 0 -> 8508 bytes .../META-INF/MTNMINDS.SF | 20 + .../org.jacoco.agent/pom.properties | 5 + .../maven/org.jacoco/org.jacoco.agent/pom.xml | 83 + .../about.html | 73 + .../jacocoagent.jar | Bin 0 -> 273542 bytes .../org/jacoco/agent/AgentJar.class | Bin 0 -> 2322 bytes .../build/tmp/jar/MANIFEST.MF | 2 + .../build/tmp/javadoc/javadoc.options | 13 + .../build/tmp/javadocJar/MANIFEST.MF | 2 + .../build/tmp/sourcesJar/MANIFEST.MF | 2 + .../test/jar_extract_3534788898651611142_tmp | Bin 0 -> 6225 bytes .../test/jar_extract_3883784754140269879_tmp | Bin 0 -> 2151 bytes .../test/jar_extract_4722192187809226552_tmp | Bin 0 -> 6715 bytes .../test/jar_extract_6068052779162431878_tmp | Bin 0 -> 2175 bytes .../test/jar_extract_6126860805247402580_tmp | 0 .../spring-session-data-geode.gradle | 21 + .../AbstractGemFireIntegrationTests.java | 460 ++++ ...ionsSessionRepositoryIntegrationTests.java | 374 +++ ...essionAttributesDeltaIntegrationTests.java | 285 +++ ...gionSessionOperationsIntegrationTests.java | 309 +++ ...ionsSessionRepositoryIntegrationTests.java | 459 ++++ ...ionsSessionRepositoryIntegrationTests.java | 344 +++ ...FireHttpSessionEventsIntegrationTests.java | 254 ++ ...FireHttpSessionJavaConfigurationTests.java | 148 ++ ...mFireHttpSessionXmlConfigurationTests.java | 113 + ...actGemFireOperationsSessionRepository.java | 956 ++++++++ .../GemFireOperationsSessionRepository.java | 155 ++ .../web/http/EnableGemFireHttpSession.java | 170 ++ .../http/GemFireHttpSessionConfiguration.java | 487 ++++ ...emFireCacheTypeAwareRegionFactoryBean.java | 384 +++ .../SessionAttributesIndexFactoryBean.java | 175 ++ .../data/gemfire/support/GemFireUtils.java | 170 ++ ...emFireOperationsSessionRepositoryTest.java | 1909 +++++++++++++++ ...emFireOperationsSessionRepositoryTest.java | 436 ++++ .../GemFireHttpSessionConfigurationTest.java | 407 ++++ ...reCacheTypeAwareRegionFactoryBeanTest.java | 295 +++ ...essionAttributesIndexFactoryBeanTests.java | 132 + .../gemfire/support/GemFireUtilsTest.java | 203 ++ ...tpSessionXmlConfigurationTests-context.xml | 26 + 297 files changed, 42205 insertions(+) create mode 100644 buildSrc/.gradle/3.5/file-changes/last-build.bin create mode 100644 buildSrc/.gradle/3.5/fileContent/annotation-processors.bin create mode 100644 buildSrc/.gradle/3.5/fileContent/fileContent.lock create mode 100644 buildSrc/.gradle/3.5/taskHistory/fileHashes.bin create mode 100644 buildSrc/.gradle/3.5/taskHistory/fileSnapshots.bin create mode 100644 buildSrc/.gradle/3.5/taskHistory/taskHistory.bin create mode 100644 buildSrc/.gradle/3.5/taskHistory/taskHistory.lock create mode 100644 buildSrc/.gradle/buildOutputCleanup/built.bin create mode 100644 buildSrc/.gradle/buildOutputCleanup/cache.properties create mode 100644 buildSrc/.gradle/buildOutputCleanup/cache.properties.lock create mode 100644 buildSrc/.gradle/noVersion/buildSrc/built.bin create mode 100644 buildSrc/.gradle/noVersion/buildSrc/cache.properties create mode 100644 buildSrc/.gradle/noVersion/buildSrc/cache.properties.lock create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask$_greet_closure1.class create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin$GemFireServerTask.class create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure1.class create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4$_closure5.class create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2$_closure4.class create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin$_apply_closure2.class create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin$_availablePort_closure3.class create mode 100644 buildSrc/build/classes/main/build/GemFireServerPlugin.class create mode 100644 buildSrc/build/libs/buildSrc.jar create mode 100644 buildSrc/build/resources/main/META-INF/gradle-plugins/gemfire-server.properties create mode 100644 buildSrc/build/tmp/jar/MANIFEST.MF create mode 100644 buildSrc/src/main/groovy/build/GemFireServerPlugin.groovy create mode 100644 buildSrc/src/main/resources/META-INF/gradle-plugins/gemfire-server.properties create mode 100644 docs/spring-session-docs.gradle create mode 100644 docs/src/docs/asciidoc/guides/boot-gemfire.adoc create mode 100644 docs/src/docs/asciidoc/guides/java-gemfire-clientserver.adoc create mode 100644 docs/src/docs/asciidoc/guides/java-gemfire-p2p.adoc create mode 100644 docs/src/docs/asciidoc/guides/xml-gemfire-clientserver.adoc create mode 100644 docs/src/docs/asciidoc/guides/xml-gemfire-p2p.adoc create mode 100644 docs/src/docs/asciidoc/index.adoc create mode 100644 docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java create mode 100644 docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/HttpSessionGemFireIndexingCustomITests.java create mode 100644 gradle.properties create mode 100644 gradle/spring3.gradle create mode 100644 samples/boot/gemfire/spring-session-sample-boot-gemfire.gradle create mode 100644 samples/boot/gemfire/src/integration-test/java/sample/AttributeTests.java create mode 100644 samples/boot/gemfire/src/integration-test/java/sample/pages/HomePage.java create mode 100644 samples/boot/gemfire/src/main/java/sample/client/Application.java create mode 100644 samples/boot/gemfire/src/main/java/sample/server/GemFireServer.java create mode 100644 samples/boot/gemfire/src/main/java/sample/server/NativeGemFireServer.java create mode 100644 samples/boot/gemfire/src/main/resources/templates/index.html create mode 100644 samples/javaconfig/gemfire-clientserver/spring-session-sample-javaconfig-gemfire-clientserver.gradle create mode 100644 samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java create mode 100644 samples/javaconfig/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java create mode 100644 samples/javaconfig/gemfire-clientserver/src/main/java/sample/ClientConfig.java create mode 100644 samples/javaconfig/gemfire-clientserver/src/main/java/sample/Initializer.java create mode 100644 samples/javaconfig/gemfire-clientserver/src/main/java/sample/ServerConfig.java create mode 100644 samples/javaconfig/gemfire-clientserver/src/main/java/sample/SessionServlet.java create mode 100644 samples/javaconfig/gemfire-clientserver/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 samples/javaconfig/gemfire-clientserver/src/main/webapp/index.jsp create mode 100644 samples/javaconfig/gemfire-p2p/spring-session-sample-javaconfig-gemfire-p2p.gradle create mode 100644 samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java create mode 100644 samples/javaconfig/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java create mode 100644 samples/javaconfig/gemfire-p2p/src/main/java/sample/Config.java create mode 100644 samples/javaconfig/gemfire-p2p/src/main/java/sample/Initializer.java create mode 100644 samples/javaconfig/gemfire-p2p/src/main/java/sample/SessionServlet.java create mode 100644 samples/javaconfig/gemfire-p2p/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 samples/javaconfig/gemfire-p2p/src/main/webapp/index.jsp create mode 100644 samples/xml/gemfire-clientserver/spring-session-sample-xml-gemfire-clientserver.gradle create mode 100644 samples/xml/gemfire-clientserver/src/integration-test/java/sample/AttributeTests.java create mode 100644 samples/xml/gemfire-clientserver/src/integration-test/java/sample/pages/HomePage.java create mode 100644 samples/xml/gemfire-clientserver/src/main/java/sample/Application.java create mode 100644 samples/xml/gemfire-clientserver/src/main/java/sample/GemFireClientServerReadyBeanPostProcessor.java create mode 100644 samples/xml/gemfire-clientserver/src/main/java/sample/SessionServlet.java create mode 100644 samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/application.properties create mode 100644 samples/xml/gemfire-clientserver/src/main/resources/META-INF/spring/session-server.xml create mode 100644 samples/xml/gemfire-clientserver/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/spring/session-client.xml create mode 100644 samples/xml/gemfire-clientserver/src/main/webapp/WEB-INF/web.xml create mode 100644 samples/xml/gemfire-clientserver/src/main/webapp/index.jsp create mode 100644 samples/xml/gemfire-p2p/spring-session-sample-xml-gemfire-p2p.gradle create mode 100644 samples/xml/gemfire-p2p/src/integration-test/java/sample/AttributeTests.java create mode 100644 samples/xml/gemfire-p2p/src/integration-test/java/sample/pages/HomePage.java create mode 100644 samples/xml/gemfire-p2p/src/main/java/sample/SessionServlet.java create mode 100644 samples/xml/gemfire-p2p/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/spring/session.xml create mode 100644 samples/xml/gemfire-p2p/src/main/webapp/WEB-INF/web.xml create mode 100644 samples/xml/gemfire-p2p/src/main/webapp/index.jsp create mode 100644 settings.gradle create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$1.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$2.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$3.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$Condition.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener$1.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests$SessionEventListener.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireClientConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionDataGemFireServerConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireClientConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests$SpringSessionDataGemFireServerConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireClientConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests$SpringSessionDataGemFireServerConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$Person.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireClientConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests$SpringSessionGemFireServerConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests$SpringSessionGemFireConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests$GemFireConfiguration.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.class create mode 100644 spring-session-data-geode/build/classes/integrationTest/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$1.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSession.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes$1.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributes.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionAttributesInstantiator.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository$GemFireSessionInstantiator.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils$1.class create mode 100644 spring-session-data-geode/build/classes/main/org/springframework/session/data/gemfire/support/GemFireUtils.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$1.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$10.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$11.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$12.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$13.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$14.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$15.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$16.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$17.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$18.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$19.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$2.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$20.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$21.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$22.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$23.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$24.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$25.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$3.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$4.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$5.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$6.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$7.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$8.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$9.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$TestGemFireOperationsSessionRepository.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$ThreadSafeSessionTest.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest$Tombstone.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$1.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$2.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$3.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$4.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest$GemfireOperationsAccessor.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest$1.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$1.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests$2.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.class create mode 100644 spring-session-data-geode/build/classes/test/org/springframework/session/data/gemfire/support/GemFireUtilsTest.class create mode 100644 spring-session-data-geode/build/docs/javadoc/allclasses-frame.html create mode 100644 spring-session-data-geode/build/docs/javadoc/allclasses-noframe.html create mode 100644 spring-session-data-geode/build/docs/javadoc/constant-values.html create mode 100644 spring-session-data-geode/build/docs/javadoc/deprecated-list.html create mode 100644 spring-session-data-geode/build/docs/javadoc/help-doc.html create mode 100644 spring-session-data-geode/build/docs/javadoc/index-all.html create mode 100644 spring-session-data-geode/build/docs/javadoc/index.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSession.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributes.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionAttributesInstantiator.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.GemFireSessionInstantiator.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-frame.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-summary.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/package-tree.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-frame.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-summary.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/config/annotation/web/http/support/package-tree.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-frame.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-summary.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/package-tree.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/GemFireUtils.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-frame.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-summary.html create mode 100644 spring-session-data-geode/build/docs/javadoc/org/springframework/session/data/gemfire/support/package-tree.html create mode 100644 spring-session-data-geode/build/docs/javadoc/overview-frame.html create mode 100644 spring-session-data-geode/build/docs/javadoc/overview-summary.html create mode 100644 spring-session-data-geode/build/docs/javadoc/overview-tree.html create mode 100644 spring-session-data-geode/build/docs/javadoc/package-list create mode 100644 spring-session-data-geode/build/docs/javadoc/script.js create mode 100644 spring-session-data-geode/build/docs/javadoc/serialized-form.html create mode 100644 spring-session-data-geode/build/docs/javadoc/stylesheet.css create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.xml create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.xml create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.xml create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.xml create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.xml create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.xml create mode 100644 spring-session-data-geode/build/integration-test-results/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.xml create mode 100644 spring-session-data-geode/build/jacoco/integrationTest.exec create mode 100644 spring-session-data-geode/build/jacoco/test.exec create mode 100644 spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-javadoc.jar create mode 100644 spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT-sources.jar create mode 100644 spring-session-data-geode/build/libs/spring-session-data-geode-2.0.0.BUILD-SNAPSHOT.jar create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerGemFireOperationsSessionRepositoryIntegrationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerHttpSessionAttributesDeltaIntegrationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.ClientServerProxyRegionSessionOperationsIntegrationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryIntegrationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSessionEventsIntegrationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionJavaConfigurationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionXmlConfigurationTests.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/css/base-style.css create mode 100644 spring-session-data-geode/build/reports/integration-tests/css/style.css create mode 100644 spring-session-data-geode/build/reports/integration-tests/index.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/js/report.js create mode 100644 spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html create mode 100644 spring-session-data-geode/build/reports/integration-tests/packages/org.springframework.session.data.gemfire.html create mode 100644 spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.html create mode 100644 spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.html create mode 100644 spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.html create mode 100644 spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.html create mode 100644 spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.html create mode 100644 spring-session-data-geode/build/reports/tests/test/classes/org.springframework.session.data.gemfire.support.GemFireUtilsTest.html create mode 100644 spring-session-data-geode/build/reports/tests/test/css/base-style.css create mode 100644 spring-session-data-geode/build/reports/tests/test/css/style.css create mode 100644 spring-session-data-geode/build/reports/tests/test/index.html create mode 100644 spring-session-data-geode/build/reports/tests/test/js/report.js create mode 100644 spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.html create mode 100644 spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.config.annotation.web.http.support.html create mode 100644 spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.html create mode 100644 spring-session-data-geode/build/reports/tests/test/packages/org.springframework.session.data.gemfire.support.html create mode 100644 spring-session-data-geode/build/resources/test/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml create mode 100644 spring-session-data-geode/build/test-results/integrationTest/binary/output.bin create mode 100644 spring-session-data-geode/build/test-results/integrationTest/binary/output.bin.idx create mode 100644 spring-session-data-geode/build/test-results/integrationTest/binary/results.bin create mode 100644 spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.AbstractGemFireOperationsSessionRepositoryTest.xml create mode 100644 spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.GemFireOperationsSessionRepositoryTest.xml create mode 100644 spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfigurationTest.xml create mode 100644 spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.GemFireCacheTypeAwareRegionFactoryBeanTest.xml create mode 100644 spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.config.annotation.web.http.support.SessionAttributesIndexFactoryBeanTests.xml create mode 100644 spring-session-data-geode/build/test-results/test/TEST-org.springframework.session.data.gemfire.support.GemFireUtilsTest.xml create mode 100644 spring-session-data-geode/build/test-results/test/binary/output.bin create mode 100644 spring-session-data-geode/build/test-results/test/binary/output.bin.idx create mode 100644 spring-session-data-geode/build/test-results/test/binary/results.bin create mode 100644 spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MANIFEST.MF create mode 100644 spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.RSA create mode 100644 spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/META-INF/MTNMINDS.SF create mode 100644 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 create mode 100644 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 create mode 100644 spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/about.html create mode 100644 spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/jacocoagent.jar create mode 100644 spring-session-data-geode/build/tmp/expandedArchives/org.jacoco.agent-0.7.6.201602180812.jar_a6nnlr12xd7po938a23ngl2m5/org/jacoco/agent/AgentJar.class create mode 100644 spring-session-data-geode/build/tmp/jar/MANIFEST.MF create mode 100644 spring-session-data-geode/build/tmp/javadoc/javadoc.options create mode 100644 spring-session-data-geode/build/tmp/javadocJar/MANIFEST.MF create mode 100644 spring-session-data-geode/build/tmp/sourcesJar/MANIFEST.MF create mode 100644 spring-session-data-geode/build/tmp/test/jar_extract_3534788898651611142_tmp create mode 100644 spring-session-data-geode/build/tmp/test/jar_extract_3883784754140269879_tmp create mode 100644 spring-session-data-geode/build/tmp/test/jar_extract_4722192187809226552_tmp create mode 100644 spring-session-data-geode/build/tmp/test/jar_extract_6068052779162431878_tmp create mode 100644 spring-session-data-geode/build/tmp/test/jar_extract_6126860805247402580_tmp create mode 100644 spring-session-data-geode/spring-session-data-geode.gradle create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerHttpSessionAttributesDeltaIntegrationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerProxyRegionSessionOperationsIntegrationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/MultiPoolClientServerGemFireOperationsSessionRepositoryIntegrationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java create mode 100644 spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests.java create mode 100644 spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java create mode 100644 spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.java create mode 100644 spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSession.java create mode 100644 spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java create mode 100644 spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java create mode 100644 spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBean.java create mode 100644 spring-session-data-geode/src/main/java/org/springframework/session/data/gemfire/support/GemFireUtils.java create mode 100644 spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepositoryTest.java create mode 100644 spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryTest.java create mode 100644 spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfigurationTest.java create mode 100644 spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java create mode 100644 spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/SessionAttributesIndexFactoryBeanTests.java create mode 100644 spring-session-data-geode/src/test/java/org/springframework/session/data/gemfire/support/GemFireUtilsTest.java create mode 100644 spring-session-data-geode/src/test/resources/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionXmlConfigurationTests-context.xml 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 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4aed19134fda1783f563444fcd57648a47c36a88 GIT binary patch literal 18551 zcmeI%F^U2)6b9hvg5t8QS_rn*Yaw_55iAA^8?mrgYr(=wJ%j8W_6(lDVy`5kk(psy z8yoo^BzgP~0{PmELTEQ`S%sonMXMt~fB*pk1PBlyK!5-N0t5&UAV7cs0RjZxMPL>m z@|ixS-7P^f7AKR@@by04%NT$U~$ayVV>t_ z%;)LMPJjRb0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs W0RjXFyh5NKFRjH@%2xP(CbHuV literal 0 HcmV?d00001 diff --git a/buildSrc/.gradle/3.5/taskHistory/fileHashes.bin b/buildSrc/.gradle/3.5/taskHistory/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..db470b5596fd31a4577990f8b04f4b5bd3b189df GIT binary patch literal 19297 zcmeI(|1Xqr00-~~;W|eQjU$rn6gpOEEAnMD=g1;vLZw!w%a_6u`o4@Mv>Q!nA*>`r zD_dD}LRoBV&3BsFD1>a%7pmv!c|OzKS${x#KihN9v-k6PKc9PE&-2?o=R;9uhQGLl zT3Jk2cCiNm2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz!2co;N?!<{y%;k`O=f4^ zS&DKN&^v~i84^i&s&ycHSgJ*SKgbh4Tbj96FwNyLB$qpMbnzA8H`v_o9?8o?a!myM zAZ{9|3&|f$R>c)|*gxmSuO)eF#MqQDt=648|1!zjFQl+<#gv+~09&99bZfl$Q$>tI-l1J*K%#VByJI9TWBe|^X(WdV93#Zsz zT10ZPr6`S?>@j>o00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1pY0soj$yUUTv7waM!rI-F^O7ac8H4op+7*4*CuC zh#z(Fo0)UyNX5)XtlTJ>GfF&E=&^pTL-;bnub+PBUn4?p`Lu}{O38eE=ueeK@u0ON)1XoN4*hUrCrcu?{YLHYLQoIw^TtlA}_9ynK4sPlrFPXnWHQ_ zsJKn`>STt%EIA=1S&M08h{+rM0zLJ{M@zY<|3agIy{+b$Y`KSiFJGzAtlmh~G#`mI zZt1CXv(C!Yt%y->=;f<7Iuv)VnDFvT=6D|QryHU+C^rO7>J8WFuHrJ8bBO5M-Q4%y z_2tS9-m-e*3*W%_>bBC#yqfXIG&j=^DvedX)lP+U(MxZtK@oI#_I1wisB%MCuRcdr zY>}a5^Y^x{I;)9|Jy{~<1~aGX{b(Im1XPC|D+#;At8VE%k;ybx?jXfHSSojLl?MGJ zp6C7xvRWf?Su!%XZ??~>H7+>)xQ!z{$KMTe^*I{7>kRhay8gmWza(zH^i$HG>(I2V NrAN|>D}8?`@o#f|lg$7C literal 0 HcmV?d00001 diff --git a/buildSrc/.gradle/3.5/taskHistory/fileSnapshots.bin b/buildSrc/.gradle/3.5/taskHistory/fileSnapshots.bin new file mode 100644 index 0000000000000000000000000000000000000000..59a5d7aeb2288a0af796bee263c006e02a7ced1a GIT binary patch literal 35059 zcmeHP3s@6J9^Ykoct|yhp0>4!fI)fEmCHh=GB4 zAcQLvq;oF^zSB0FAbPujj`y7J+l>n<7{4EW9A`%LgT)iwBRul{Rt#~j0^v&vVx%#9 z$5cVw6pip@14rESO}uy);#nsV{#mXvzSn@<&X)7*5x#z8r-X@}J}iQ`>IlLMJA9JZ zIi>GDh{vu$cyVlI!O#(Y#~?l_%!*gU$M3$==4FU$ryzWr&(=QXz&9!&{%#k9Z_g-y zMeci~3&f);t@zIH$?xCsoeyzED#FWdoVj@8XzdD!r|(4gF7}?Yo|&);;u%8`Ug?>8 zaox7)I*4!cSLSpYe_3I|m>>>MsaC zS3FyF=5>8H3vQjSt3Q_|`-em>w&3rf^Kb5*Gb7h0&%)2p5eV zd#rHtN-g&Dg1Ab)L2W{9GxuZYC2pNp2OZPFmK9&N?sQJ6M;nGIJ#yCpRCR zAK_K>LEyYqWe_)=LwFRUp6|Ng7t8q>AqY>{?DJ7hn;_02rySvFQm3VLdZlHZ$9|3Q z>?4CWe16-!5}rTlb%f_cjXQahDmf1EA>jx|M}nZn5k!;tOdB{@b4{MV%?4g=1HaHT z?npve@n6gUW&ksQ8Ndu+1~3Dd0n7kq05gCYzzkppFawwY%m8KpGk_Vu3}6N@1DFBK z0A>I)fEmCHU7yTEoaxv}!EF$pZa@Woe9#G0;XvErp*+(`j(JrB7$FQgD(#z$i&+ ztMbcd!cCf`_k5?lGP^F(@oLk9XB+6uOvWHnvz*a75*S6A%IailTF+|7nnE&y4H|t= zsLrSzpBNq11gf_Bzoivr9Rp4Ny<-`Z`TAv>wy%Q1;ul#p~nQ#QlhMWfGf#83P ziRBwfRyUL~lg&~ySu!ru!0OVZ9K&(^$ZFb1OVb#=nvtcNSdBW)pn@HlQJX0Pb0CWe z9~LDa9H;b;kyDb)yF+SD##}k>u}Ayv`%Jf9)L?KeBFi>a{KpGcGP0mkTB7&|MkX{oLY%r)JK3&96TH5ETQiMAU$9=)}{* z{~lHzL5gDK@`5c?%TyYg11kW2&-?RElDD631{x13Yl1WH6mXwvCZwn|dd_5E`uN}f zH%ih&a_p+haoOVAwLxFIC%O2L-#Ii;B2T(_n&-K0GDDAi7rN18OG*daoEA9ui6IsfiXy*=zfCLkC?hm^kIt(t&dFPK(@&jpRdo_5Jqa=q>ktI6A~|>8q|OmzR?l zTS6Xm^=aC-G>4;ZC9SXU?8`*@Oyd=|lfs4#Ax8qsH=J)Ib-1}wT2;P*;q)eh3TVcd z!OC!H)G#?oDQcg?u*mbsyl+W3aFu3H`6GlETm|@D+A+Y00prhGG5<`19{5Z~mf68Lk3UV}Hom>anKltY0Sk+uA?%NpI1A2J_OOoF|%i$hO z8CmyS#uczhk^(pINo`a^Hmu?cF7qUl#@{LACL4E(GkBcW8F(hnF{GRM=?H3UUBLnt zmH$8~MDIXQ3Xysc_L)kXE(E0zr4K0@I8-$75}Zfbus8&Ga@`Ke2woZ;XwNOPFs{qnOZzPw@~>Zuh-tH?emVUJg+p}S2%qa{6c3}>#`?BX&)&7QOGd?-8%Vi0ij|vl z=6CHWU)?UD-)-?_#?~z;X&+iSOL1&pMD^SM^!rvUnX!FIm41rqcShE~Syg|z?(=lJ z%%jz<{i1u7Q(5~_K{=rxFCS39;IcR}V>33*9k!r-aZGis$9EKRE#2t_l25Kbn(7WHQGJi7wX0qj`xMi5y$(_ zKEeFQjQ2g=X4TeS>oZ=SvRA$1)qXUN_kS-tVQ{>UE4Xp>66?#8}%k5 zB|gXFLYMgihu+-Yrl*&~*^IkK^TkqV81L|M4eMTUbWQ)RdDC51r`gx>s48DFwL`19 z%m3SIfNorI@@wKKH1xYcFi*1r^&4^O$W@9(F6Y+1)+ExSn4W!LS!<|2=uJ&)%3{Ba8nLaivmLW58( zil)#Y)Qfg5Gzb-=ND2)?%_zD;gHScvz0e@kjV)Yg5GqGpXlU_51OMP4j#?h?InIYO qoG;$?D4~7EQA?9iUK8n3p>@VlOXGB@&^F_!<p6;bQEcbm&2ckeyk zpOetkmZ?MoM1vfJ{{~PjDPjd=fEhFGC^Cb!*7|SKRx~3b*p_LjGnv)`-F<)V_Px6# zFd3(G_%gG(cf0%E?*4Ya?|b|0?u8hpwD`RB$C!Tw=EvMlhAG%#Uf)^8FojX`n){ex z##NfvjWZagXb-*)o8RF-5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!=00AIy zDHCYKmAlfcVCggux%kpU40B5nzVIH}QnKLuPZRut+zNO5L z5B7h*epBD6ADZzGPqO3fPaHqrOoRVG00;m9AOHk_01yBIKmZ5;0U!VbfB+Bx0zd!= z00AHX1b_e#00KY&2mk>f00e*l5C8%|00;m9AOHk_01yBIKmZ5;0U!VbfWQ|)0RI3` zA>O=ScsB`b!E!#qsjAFr%~cZ)Oq(>T=jpDvB1x&%pdFt+)-~hst7lhiGvn)JO^`&@ z&r4#H5Z4use2wsmAZzy?eBrIaQytems!F=Tqmppt-uX{gKE^%~L#if-M$V9+)Ga!5 zxOivf^)>yyQrkP%oOn@E;{Le8#S+NR$%0?w)E4smq%7c=8nZU$w;zQNFX19lj4iH; zmVR^V`)30Ug(v3hE#8bgY_Wdzjf!{7(p@LZ)X7h-EBP!ple;eLQMRH{MT%OnFq+Vl z6|#_up;Uz`D}osJsYq3E>wGaz<9u->#ZX057ZS0E!kZTr20f%!BsoDWPrC>ag5EtB z-Z~3yxAQSbugcb z1TGN~mLO)t%yryiA*m;g%+ETXOxj*0ijrmw!?}vYlg<_6o^{TAEeOdGO^>P`SM4P{ z@RPz4<94fkS2Jr#ED?vOBxxCuVIH@mjq%~#H7vHEIkv55uF2eLMk@xU%mZU6s>j)l zb|&Mib*JAftasSLLgaqyhMv4nF&hih>;9jM!Cnx-Bf(jzP8rV9ld4X*(k=H=UVCJU~4g=x_D5wljwR z&S9HO4g5@f=^>96BVO0IXaZ%y(&@HH?8sMvTwxd{8!ZNz77HS;pd=DCF5y{i7h!5@ z(g)0wb{wV}LZqKOX)~D&P(19TLPF45y^l=y-s|#9}rPLmA4+_t@+?!P>@9m@b!OHHz3o6@eo) zL@ZvgnNw7xS*C{0f=5q6kD+i<)>?@qvAAD{^f@25I51qaHfza5&_|LeL}o?%yV3g3(&5hiDj*X*n5I#al4z}GmSMXt@S zKBKxAOW->D@8Xn;9RYM{>>H!&{)7-!Gp_~yg`6^R6&5n3l?VqO8pQaH&HoaRX~DgM z9CqE(5eiq=RyBk}-APUqn($}|N+P!9nzM_#l1Sso>xnbEo0N={6spGE-5@0K?Oak; z*|iFi6)C3k0@gw#tzL;C#dDbq*^TtbbIImfM_NWYJLRleDCs@FKvEjjIR#^y-i z#Y(EP78zO1ssk)CMB4L7t20xMyk`42;A(nSJp}x@4bQ44oSLJaaNMXHO_!f(a#r^Q zhH5aKC8xRVO9c7WnfM%Z!8Y=fr#o@jN`i-)@zfT}x1X;^^W8I^F@uAr*6(e9)Aa(F zXU22abt`t49o&DdHRBm~zrN%38>TFF+qZxBemZT-$+iQ9zv~Npd23@E%y^vdyfEW2 zClR?Xc`)O_DhXyhnW-1dc*ta%o;8^=^S_(%Q1%2oXy8F}I+N&uYIE6= z$+(x8J04Eo=kTixOq=lX*B^YhYt|mm_mot}_25?lzY6g-W+&1^Iv40HIdg6Bs~GO> z%gL`o>m=~?g0J_ITb=-&blK@7{IYZ_ese1M7Y_d*!As4}w@>Yh=;sC)x3BkX`=|HI z+^XQnzTTx1e$xHnckel7`FhI_u6*O8RTFo+eZ9vQJQR5Ebj5wHWkg>_rWtWZW`I12vcfr89(^fA6xb$c=qwZ9czc{4&B&xXDT|i z|ED*cFZ;0J_po*dYlpCQX!_V;Pj;RoBLRQTIm=CE06GbD66hr3$0*2wv<0T literal 0 HcmV?d00001 diff --git a/buildSrc/.gradle/3.5/taskHistory/taskHistory.lock b/buildSrc/.gradle/3.5/taskHistory/taskHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..08804b4778d590cb8c95425839991cca5ee83032 GIT binary patch literal 17 VcmZQR@qM{$l+4zz3}C<*4FEe(1p@#8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0eba0b036d241949c422f4b00c5f654fc12b236d GIT binary patch literal 2192 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..78db4c5be14a979b795ab8ef7d1e16bb27ce9649 GIT binary patch literal 3083 zcmb7G`&ScJ5dLlw+_)|X3!-SPT2VtlBGgAK;wuWJ1hodSsBOAzZo+EVO?Nlg*oU=m z`+ofk{oQJdSWjDjs^|1?^0b}1yFf6D$DW+rWbd8%X70>4GyC^Hzx@GVFMed`nyMJ3 zd}^4_3>h}ha(kBBXG)c#VRq)Ua=BE^=_Sjl*t|~yV`wefmNi>Vl{B-MO8X}gq6|Hj zT}oc{^pXCK^b5rL749%U6tGR}rE@_T4Viqih zqz7DgAzmmEx?!1g`9PNRrCg2>#?lPz0>i39hH1Em84f2hm$g~V57y}^&##c3aId;1 z7+N}u+)ZnxQr2+!G27Ov4E>3&i{ZWn!PZIMA^FsT;(&s6XqOSedWKz3<&%hBD>`Jv zuu(xHnpTtcGYm0z+He@UGb^U&an?|DnsQdf<@Sh4L8f>!sP#c$Sd$ajev~MNc}uv@ zurtKpu6q3_@fpOatZS9ahFRPikZY^Y=-%GmICe7ZeiBRT0w*Cseu?dL#U`$}3`Y~o zNHpwK!-}a5aa2JP-D}W=9^o<*OGGSDvBVhGg|b0HKSPwrz|fWmMcs>iGM>kNhPA@s zVeV2Tl)3Fz6}*5>Vev(VxH!vd1+HMg-#o++F$lJGiK*k$wslpTDsc%%7-X^<6cxpn zjIU5|4DI135~wcvo)q}3ZX0Fyc-7^i-j3z9GSNlCNiwc$jyrCRSIb1310htXVS-nX z1EIkg#!E7WFrr{PIz=Ij(uGBBWxcW=5lp;7dOMMNs2kPEG3Ucos`h)bMTuolgt9w!+RpYU8>U+_LEY?oCI7}KQuI5~!(=ruTn0bc%0qyI?!AdRH>(v9Iq-oIA@W%IBLPbFVMZv_Y z)X_s@{zPaAGzpfqazB5eF%qr(Z5h|_j)FY6pw4?VI+xg7mk0^(%eaC43T!yS%MYnB z)v_h%c>b99Sjc`NhO$4Q_Wb|(^cilhCI>&K3_kYOK{F>!O+gF|i?}qQ*@kFM<6vEg7W+1+y&n|2>; z=x9jhe#PdFhVwtuA;Z_SCdmY_0ncI!{fd8E$uRT&J?FU~_Jr{$?NY-EOx#2R?Epu} z#8{8Iqd%$cx`*9SobOS4`+L+BefQ9}uRr+OwD-&2&Pt4=x2RPwd zi+I)ufu!03Ym1m|OPJfSFTgw$U@9Ian?t4^Nq!tj4v?B-7{jRm>3D#&D>;X8HS!bU z$$7kb>ozWAx*uY#*qz54lbJiX&^-tJmcZ~XOjXkK2(1z>5d)}J1H5i8DZrMbx>aH(b}iJnHAX<)S>bT6t{WA0@kVS@0cAWFW$P3Ym;guc^B^rvqGF+ z(*p5yU?*`K*Z)Ebt#kO`0V#|=ggTFpM(^XsB&mLS2iGa+Uo3OH?Gc(JDyJyEBisli Vd{4hItfn;nK>uViB2xAx*ngPEF{}Up literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2b04e8e8c94e3253cff6a2f0040e2adecda334d7 GIT binary patch literal 3266 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 iQvvqBLAOG5iei)OMxbDezAW-zcJs@k;(a4lG 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 QNRe^A|HQY-_n#sC55ylmY5)KL literal 0 HcmV?d00001 diff --git a/buildSrc/build/libs/buildSrc.jar b/buildSrc/build/libs/buildSrc.jar new file mode 100644 index 0000000000000000000000000000000000000000..db6e25e1b567cb13664d9ba410ba0aa55e2ec542 GIT binary patch literal 15133 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4321192a0feed12785af670a66d26a3c1bfc8015 GIT binary patch literal 1489 zcmb_cTW=Fb6#m9G*~D2O2{e>Dv~C+aBny;q3xNic1S1EeI;A3Sll5RPv3IQ5al&um z5AebZ5+R6ilc=hyzp1MF&DyAyTB$t5*3LO|E^{vPo%#LG*Y5yaz|s)*V$v;V^4Nzd z57T+%5ID(M$DQ+VK950s?=~0mn88I4mpokdaK*z_fuT^xu?nrK3rtoY$qgBFZPW@V z4!g#v*ap(-b`%ElDY>b2OUZavU~ogW3Qe6@fw7)rOU8|$W=#|~KIuE!P%kP11J|NB zveyO1C;n|+Dc%>zm33VS?5{?#y4!89DYGKiT9k}cbtqf+rHS0WFU;9ylnD40rfNc#s**^@L0wuIG*tUxWK=M}mRKW0yQJES+*e|&8b(^$ zt*FE%g>$Y3#Ui`XGKuU&ag|jhI$T#QX|z{FtZYzAMYP^qvoc&?mYp<3c0O(OHGzCh zcTK1kBUeq~e*#atOJExo;;^L?*0HQ?Q`bGr`M8c7KE`ms$3cAIV;nyS6hHgYoWs12 z5sdn{iIa?xy8c~*GdSd7a6N;c=)su0aBKcCXC>BWZ{fJ@?ig z5sU&q?%Mff9oM5?(nJ5?du63DSDHp|_K-jtDD)TS)Mrm88kK{#sy#LdH@ z{~Cci4qrr>n}mr~N3sovv~1$mxzEll>2}=I1$|uq#A)VW>~UZs`aVq`FSP6=uI}05 zD$er7*at!aS-vcU2$vBDwUiQVlxFx5Ahi0DT!k-+vprgx+=3__+d`(ajcjQLxd+*8 z?AgM=^VI1u*L>>yf+4nWgnOTd(3St=qyi^!vVZJvJT^z!f~b~WVBjUZCpfx;!3W$4 zewl3yrJCGJ2X>!v3}AS&dDj9X4+p-I*QyMD0ujK$wT3`hi^Ov e`j(0ezQY7*jz^am25f4E&33;*w!4Vg0sk*UUxQKr literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..444bea06e57fc22a8b47a846d9278ff8252713b4 GIT binary patch literal 978 zcmb_b&2AGh5dNHOv(0v)Y4|Pw(14OusuAJ_LP9G7tpZ3T>VccH>uy{&c4a&5OL0L0 zAvo{=JObib5VKn-9FPDh2ajjQGvAEo=kvFZp8(v&ttJATkFbE%C0xM85SKz+4snHH z`9Kt%v`|v}M5GhRus$?4=VHH_l)5F`Xm z2@I8%&t}uHv?DPtNYfsgR1`bHs#5-;4E#hnhImtJX_G=YCrKPuG2OmZI^VToDi4i) z#p%f@qj@I0pdU=4g)%gp=#-2D3^r1&OEsUd#o=QJ4S%_;fuH#0G5Q{OISPRjKaT9HZt+Lef zNuQxr#^;65Ie$Lhlc{Ieo*RB*bf(H`F*JYUpUf)&!|I_>eqgA%$HO=>300CxA9T0M zc2HAjaC-kdpVU$1Du@iXX$2NQ0}Iw_m93!7sL^R6BJEPOC$&lw_1E8l_1~lRrm~5N zk{8i0I6*Y7_y{M_B8g!I?PCOX^wxh1_5pQ<*JM#6kDmx%|A0`(smkg!&d?p;EY4w> RxHfqPbc1qjkoIaL{thj*32^`b literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..493be7d829872c59980e12422504f29bc304ef3c GIT binary patch literal 919 zcmb_a%We}f6g^I+on$a=7-)IFQ`82DLBOsE2}J~24G+<%3wF-Low`iy%68hHVuQp( zV!;RSIfyml&M-*nicJ>2zHi^-dw%@>_8q_@+-W1gg$N6{7~v8whqw~rYKUtL@sTLH zht_1$xxUffnu1{|JrGACQ6?FvLT)lFK2}=!Ck$uSPlh&j8G^nUONQlCY58h88A&@7 zqk=qfYBEvm3ad)Hb_RZ5IR?I^wY2?0I48+WQ)BbQ9a^RHJu4>i*x2_8g`6@v84E9x zTu%0smC4hQ^Hya3xtt8h-qK#?R(Q%AO6OhoAbI$3ppmv2XseYG`)6u!Lc)=1v8y4sM>L({{Nl+8D8l z&r*;Ws9d=`+$Sb4fNZc%r(6UPyg{dph`gsNx;H9M)Vuo`toId-k5vvQNmV3&;xtKK z=@FLDA&aPuxbEPD}x;`$>019Z*v`2YX_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0d902eb0aefe7b7f8a093d983e790e0809c5f2d0 GIT binary patch literal 340 zcmb`DF-`+P3`M^~*iDv2;t(mIVHz%gA_Y<*0TrFIaYhq%XOL$S?nc1@I26L6qN7P; ze_3DeTmS3(;}gIQ&TC9+oDn9n=YGdU2q%|UFNEeP?X;6c= zc;ymOe3o4D^_KTsqa{2h^)A0@h<>9y$a~UPmnCPjx-}PeUWSb!+&{?KJjHc5BoL;5 zbi0gEbl!6|D&gXg?0SygJ*>9U6~g_oUZ@C!k@W=7*m}X()Ci})vqEFLF$bZ>v}%6< D`{ZVA literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..25e7b7dfc1434ee04afcf21f8db4f3f0a3f98d89 GIT binary patch literal 1450 zcmcIk%Wl&^6g`tTaT46twB=P^1q>uX!l}fLsscp`6r~`MstY89CeAdS))`kblk{Ks z0XA%qKp+q-S@2Pa>okHaDp-)%^32>j_i=n*KYo7x2H+klML1X~A%}}46mZGKWfxam ztTN>7o-{$t#dU_|wlGE}sxcJGwxqE_3C-YbD%$HYH%1tSSFJ?%LUX94>g{UY7e|Rc z23aE7MA2C{CPTPR+qdwac({#HDQ} zdh(WGz5Jx|*Mbpg$C=;#GO104K-s4{E%7L#CJSn{8pG?EcgBC zmdCalw37z>>U*$H$bN_Gyn&N_OS~-pSo}J&=pD~!R+mjjv{+mhtFvt1v^-IF z438C8gzLGPc6Lqq%(A~Owh$*2vbo5p(W-~Hs(H57R1~jNI9zJptXqb+?y&IbVrAm5 zBTZ&=K499mrq{l&Hb!{S8KBwe-FI3yDT_U2hR@3@#$!Wo z7*<`MtFDNeSLj&e4w{?oUhH_FsWGarC%JXid3)WdiCI%#+D!A(|K_@lO0pWZqhG@S zcJNJ(dPurXZ)RMExuoE-h6!BJunW5h7o%cE$klKF2MPD1j(1I&Fz|Ch33{iH5fvp= z|9j)|Rk_iLRqlw=r1NsKZo^2j0YD;Pl^&wE*Aihp`(JW9RtufTROsr>+W C5zepx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c5df7d8b899228a8db943f284b9fdba76540d35e GIT binary patch literal 15745 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 z zQ&iho(^Y$RYr#dHd7dTjrRBBrJnI_@7Z#S)jZyt^veqmt)RMo_!za%DLRp1JS;d74 z(GBFI*U(aWEmhO&XdRw6(HoUOGNig|GmJ#s&u#A+^} zf^$?xg(iK?q_5-3aFeA^0EZUn8xRPM@Mk5^ZRZ#0Ca`le7=Jqix&;E=41wP9KNsj* z^lhk1JosAN)})=*+B-@$(m^!{B(x8H-0KSkSsZCR|w z*8d#(BQlQ%^ZrDC&LhXA88X^+{(BxdaH`^<`W8@|kfUv!I?IEbJi_#G!V-1P_q^?$ zG_PhZb)BT1G1_(f+#~pS*`o^eV1DnPPGSw&GG!b8Fsn=P`<%rwF2ANz) z3%H0X*`(DxgKD{i>Tzbbk!LDSB}>#J@cxw^Q{lHQt&+C1O4=Nin6!od1`qP6Wu8ez zPa*kNw3zg`>4QnhN!&ji;U;kig?P?|4ILXBGgHqGygG1IUP{PvS1559VZgE z5t3zR1(dU*W^Y5`=b;@@(irVoSoj5{9NZTcefGq;@5&qMAEhca_b%vVF|CG%2>;iq zdl4dWLt0}iVQs{40bT-)Ev3c0j8<|vZQ?3w;1$%wmDIwk(&p3TXiaRfgR}_pq+?7G zwJKc|C|y;Eu8KV8sERx$J>kLSKZF%|@<}ocr9epkfAkc5N#f+oA-x2p4K-h+Qmn7f zRb@#zC6-^KEMH2o0n}dkiY%^$EcLXU*HRs?r**v1WuF`9zp9vBj>sscuG3{988f%B zE0TNYX*%bu%OLK;*$S-0g%vji@QJ>1(TvU zyLU*2gV!TJYH?oM3tA1wsa&3tj2ixMLt&lN)$j#f zT%S1ivpT8jT$ME+L^3!82Mp5&9>E_EMyQQP6?c*ZHsFseWlal(ep;37^ge_^NiLUg zIah$sc?crQQElsWmYQ78EXGU?wIU65Kfa2rv&ndxmY7^A^*2{NiT#H5kChM~$L5as z&j%q1E@d_M(2+4Z+L<i9o+!}Ug((E zkC~d(T98_Yz^m6+NQrGX^>jNH z-Xz3gtPJV`H~ORpHCSKUn)NkT8X0sVnf^y<6G zTlSi=*N)Tc?xymx*O%R>o|a2&)QRNNr>NnztS#QSuEhu$%U|cr$&Cb2ixnIv;M8Qz}|IQDyo&W#< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c1c32d63924322397a9d49d5d936279b16c224b4 GIT binary patch literal 5367 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6fbc8566f75956383b2317a002e2f60ab1515ebb GIT binary patch literal 10217 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b2552ef3253f13d6f870b2a663f303fa0a1dd10b GIT binary patch literal 3663 zcmb_fYj+z*8GgoAELmB{iQ-#QJ4u6~N{qZIO)u0X)Ny26M6rWqY~0eCwKSGDS?!A5 zk?jylxwUW(hyMco;BfGPAHeV66CXIh;R9c|JhQvDq-GnF9_-_t*>`8&_jzy6jQ{xW z-~9o=P5dH@tEi;0nnjNuzm-J_l?-0XVhn5gWj%v$XRwjMJNTbYR3))rYcRXy&{9a_S`#`vKC}x z-u7ih`n%Gn#cjLZ@-4-$0!GPoDRitLklg&Mvgg;$Ak?t!TMfDA`43Hg(z?tVm6>(f z*rqmf&atJdBBhH;HDiObiq37dlnm}jM_DCT$$DgLRR$`Ud=7LB&}7s1n$lN~DqhR4 z%HY0ZRppN7)Y^_nU!a`7mI%D+(fqzLgI2TY`O3WiKWL-X3o9*G*$ug72R7q7>$;u_ zxy**Z(9zcJLNa12 zb5?bSt6u$#cyuRFubsE5%JUz^U|&ge?xbD0PUBHQ2w3@0m(|o(STw9;vl`Arj5DR= zjCI)x!iqJ+4Uyh%xR;)7f(@jzE+9&5nb3Hb7J;`<_V*+VSG#NFzNNcHNx!RTZYJ8< zVub|ec9a3LqjW+xU@@H9jcDQ8UzJVGI6)fU z<9pQ3^R_0lna{^0)4GEM-cJOY$XG;A>gx>jp4>8b$X#a9)kL}w5oHIP5&L+<+Aq0G zlD#W6oB2#i$*o9gs|CG0euRN9;U$5^B7=0yv@j{KnFJ^?GM_I426pkfz{^Qyy81Y5;EvWcu!nsEui&PENBF+L ztrJx|vkeVA#t#g9fPH~qCaL;AI{iEcSeO6&ixcfeRW8e|GP`o!^S}AUpmlrn6#kFFYOjVa^ zDLfG~L_Fts0huI~e@9c?K--7#xV;d2@#)i6uMKxchvthXoLGAK8LFObDX*d|U$uDA z(}LT!Tbr%beBP1-h7&@jccwL{@H9&0OIk48#n55yX0&|BmvuWJ&s26=s^;yvi=Ow8 zL0Dg2xm#LV*u29?%&ji3Y|wa=3+7NWDT6+`=i5p$f4nLMbEF>Mb0U(x6vH}N8|Uok z6<2uoy{gHK;}h{#-Vioc;txIMbSYLd_#M#ra=|3sGXUkKm1Du;8^xOf? zPqo$M_&*BpFT(r}254_s^mITRJ%%_)GC0lXmEI`Fm-^D z0%@U@e#u~C&n0?ix?L#bi`)@izrdqITqhHaF_PVd`oe>M_5ao_h31M Ycbc;M{QG7JD=6?omM>!%z?YHvFM8n8zWr4L4LbY!A)V@EZ_Ia_gm!Cn<98K-V(uEacdZF zi{R~eM+EQ0yTZ6le!e}7J8E$!?uzhox72ixe7aX&-W|bv@LnnDeUkM3^6~+B`JlYq zCk1~ff)C^Vnb?Q@QpHEY_^5mt3*&&i7bW3AN%MfDelUWM;UW3qVFe$TE009*34Btn zd`ey(m201l;4yqgUOubfb74FlK?gps;0p@ADA1Z5v5fp+Qnzix%y(*zwq74zXIOet zw?=iV!^{sDg9S@-_*Fnn+6mJL5r=`2TV(MvxQRT z*p4|e$-ug#qh)sXXd^yg^8(!Q0mn}@GB^5Yby&KqDW1>9GcwQ#J6Uia1`0U=#U~SJ zn-=q~-6KXI?Wv$HXKGnJ>*LJ`Tl%Dx*#X-m>SPM9&gA^`h$PK|mC!q_gc z7g!ijWEEt=#Rz!XaE7R|W>l7hz^N7eV}dxbjLGz1VYoq98S@I95-5lQPCGm!t4|7; zP`l(*GG5&aTwhU!kNy85p&Jj?l`3?VRVwWWHe4PjAemJEud*M>HzuDu((YJjE zJBz@zFLG%g5{Ziaxi%-ekaS1IxA7eX-&OHFJSh8c6gtWTq^#AKMO3I&RTZ4o$Z;N zu2IKdRQwfxQ}K8FL&ZPwlvMegihtpG1^-srjfEsbUtMSH*1UrlN5N=*#P>m?P@_*VHak6-QH#m@67oF;C2w5{^;C0#z*J zi#S#s$F@73v+lN`TaxN{MVuh1PEW%;*=31h&1%RUxq9h&9Bw+m5AWN_*qvz4QNA z!WEhsQFS5bn3Cu#Z@UvqXb&6IFaw(@SQg7O#YFEha_n2~kiy-*u@W|JnI_H5PTkqe ziY4*f0fW2fsAlBcktH*-(H#;v=x_w9)-6k*p*%EgdUb7BZUycx)HlFMtSQkP zm>K*OBT3nh04K*OIRrW6Tiq1k@+Xb0fhDiMuJUCQj(`|SZeX50ZK#nCE$E01jGF0f_Mlc)>2sa5!LhXqh4ZRFE>=ZB<5pDx8Vt z^EqkC6qKg~%h|z!#L{Ehh!Kms3v!O+Q0aY54M{X(P3JeeGsRREzk1i2rfjgD1SUXB zWd)U}nRSMpvgFj%-t+?1cw3wsmu@pZ$h2-cJD4wWk=6v7tPdP(B+LEMGMR>ReFXha z5Peu+F$mrt=$`P94&tdxM@iMxim znxLp^-UZ?n_+BXTGhGmpJnzQYhbDCBlHTciQ5l%7Lt3LvX?=cY>KM|jq<&FB&u6G! z_D5E1Y}yb`W${41sG#LiCZQ!V0ce+1G-|vH_&!d;vb1p@ra$^*Wy_~;!xN}wm*=c7 zt*a9l2nF_xEj`@aT5q~#a&!5pk zScq=)K%kdzRp{e8k8*sD$fKHj=UI#Q8q)As&Fgu5i}5bxYRdtL`}t6XExgWf7yEEN zpH+_lTX6y3YH=Z%t0l8Iio!!&yQPS#vx=x*vk#&Anwp0&V@q{?IJqTsToJX&F+|e! zGx?|%QJ1biD&&6OhglC|_Lc*fGlu$P5l8p76)|@|8tRpOXdulz%9!ubx?)H|vSapR zL4BAD3yU~*49BIV%HusUT5*D2#0jp(abMQ*S76Zk5G@a58y4V|IG*=K*p60Yu?9N2 zFi7|ee%XN`-t)*|7lv^OOzg#oi$j!Nhj1faL0(YOb)@bgUR?xRqpWIVxE>-}SxWRU z9N@i{veTrKaPNh}D{$^UEO-n{c^$)v(uJt!0vG6g5sS*eE#8MEV`wa5X%WlDu>4j; zT#6=o-dseB55u^-%cu}=7{UTWH%eD`p^^6{{$#zH4t3yCX2xZ7QyN>38R-@EryRtYRd@ueidY>Q!x}EF z3@p`@mtIx{3OGv&csU`JNwkvr5SL>8)iJD1x3tg~=}x-E(?`2x0=k~H1?`fHBs?w6 zRnM*x!x?fZAandJsJCsZ?c=f9!72r=Kpn0`1FphiT#a^IgEMh0I&nP{>jp;SMkdrv zOvamWITL6vZo$3$_5VKp8{tvhiYNG=iYNJxil=cKp2h8W4tIze+$oO1U1AyT7OQcO z=p%KIFz=<=`bL3C`X?>vC6 z{g@?P5`oTSF)^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c1d4ff68b75b59ed2d1307b7471dd73412a4a1c5 GIT binary patch literal 5150 zcmc&&d2|$a9sdm3Fq_Q;NE$++t)vhzAt6%`ZA&ONECE6{hglj7NO7|J%VuCRv(C&0 zVy(BWSFN}8KC#}ms0%cu;!%%UYrUS&>-nC4=wH6)^Lai0sD6Gklk6^;l;a;aFTdY! ze#iH|e!nN5ee`hv+wjW-bWEtoC9p*HlL^Ey5rm89@+zhhsKbP8tOVA>mZO4- zS0u1ZPA`K~2Nzx~A=#`BzMO4%7B zKWaFp{0=8$-lXX&=u8(J)5@iV>zcN;+whFNVrq}+h-BUrmY1}x2{Tu843Db{w0_GH zPBL$}uHfMZQnr)RT_3`PV@!z?wsTzPl7yva2~5w4sR=^U18`~KObch&u}{v7h#WVC zc!vriK;iaVp2!8`1H$#(wkx2oM?qV`u?fqYN!vvyBi!MPDIB1R(+Q+EW&CG zB^IJKrJS!NxyOuYLoa$}evT-vaC^&Q3t9*#X=Em81G^UCxJpSGU+1B&{DXUpjAuJD zA#F{;hRPKMw?{H~MR4oqc((1lf*tMs(b|cEIm{!~M8>4%6e#@)>I>yn1-D){p$mbo ztJd(aA+6mLPL-;+MIsodUR`}65TstA@KGaQ6jWjDv>YhtXuCUbrS8y!x+TNip=`P( zTidtY#J_tKG>2RIrsN z#HI|B5u&C2aA1*n!^-JtPX?DB8J(88zV9ozK3KPer}wi-+nM9S>&<2z!j*6gCr6XN zCISp2nNcX@&5Z9`^k?a-w3kS+&$;rP+sn|`yWlht)>jxcPHE`HE)Ac>Lke!bTzD5bx`xl;l#0)5_yWGD z;Y;|khOgkO8Xm?Y8cxgRYdEE#=aTT}HAoIB%Pg5t~V%99{aE zf(;fZi$t$TkGh1_u>#xMH?XIFr0-~IXz$Tf-)LV-me6JP!lcH`;Rmh^>+^&mJ)Id3jNYweRoPPmhs=F{jJ2 zz+vGMERc$2To@5XRwA;C#1mr~$N3fhyywjHdY+gncm&nLsdRDN%{XQu2#qo`Wfd4v zW)Z2xs||~?Kv}31pU{{8Q*BhuwNFftg4s%AmqvUtaH+nMK5cgu=d&ZaVjq-Jel$oY^Veoo~z(& z-nMw3@RETM%#+htb)QHJNpC}$eNIsI=DcsURBfO0Ii67`4R_G5!FU5bM3r0qNAukN zYAdgZ5a}7RHpPppaOk@$1G-I{R~u$X`j;@K2%gshZyzJhAZu+F6;)8@olr_-*su6W z18e@qvZMN?t1OFEzrr4xklN?nV!;mLy2hWZCV@q(yxMv^x1&UBlA4y_+&ne1=t}w&?nWQiB=m#qC1tB-QAg;BRA;P&`p!)yXeBgM zAZX$X445S1%n=QE8Y`J2%1BntBUz3;*h?hU?Ce8736uyQM6FNi&RHxY!sP>9H6^U* zI*rC=G?ma?!pg2j^_db{x=6_?*<9N-i`8RI*Ijo8*Pq1=B|NXI%=kJ|1pJEauSwT$ zum->7lg;n=Nb`Gi;ty2BAALGo1FRvPpknsp4$>JXRVfTm2$d8M5~e2AJ;eWE7cXHq zf&-z@wz8L&KxM8a53OZt0%iWW!WiNq#!BdQxD%s?wr zpFV@OROdNt;1#E7<2gKk2`*scK-W36E3Df(6bx=YhfNBfm$q=wsc^Y#d+aneH+9#Z zhdx%bnsU1-Jr9v$BcGPtt}D;-$VBRqJl#k(4&!BHWj%J|2=1a_j{5UUo`tUBPzj#acf0rAgQte&2)m{{R`o8jSz| literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..487bcdc12e1b823fe2c84677dd5d3ca06b12cfe5 GIT binary patch literal 3671 zcmb_fYgZFT7=8vK32_mP+_c~oHA=%`wc6I!iWnd@f+ZA+R_T%~VRf^c?rs2U@Aoe~ z{VS~>u&12%2lO}f^z@nCg(SMl(Nj3=%)B%6zR$duXNJH3{o^kH=kZe#$54o4Hi;J5 zevm{Ag#<1n(T6!Xm`~ut1Qrsw)sEZvD2_Wx4B&1Yi%E2%AU_|=#hUCb#ZgS6ONzTt zk{>;ev0v^)$z_So&10vZOn+ z+LB30DsLAxb53&%ISz#}Z^dv0h6+`wy`a0UVO!TUPn*yy4FRewXEw;ArC z=bK;&$*2p69E-*`-lRp~%FgHA3B$4GT)C;qy76?UDQV6}+F4?Txax8c0kt7@d_G_@ z>{<6cpeTpKS{#;c8V=n)ED!nC`4Rqp&LdYegO%NrzWp@i_^hHiWv1Z%h-ra% zSTF+DBN1=aQv=reIRkDPtyWE==vNB`vif+CWOlu%S0(4TaeTsYP|o9qq_cNkmP>|Z z4GG+hgc`|O#83KbboH9Pq^@{gRn1zGOeX@eoTMbAGNSLVXzMwPVKP>A$!8A3k|Who zTgh$Z6(kg##3_NvDEj287v><=c@#e=xPXfa958^%N>OvYOqk#!0_~<<&Y1eDZpPs$ zs9}&r7zHTOGcOwh1*^Cya5lN+)%y>*08SN9L_6vfKLT3@2KLrrKsQ`K2z{H z)&+i!QuV(c`$euXKQz3sS8SJY`2t@m_zGVO|%a;Vlkhc%jU^fW!;-QqbMR(|+tONqLvU_moSnDXi4IlD%e4+V*`qVSak%dTwfB@ftlb zHak7DK;uCy7(>aYbb9ZaV|Y5_#|M);M*4AVGoac-A*`*nVa&FMIKnsZF-d4_k7JPS z365HD0CBeDI7-s&scZ$?U1uIc{N^t?&2O78{0C>)SAqo?!Z1e(ZW*B>x%miN`IFd0 z%fe%{{>r|<_I}ZVvy@0(ugPVSBG{KZO|<%Z)0>EK=dS!vs_o1M;u}cJ52e~u$)L0Q z5fr~CHMjVhd$5Z}+K>=*6m7fGBXZA+v*fzEBDM`-bNT7+cV(DDddDQQb}Y+z4a zuYY2(x8cNXp&sB3yh+Ux_dHv9=H5+o68GNxP;3MHh6p{if&D{ubt(R@0?|#Fz332q z=oSYXAogxU?4{KIcmb;O?1&<_f%$R13ej9?aibPY~Wy~e*>>% z>V^-}-w;P>_&5y@A|+0sPn^VnNc#ZJ1nRcWc9;O(@jY@Fm+>ymCD4m27$ty4P*(|J zk371-82_%h$f6zNnBWcx^bYOH>48o3FU0=Dz(Q-PukaX$@&tVN5sv(hqx1Cy3;dJ8 zJ~2Yyyv8t|Yw*tiCXu7EeN4XhaGmz@9L3n)Agn3&TQKdz+fCU`{=J{W3^JTZa?pnk Hyo$tsSB4N~ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d2d971e918435ba891d212bca7bf2f37992b055a GIT binary patch literal 7438 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 oT~3NClCuad`A3#&@#Q*>R literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1336b80eaa7ce436a68491e0df2d20d340e4102a GIT binary patch literal 3408 zcmcgu+jA3D82_E-vPrrvy+TWY256y4kjOkk+aRy~t0N3p3oD)MoOI9V4yfr!-R+XL;$jbGpS4Jk3qZC^D$y z#UeLH$-2eqJ~LsM*`!qxsIw-~xn`J`lk~{ajbbvR*;+Eo3q+PDkMP16?WaoI)NFcc zrCg~qykuCqZJ6(l7j2$(A5L=1w)$L9@@DJ6(>^|ZBfJY;)$%&wl0RGOD8-)EVhE5< znH1D4w~1mUZXE-4r5j0Vq8eOAe1);6lw5Nf~7`&Bt`n^n?GtEw_ttqoN1vRPq@948)(L&j>qcc2em3Ug8)p=$kLrZOJxzSUQQNb~*AgdyWK8m)`j`r{D zvs4TqrXr4*0$s%%E-T2ZC@ z2}<=Qfj1{hLQyHe;H+U5G@D_sx7_7?zu>7eS$TD5Rd2nBlx;nq9HIGbl68g3f0EDB zuMI0vtxT!LYhrp;_>I+}##Ss!ISQYFTbW)Flcrh)c1iPBK&US-)bsQ|dJoAo zE}w@^9Np-jrI6BOYA%-Z`II)x56e-t;m$uj z7z+<*SV*|zj%Pr7qAlS66~S}9L~0SrB0`Bfq|$&I`_ItIK6fBi3vbX~g=oiC3Wac- zMuRk*bj~6Wcj2p<3eq*$7j=U`Bc+bAf4TCPb(LuVNaceF2oQ9&g#(U9@dcW+=lrxa z3g4F7yWz3dC4FMphL@zhX$q+DwRV8=vVyoMoKMSb6tECv(t?-B6dPCQ2I4Fr6*6OYh( zLeSVo-$k@tN2ef4r$*@i)g=8IS@NK z^ax^Zx42Pz1Rr}$gnq|*_J=1&y^@HJM#e#kl>i&9)^4q97SOT0Q2%tyEEydwBlOZc tB$@7#Ov7;z%LR1SIJs^2zQ;hg%Hy!Zd<;jN{V0V+%qvDi?*fg!@ISalBvb$Z literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a0522cfd23ff3c4919d888d9abcbe47c814b8c4d GIT binary patch literal 1746 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 XHqyLTkzbS_nD=4_aW3cYw;=j2xVG`d literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..551e78f9621fddc13b7a02fccb4c203c70e08a9b GIT binary patch literal 3925 zcmcgvZC4w|6@CU}Br9uUWEFbxC{)#pq(WlxslZas>fw?3G@k2FuD}lEY*i7I@2^a}%okRuIIJT2`3bi

?*x`Nq+X@cpxyi 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5028d0348e8204aa9c09779857431f0e43a2ac6e GIT binary patch literal 7576 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 RWqwZZlje&tZk``u=wJDgE&u=k literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e88a920d966719c314c3ef19c32557a8fcc578c9 GIT binary patch literal 4511 zcmc&%YgZfB72N}}M~Dd~)Fp*Dw$nHPgzz*CX=3D%${1{dj0wWv*h%VaYV?#dO@5g(1(2s|B zUuu4k!iV@u64`z{f{{c~{#}xS!3s8WqzKb4IBq6kN>P zPE|LW@=dP_yDapQ|Lp&tRWP#JvOKdP)=k$e);Y|rpa+j14W=_|WU$F!;y$7qOc z+j*=Pg<-jR#VC2Uv#T2&1wGgD>}|R()9l&nre%7w3VO#U))ge?=vl$JylIK$R--7K zHG|$14CU>TQC~M4Q@)3r39n|-ed9>?u5ew#)60fukdaSTFWFYbB+q>?+oGt~Jg=$W z5{(6dy3OZ8pnAVipY!Egj?Z*WxSmVQ=MC2tj^{@vXO&k)m3|a>&XJ3C{?t6pDQ%C4h($MJU*YhPYS;AqPScbX6c(x<#6e$Uv&G}2 z%SvTjZ*2+3tn7xBJs*Ja%Qnc~3T>3krcsy0vuKsY&W7R6Il}NnxzH+=cnm77dVQDO z;-i*ub_>GUGE1a08Arz#)8CB<6ULBi3qE9M*L^CjCzYUbH32wd=jrG zdy*%1Jl#*-v|jMr=sWkA$LYB`TMdoTCT+cOvJKXuv~{2ysW~058EJ(#O~*5Z8`_}S zOuSkfv}~UnqL^zo5Bk*bB0jI8uAu=-g{`59k5o7sTzD#48n&>lVF$Y!Ucg0WfZaB% zP!(U*@HI?n7{`Q)uWR@QzNz73d`rc*HGBu(Rq;Iy-^UN6)gP+(k%k}RCn|ob;b-`{ zf@cmCoQ7ZE6Aiz_uh{+Et460(9*)_T7|UE9^R{h&sX0Q7eZcPb@~c>>(H}oA`9VQ-diujice`;>B-W|c4hN310+wH?YvPazGBI8|Nv|fy1vMHkc8j%;KQRQS1eaZuykCfs zZby8ulfurh8*f)hcisc7P?9XJ9BaK}@f@8*XQYCucppcO)VHJ672c6fsO3Pab7CfZ zsBz~jD$Kez-DTTb=2d{T&_)`kddNd}(7FjJNHQY+8A1+Ln6iGDg+Ac+;j ztML|3BKz$Ayhv6CZkTg}+i5xQ>_ks|5mh z1!H_m$RSKAsr(7w&Tzdn`2;;r(7T7k#$@Ix&h%g=kse88ruJ}lB=JXz^!jFpr~uqV zKNfJF-?S?9jgA5EwK40R~^Df;%1%BLqkMgOw{gL}{qsBiBX{?0kuS+mU{QTKo|1p!fq(NbWNSQA|F?GYXz!K*62N6P(+_;6`S0=-Hcw(;YUneRIImz2pWR1!5h^Wh5aoTMe1K8BPd^_rK96t>hL1QMcgvz*2WF4^Ss;1Tm;M(I?UeeFw1n9jbio?GbweLSr6W(y&ino&)Rcj SmSfItlrYB<1s#HAihl!mmLy>S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8e029f17a1c6caef1e3dda7786244b7906feb07f GIT binary patch literal 1170 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..406db18fb2807cdb857af21f1c574e24fecc3802 GIT binary patch literal 7207 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..869efb905cf62714f1d44e2e2fa9d16e65a18485 GIT binary patch literal 1361 zcmc&!QEL-H5dQWq=8`nFHnml2Yg>cjivr7 zeF_-x2lz*P(1-p4arSZ##-iv$^<{Q;ZoZjsX6NS9w+|lyJV4FEx`z$dAHO~=f#FsO zo)r$N9yS^Bffn2dhUF(>uqU->izJbeYO2I=Wh6I|W+*q65_-4KlSCv8x>j#RI`orR zOBEh!J`l%|e&y3gi}icla6c4-LyG4=>Ly0>z+~~C#X@sKUP+eexrn1gQks+MuPHPb za=THFc+Rz?5>JPNuF(6u+b2tYTPkUG7#3@-m;4R)`&@;7O19CgcNi+IDB%4L*U|zq zRL&epDkc68g_x6=XwRP^%izc!18XuYO;aX7M*HEDM*SE+C_fUBfkBa4G&(yn8Lq)m9AEEZK5 o!#NlsZ|ONd&^t}DP2v=?Yz|gauNx@QSxF)^HQW@7IKiYXATM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a966b8f44f3cdd082bbd024d25b1d61e5b98b3c9 GIT binary patch literal 10716 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 DhImZ$ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..00824b3820507e601a7fec90f6ca8ca3579f00b7 GIT binary patch literal 1306 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 DW?n{B literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3a4d606042fb8a5cd680d241d1d404a4d2fb13a1 GIT binary patch literal 9864 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5eb8f7fed5dce9a4161cbd7f2655b652e7e92364 GIT binary patch literal 5582 zcmcIn`+pSG760DN?#{9qNLb`$?j!7TRK~w%As!AS@IL+P78ve!u>ceoD`onPg{|3FMdluygO+J?GqWzUMjb z{`b;V0C(cwaU@WTV?DRAk|;w-Af8y=JneOzQdQCR?ccld89OylyjcLiO zmd_+pwyEbctpc?}QpV2=Je*__D>>p4B|FLt#II&# zZbUa_rd6nwaWZBq z0go1?c{J%z5r2$z>LUdO5~Q7TLMNPY@Uh9Va?VE3kRlT+Q^USnWUD_ z8@6VXipe8#C^>4|g``z16b#c&UZ2nP%80_x(o;6e)8m)acA=mPNv5r1VT)vk72|{_82WG_?^? zt!||#^|I17@&dCgY5THGV0}X%o}3H8`Pn$2;0Gku6Xd4D+=lCHZspLgBPxHI3N*O) z-7KA%c@Z&B?K3txp!_(DH*~hZ+=j*gPC}h7-0e$p_JaStG8kN65yG)8>8zXZ0zMeL z|EB@3FAuj&Cnwrkry;b5N|3H)^<(6GC&Q<~;Bbq6va}V=y5V#Bi@sv?C)3RIV z3b*p6g=Y0yrJR@&I+sx>LNGHdKLFzvx+o^ReTWJ zRE!{_q7_?Iyoqxv&Lcxb&sw8R_KO26)-AUl7N{?0yz4|2{n(?TgbOMzGFy}>ms%>? zu}#4bRb0Yl6+hw&uHdSQ53xB9;{k#BWm#^6^lE{MEOIK|!rKC&mZbtv@nigiy2Yv$ z)+!Z0q&;d3TXj+VvL5f$MewV7ysP3pyszTd z_>I6a1}q@Wd`(ZqZ}AQ#X<0?5vZ%Nln<`LnH5bSQIpP1-lLS@=-B($fe7Qr#?B?{< zX)!IP>b#(-=H@q5BnFl6GRl)Zl*-}Ma+u%pkuDD+E!uiE=?3W@+S1^l=vG&*VAJGP zSs%S})W}_!>YO)RHBMQM-NKiW=9r$APBB-A%`NxQ5yQ-B)TizVsQdoXI&rD5EKZJz zTy4vZP+)72eSyI>G1YjT#WP&B4Oiz~nmtOTCqT8pUe0E9n?}yB7G9r3@%s4EQy;^Q) zSffg)jZA!P)aJ@>3jRs5dJW@nkyKH8@_A`GhDb`2_x%Wa^4ywwpOzoaN{hZ4n6cI8 z2rqPfCl!o5s`<&M|EGK9jd}g<@FaI?*=$O;CC?xadkn z-8F^i2tu>AQ3c^)#?$&OvMxmIgO{P~yMS14bJID@C?U>kZ3!x`GfSA&oTw|IzBw^F zdJn!rr=3m4D_jqA*xP)7qOZWi&ZhM2S2st3ECkTOu5W^#= z#~>EqAeKVIN(^BwO+|Oox*5Zypu_;pM*A`9SToO6(*r7oz1WQuq2Wi0rXe~Zq{K2Z zD@yk~av6)rti`>g?~)xYSKDgt3eOEMdJ!92=7!gAjx>{UOHUz|xcxLDiDf0+v9~#~ z+%;!m#I@v(y~o4i^tJbhbj6OA5>}od`c;H`3tQ#7b}=~>7$d93u>?mcK97+e;}jH+ z5!jDA7Bms?OUTXviogi#HfhTMS@R%izKcR+AN?C5KK?&?4Ra7tuwTIe1xZ1^zea#X zeJ2V*Dd_KO#9nD#zcTX6 zunSUj&=b=^D+lNT3YzdmG+aU>XgqC75OytZV|BIUr+tzacyJsf{tyL(pg@=i{1$p+ zxuGzJx*JHYZqN86gggm?higxxHd;BpqfO1{F{7N*ap&|oa>VnF1UI~*o&?T$E+pmf zlC-Bmot_L=h1A+=sV7M4$tk3A8Dd*Tp$EyDSuN`n$$DW5SzO{+)*&1Yk`<|z^%BW? zc?wxv4!JVW^zX@PC4?CB+2l(qHVtR7#&Ke@+KI0?BHi$qJ?VmcFj(`em3obodVLC| zxK^`L#zbCM#OeHMMb7#ZiMWc?w^NW8$dbw+FJWypb5MCN2YC#SPIif<4lF>d<_gxm xi8XAIaB7x3Cme+{FT-?QT-YJz+bQs-=KF!>=f0H7w}Dd>wgOxo*e)H literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..42a938b80f2a6d00a0a1e0b968511abfebe6f612 GIT binary patch literal 1492 zcmbtU>rN9<5dIDnwyld6#0%apMJ_5Uh@xCAWvkWR(iW7UX_oDwU08OT?G_UKZ=w%i zLVN&!iwPmd@BluPan2T~X%tONxAV<+_Iz_@=1lhckFR?GM)4$wtGE_GC$0y`3k%vS z;f5f6!t@6*fI+e0W`Mj~g7ymUwlG7&D8k$kW>~_Agi(g6aBkCZ^>R|Hgl(r3)+(A_ z=HU{zi#)7*zHS=aa>G#%vb<#2R<3M2u3mE)T9)Drcm5uvS?8amu$JLYGqm;(EHL<@ zbRxrvgkkYiZGD+Ld2QLGm9B)XYvzLH7=rIFcH~@5U!$ZwPHkWa=IolI^Ozw-osao? z%y9U;YnaucRc%9~(5j`IcGa*-N$!^IqJ(=A?#md%0~x2#E#o1^WlUg_;hc~tre>9t zl%1>T<(R?EqUt!dBV$Tzo5r|=8KHh8Ot)rNq})C}pKut5m4H%C9AahZ*F!WpO8JYE_akgc>QPmshz? zmofEUXE5{%eSHEb8@dn0n*gQx^4d2vvnFyF>>pT4{F7*c`k#qp^YMHj;QSj zAr;z|NJk?HhS5KjceMPtCoeovBbh=XJI}DckX}%;u|)bgU44B=M$P8pxx6Zh?rB~s zG`6>S?G9a`PeT`dOIku_#lQlDH1@Q@;Kym4Av{ZD60PI`A9um_z6HOaWm`P0JMj6^ zpWu7u(RQM34Jr|B_vkMCo+_{ndV)JRcAz3E6FpE7?I2oLd7F;s<|}_}sf2vVo>J+Rn|*J$uf1p7U}~_OHKx`3=BHG!sbT z?S9PQqJ~)wmo!{XAcl7|=>C99O*EL;%-YKhYd1nQB(&IM-qBHiADX=wf)y?^4 zt!O&ejAE6NWZo_r)f}yJUDq zwrtjxEyv8d%|^p^yzFJOc8TZfo>g@x1!ASD?Gj};onJ9NHL{kSosklWH93Bh?Cj!- zz~BZ?1qKS9QMx;4G!!eQO`y+mXR4N2_XN^u#m;CLrHV-&j4xYK-vbUa@}NL;vXrcp zL}2t^88U^X07~4{aEE8hT`)~YK(kzxHG$JzN%*#mRg8;~lZ`z&?l)gpB#`j4 zHP5D(cjN^lY833IQ!+1E@)m6m_x&-ct>abf((tj45$s}zx7t5nF@{eB_Pk){-xB3k>KxW#ps1mwV+p2)WgTTy zbXZu?a92kaH63->IvP^#9&h33@svAyBE=E0t(}=G#TB!}i@CQ8pkD_8k=5Yna6#Q^ zsr#P?3@6n8vQHfsIMju0c!;pRt@1saUTUziZ>Lj*`<7R#a7?A>D&RehW`Fb8yZoVFSfdd+)Hqe@~s zf}a<4hy6ZOGjHPM#d$ufqnomBXFt^V{v08lW!tG4?CLXNI>D5=6`CO}h9Oa)6+OUr zfh6A;fH;I4A^hCUQ1~R`RwvOIaXwmNw?fGJA_ZoG4&@J47%kpK2+;a+S z*!O`n#`!G9C^9%g1PQwrJx}>M6wz>$IT17BDTV$iBKYfr*PfBd(L`o#h%~fSY{@)E z-`4?$HUU40*F#Yb1;7$6hDh?fbbCw{LFThccGB&{Bg8Z7NF4i~2mXz5sUmTgrX4G~ z#)NmqT*OgS=yxRqJ%I@v4{W1|FvK_uBFit4ZwJUDE#x04vpA=opI4t3@Cx??UG3zK HZGHa$$&K83 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b324a38cff6d19983d3e1f7771f589dd0bf74afb GIT binary patch literal 1460 zcmcIk?P}CO6g{(>{f>6Ket*{*WxI;mYQY~Xf)p!-wSp}b@z-p2nvEuzFq5@P!DsMM z6coiDK7bD;-pQ^MA+QSFKyvS$IdksKoip?E*Y_U))^NQB3+L)6;d~uuaG`>W6G5!vtH8w5LCds@!QPBxq1HpLsX+`cbCVxI@0?ZY-r}_HhlMk& zFdGBmtLTl)Jty$I25Mf$7NI|J(T6 zulO5IoqZI0A?YFZpNMoMhZS70v4pEO%Ba|=V%f$uIHbTi3D8+(ct0<0qwv}1fZ@i! z0-w*RQihTi={R91wvF!Z*z{eRz;Fx;6w!i=&dfK^#9~I< z!ig#E9kOPw+W8Fj4aJY-7YO->^C082CzvT`5hpX$DV!#2(G`3a$H{BaN{g&{N;G;I F)!*(j$B_U4 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6a5f19671936a183641d6acb9fecc865249590b9 GIT binary patch literal 2919 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 BeTx79 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5e020377828445bd4aa1b92e55420a14e0528565 GIT binary patch literal 2799 zcmcImZC4vb6n=({EG(-@LX)DPlb&Cz-c9_uhH#z0b^_fBpUkfDcjW$1rYcIFFeD8s1Vd ztKl~8sF>665$07aXz0UT4O3W@Gxy~1W7*5f-X~IesSo!x3Jw;~wMtyqp&Yu3xcEAp~U zGeaw`$?Xm9S#lgtrsUBX^t|H;Z^`C99hO`?D-TDfZ%HV)Km0>x% zkF9L+U2fRisTv!uRUtK6N1kCUbon%z7zTNxVOx=<+^%o}hRLoc zHeDwW`+<=?B2UKkI4k1)b6xizW{!|X{C3X7DH3j#=g94wq7f#Kiq9DCz8os+L}qW9gp!u$JcnO;~RXd<2!k{@4=;aWtsA2 zbNc3t3RB0sc#q-9N!I=c(@=#`f_G{q3Od7OY45N+jzpbdxU->H^W43NF-m9TBL%C* zor*2uK$NVY79*OkJZzS2%dd$;B25O1K}k!FyPiBuhXszY2E#yA1X-`ztcO)TlFlc2 zq+Kyrq&~@gUa)1DF3~%0SVlISkep665Umz#oXFx{I#DLEl8Aqf>xi$3NGj4uB{kOF zU>9Lx8q3c+e!v}5tZy>hNg59so4D~rb#1Ht1V&WL4Cm8bk^ca=Yj<%q5XJU6|TXX%edFCZ}{GtR%uOdKkolWWLw(*P6CXLF??# zSB|1x2;>8U#B)gxpyuju)SMm@Mp|GgvwWgBl%|3V~%w{e9=Bp+&HBtbMsYf{&b z)TXG-jVr%F>A`cPRwoYd%200$YH8v*`qpl=&`&d&pTQ2GwJ=bk8J%WYc$Ipu9pK#1 zU<qc2MdVP+W{CJGi9yxTXY{P@0%kcCn=Fhc0F!<82pnxQh45!2x<5 zj^bMAwX8 zVM0A7bxi5F!4Q`_c95B2cv|%Qni({G+pTT;ydicy|D_p-Ah12x+~Sg(HPP6%ePJ$F z1L<>1J`#;J+LxNb=aQ^~a@+ceXnKJyJ^yt@1Ts%fmTcFS_Zi%5*Sr+#{1rDH?$*q* zR7vD>8w}ctw7KmthveVEfRZ{QXdblhfey1>FrMAV3$%aZs}ZAn$z;XfVeSTt}4cMasR#PF;O zVX5XI3NTc=0RCIf45tof%8(8lhPYEG9aNoRvkS4PL>W#-v!voFvJw%qszHZ3S>4gN zqbd&7fWEAomPb>EH*Iq{RH#uy+-#p#b~u4Q=!A*5o(uc-C`L5B+E#5uYQu6D5~rp; zK8<5Sps`~I1vik~wM1!~VX-r%a2VzPlF>mf2|HN#V(K$`K88l8=ou#?Xm8L@@>tsp14z+MK`1ynCn=4= z5OxS>XjQN;BG~lg7sOK9K2B^-k+hHa<}dgZG=hJNxb_Z7?LAW3hYnZi16OIB#c=2< ujdK_w==0=4Bh3X0>LSTKxP;MAH-^hNP0|RR=(MVzhU>^uxV^MaBk>b)$TqJ4 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ca5b90a61274087699ab221906eedb89e4f665d2 GIT binary patch literal 2143 zcmcIlTTc@~6#k|xY+Dy7#S7vEL=+0hil8VUh(NJgXkr_P#+PY3mc@3r*`0d%SNb3r zP5c2q`d~~n{uJYx?FK5B7$4eXJ7;FTJ@@nNm){>h1DL|22n>uy(T=ewu3oT6apOk1{CuT}EG&GCGhPU2~&z{?xlwbVX1)KoGU zjFfE)cd5)h3ZLOwvwR+$n5N`}UQ_nthuvq0x`G!o`E5~<3`4_ph~=2eRE(5et;yL$ z!)tY*QfS!>-AAAqx`KKxN=i|_CRKPnK^cSMHD1}xhEo29j9S@qnS+glRf9bIOf-3_7Q>W^4*or^-r_45aWd zxX8V7f(u`I+5`vHxKmRzW0C|2_ry!@KUtq*Jqtdrd`S;X`PKQkjO+ z%_g|3azWh_3|!K6Dr#&QT80%boeFyPAYb(MHZt|+t`72%b6#UV{1FD>ruaL?BJjxwy1!4S{6uJG0!?o;>-Z+hi(YH@{< z(|1VOPn>q2Ver7Sl_*yBg{2rW=`NeLGTYYJ(tJksDYjIzrGl_SvaY4E-7@Loy%?^-ivMQgw#i9{8dIWmxablCspzTCNLs(~}J??~=Stl(p<8 zcM3Fma(Ej1U2aNuFw(VFU@0<9YMZ3i|v`x&7`_!yDh zIg*YM-TeulK$ze|h(^MQMIuN!84p zHV0mif5xy^QM&C0UG2&CzUCeAS?P~%AcDYC(rt0W-L~lLds?__jlgK$G@GJRqWM-= zXl@7<)OzT5qN@VWD1BTPfmtReE1vYsDuXP<=B0ATKXKRRvhCK4y~Og|4nt~PwFJX( z#gn2Mb{az0dBdlb(TZwve}`+&&ijign+%3rSxTYTeIC&D89u}nbAIV1B`0x2*&n?e zK0{Uu-r8y$il$+hE%YFsa$i$1%CZ}p<+*dmdO%C)Nrtg2(8RcL)D+#QRu1MJEHGqh zUR!b#YD!9RrT*$NveLKt*KBqMai=%eg1#CDB6NiX*OijC%MS>TVW1V%fVs} zPf^Ul!C(#Vie(K6fzJ4HNNvn>vcgfzS zSKjox+^P!AHL$Y8y!FXTA7du2PhUhUv{WeXlmyL{A z8IzTuFM})?hR7<@JW1ow{K7Y|`Nb0?zDA%N{ig|pfpJ_Td!`4&b&SxA4n%acPu2~L zMzmwNNhnLZLUZeA@CTB6CrEuEJApIKsfcr;hdJdO#5g9%=Pg2~X>Sr!n2t`~Cf+-d gbr<(&OyNF7G)&es?F`Upe@Q&TW4c_L#yMpE0Q%?kp8x;= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b27bee0d6fb09b7ae3e7dd4184753ca419eb88a6 GIT binary patch literal 2913 zcmcImZC4vb6n-W|7Q!mXOI4~?E0que%S&yGP%y^O27%Nj5^H^%Y=&fMvYYO1fF6H= zf5ubKu@U{?>1ThG$2+@A5+Ouv59F}3d*{x*cbHd?poBeOQm+juemJu7b3J4F#Vw z4DR#FMAgzCWrgDymdP-)Y1t*sso92E+O>IA99Z@v&GDzT)M3q#GlBXtL$6yloQXMx z2VEByxy!YZsO}oJ&=Lj5wYl!z5!H42&eVj>UGnY(X77udbF!w1!iMW<-zGloVnqHpT+~fOPt8lZV z?N~;U%tTuH3{zgj=dr{v#A~&R;d@H$3)5wo?YLpxGF@@#YKas2lwY-cq@b)S)hFUZE-2WVroesALLzLYGz9pEXJ*ck4FgJkbVQpztrC9JgL5 zP~&I`FC{B&>K@9gGQO-;w{@{@$Rb+&e@!wgvqr_3GW81ej#=6gZrLg-*ix~LjEXn$ zmWoSwL&Z2U3ht@+0{0o>ox1(3bSTKG$l*(d8=aP&$U=aA(iYqmMK1{oc2wl?6~oPQ z7&u0tJ&h_J;A<5R@r{aa@tunA@q-GEf(%TTC123z7Zw#1Rb0gfL`&Tqy;OryeYaZ0 z&pE?o>F&5YP9&XSq_rSdwygu7FY*@@BEtgTb%|}f4CD>B93XkGUZ@yOSse3idx{u( zqLSSv+c(l8fK!CQFi;Y1!Y4U%eP3~G}YN*2W27|!%3Tt%S~Nmb{TH9JNLMnXtArg zrq_M~!*64T(P&2`B3#$$IGvcEqf_(g#T{sV$Y-78FIf7L_6#TWxXvp%i(#o9sq>|& z2~|Wwb$soZB&;ODXN4Oml6$qaEL}Vaa@Li%6Vghx2Np>GBZtW{x3l7LT~HM?gVegF z{qz#NM>nidFpMEIG$aWZppn>@ZgV~KKaR^Z`!>BL5%MI1vFT@EvG_BDV!xs17n%y; z9eVbXBAAJH>HQMPfI(cr`!vcoX_C>8SdQkT!Jlai)3`C+^E<*JJjW|r@gwvOD-HDJ z7BJ;7b}qZen)kDwXn1}1Qgq8z{)KExzh8^;`?n4+!6$a^(`OaBm$Q z)3_&znJ6^OD!8v;o?&>8o5_Z)@2ql<7h7JlU@uDhOM1&ml*oIn&BpA8QvCb zr>eP4$FQo~4sVEk+u6}v;kt%xXL~Bf8iW4);jPEw!cJ zh^Fltp6z@p3)hoQmJQ4Bo-s62J@ax}cP|n^G46%Y?iPx=0ML1<%F^Mx=uyt;3 zaL15zhZ&OTU{KdBOE@``yOaQi_q{@$oSUWe4D36GCyJH2(5X=AR67)tTUD*iTskYb zpk1lUNc_@vD=-9YS@mfCqb{0$aTGixx@5N;U91^01M}xA%g$t11xgT2ta3C%l4`;J*rhOB}X8B(jFyG z&NqWXS42w`w;3i+X}5G&L$x)iOUET_IS`Il*L0ii0p2vUtk00cPtDanE!Q|<$#>iB z7)kqc^tX-9eUhtjrzCb;!qP?CF1giCcYCG^L&R|NyDe^(ZHC2e6rExE4~k>YE9cj3 zdpNd`{wMZsVTOLgEzzx;r975;&>)zgCuD%0lt4T#XB42723B(DAIAmIMMAqA(Lq{c znW+P?%=7^QnXd?b_60}i+ed;3*Dy-^OTKap7jc;=Qu0mGIj&%g&ZNN)9fOIfBZQ6+ z9_~AYvN?T({>&Ey4iVWru{|VRhj%a-HZc}%_&z3lIEiB)2_$e;VxaXJ1roq@+J}g9 fgCxgkAE01w`n+4XO&CEq0u+AxH-I^MS0ldwJZdzN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c185f5414b77136971b0972bf127e0c0fb27419f GIT binary patch literal 1702 zcmcIkTTc@~6#k~SZRdJOxR=BP za&hDh6bwu;j2!Z2wk7R@Rqpc*x83m>M$7yBkXw$lj*U+lV*Z}vWoH;(mZfS~URybC zV^{H(cq7$;@FEhy8z_RqYU4EM(vLfq(Aysxe586-$lB%CU+ZF7f5a)$0gsjx3*{p z#Wyf*z+y;LoQBK&j-pFWFI5*$`!4s*QLXB;RAfilqU7ij&7ZB&)0$sY>NVGHQvcn? zbK&pFx`7!JvzRk+4yK6&k|u^QXJFnWIzKe<$i!njp;r0C7KT>?;vp5=zyd>U0P(Xu zDf9%uF#NA!JP=>d!GKqr(l5!5TR-j}3G}Z%H?~e#cLs1=ElY-UPuwLXTdSh!Q}4n# zt(h^MQgdJV`<5+9@x1L=#lWCtPBiK6R`)o?dDf%TNqXi3$()YSdpWu!?nWfm<@+b> z17?UjUWHz#BAsI4?1_(4Rt8X3jMJ+er&l_ZPHUb6G!p5xh5kbr2FZhFE3^*Nm?}&j zffc5X5Gs5__;UbE(>F#yMBihC<`)C!6f!tZD{=}#(mpQGUN{K2P8gjcHTfNp!WV?T zBD#}_eIio`I$%<7M?b)fe*90+ON3##OxPGV;w#f@Ng6Js<+=$5xIO0x{% N3>x(>j!E1{;t!1>{3-wd literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2b26fa2a0681afd16c0970c4573e990868f0858b GIT binary patch literal 2149 zcmcIlTXWk)6#mv1DN#gX+_Wjz7I2I0gsP<6icO12oz~#iP?>}j9#|_IN2#oJb!q4; z|A?8U1ZH4(=0`D{m5k#~lg@Mod&b&5XV2x^bKAfF`Tb7-AK<%LEMQrERtyyIp4wf~ zVa?$34Bj`eiYs#@_Mw4~@UekBJ~40=pDMCuppMUUT+{J6L*9|GA2F~NL-8T^N(1TK zzriEkiKAgm2aD}J{*YU)w2rtn1})lk!_sAjt+ovMRyYh?zrPdkf!LS9eJd1U=t|$( zCQDXd40hZ=SdCs71>A{liorV3ouLSLL{g!hO5YVj8M=`S9(6?+DJON;ccW_z!}8R; z9Cy9S219O5ZVQHmw(E;K@t`MyF7J87DYm7+et0Hja#S(c*d7(%)eaEBx`u*D?+LhZn)=b<$)5K|wluCYBWWGKvg^ zBWQM{YKuXSs46->0Z4Y;eW_#J#7*4N(K7KRzS7Y)aT|9`bnvx~Z%o{UtvFpB-EJxA|;zQSJBn&lpsIb%1?k*=Y&B+!@%dS>QdiYrzqgl4L%L7|H zh=uQn)GndaX^_UEv%_$4(&DHoCy|bvFj&VUJ<$uptQ$5T#N6vjhO5WAd9KMZ*y}H@ zn_gsWq4Hculfn!$ZfMgZ(V)=VO6`AsIB=dG!U8>!S!C280SW~*T9TFK44q`?zl5`3 zc!hRtqO-IvR+kUJsw)S`RDVUbnms`7mqhwi`Wi}0%VS>C@EXx)5-W>%9d8mv+G>W8 zMc^DE$Rw73rdL;4uIK+iek)tl?5$i;w+}H>-Fl4Nz1)xF;y27@@E7ujFqRK7_XOtV z${}8=K1SvV<~NTJ%qv@(0ZW@hO*0b|=TrM*6m`6Xw-Xd~yhE5WD3SjhaW0VLMcQZZ YF3Jh7f-2siU6FVTw5neL*U`Z2zvuCJo&W#< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8c68e41e0ddff81dc87563c21fddc7918a902162 GIT binary patch literal 1980 zcmcIlTW=Fb6#m9`youS|%$?E_f&tqBFAy#T(gc&l)U8P*Y=HtiFkVlb3HFXPJ0|2` zwGyGUQu_n?qbkmX)FKz3OBqQbh@NJS=r_v zxF?mjuYAmqG+Q#v++x_MDBbkJj+Q}lQ}ediQTn|XiZGNa@ER1yYl`-!)WR#)L!-HG zo{4se*6SUixgo2t+OvKkIx3V#>D`(LjZLy318Ei+RCZ`t26UHu$&gr94Z$#3k%3t2 zw(COIc)dlMbVd2R^^$98*L`KePJ_WM2Z7MbEgn+;3~z^3bmq=HO(&%VZ>-n1g-@q+ zJv*q8p034%rq?qhx0npbclDz$I??bQEI9ayVXP{f0XJPuO%@hvkB<5-4$M)j*;=Zq zt9?Ed@f6Dr zR$Q#2#4r_sH0rc!EEX9YLnvAgsGvxy?I;J&T>Ol(gI`?yiVDN)A%T}p$iZ`l))3-n z`uyp$rf8_&dY77IIQRcsGY12T0J^43iHP6W2Ldtu8_~<_hqSMT(1PVR!}){Ws^4Bp0DT*;T`D}BZa*<2zb5S+7_pPOMQSI27E3e;n5iVyQoKt zUPQuiZg9c@#tfq}tkQi~q$(aBKkdx55)8FJtTgQtk2RjWxbNKm`Gm1Ia;6TM>&u0Xl3Ks*o>r$ z_@3g~$eS36tO|2qFp~d-*k>ePjrJeT Hk1_TYEyzYV literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..61573a4391b007ac87af6aa24ab166b5af241151 GIT binary patch literal 2174 zcmcIldvg<26#w14Hr=iz4F&5H)PPA^ScLk(BCxh8Mg!4qXh`)BZ??C|md$S12bIs@ zr*Vd2Wk$!p{ZNkQ?#46@Ei=rR&NO?^x##ga&->Tk&;J0hg6$a;uq=NrshG!QdD0bJ z$>XCuuI6z~C83XJ@d-Xv@fohG$l`MqtGFS_FI3#bEd{p~e94ftyvPk1Se>Exm^-C` zXFXi!A#Xv9 zx%v)S(tBdCYx_bsxsU!sj7L1!f|>DTZEPho1kWC4x{oxna9@c#~mR zo|>2A!mDgCWY)YL!EmZ!yW(Cn=nB8ZyAE-R4bS4v7WZvQkC+*m4hF66y24*`ct8nY z_+eV8OIKGYJ+u419g1dmPgqo_N;wI|;cib)n5!oRm-f1QGLpEolL`!JPgY&6{bY$@ zTpR`KM4MjZTVlhO8MyXpg}f}iP$p}xI*Y$`A{ zv~XW?wiL8AJivX1?J2b`l}AB`!I^^n(r9`{Gh>95oo+;FU|2l)>h!-uTyKsm%g~+z zJ~_GsWwZc};I+JU;e^x&>9QQJq`pyTJG$Zf{0YI&@t|Q#CV-eNJX-lk=4H;A$lv z=of8_7Ta2%`=)pl3D**dT|%kQR*gh+m*L{1#nFULA{{wl(2qxYq8FM2JE%R1xYMGU zxPGjgmzo@dz4hw4Ng!hjm6tl26lTcVfk`ihL8&*T+W-8D;5hb|n)nAdWrVo($C6<1RepRWJ+r(VX#M?xl zjjb%;9h@VIwBsu_!HSf%q|^5dxqEA%ZHe&K1J#oPPLC<6p3@h*Kqv^Zs4YcTNYLs<~%tJH3O?N9Dl-tLSK5j8(i~x zI2e-rL}Q0P;f^nziSRZ?`3^JCRo0)AvNbM(5^0D6UB>a!1W98wW01v}MVV4v=>bD( zU3LY-v4$Uttzo|-REu{4lH?oGGgXc0CM*S`Tu7<^HyH$yL=`wx5fh2EB33t!o&;;xMoShR5*c^gaS zcnk{`)@^KH(?ZS0J$%iu5Q8+X)YS%y43;JoHA6}$-nE`eD$>YW+e!!vbsOK{TMG>v z_p!zBXhuM$+p^GP2xj2FFy_*jK~+t)cZO6X!>Rv&b#A{|F<7^xuF(+aPC!Ade@ps$ z^MLf>3`#IuXE;5c82c5}ltp4E9bs^1aHlv&U!WX)o03Qv zz5)vihQaYlbfz~6`Y+)m7~Z2@gU(4>7t70gVC9Q@NR)p^vYgyQ>epEN6g{)XD*ZEZ z=@)pP&L?9pi#UxlbRugrD##=7AwD91#`7-bVy(*Z8_bnoBk>#357U3aYA5pzHVF)Ew#Bb$%$2|kUj g3zWwBc=s7D(3(OKC44};Jn0>!)% zm>s0y>l)^CT*eg*^E%$Zf`+R)`f*LiG#1s&bv1lb_0p>MmXgl&<82*TwKjq!4L3Br zqanx8C#$wUHqCH*+4U->-|%dwvf=T%*mk{prZ0Tob{(_KB{wUgzF~X9OqYD=aZBD1 z^(7jwHH60{N%{Fu`j%+8zAatv^Mdf@0vWk#JGNY8xSKpOE92`7iHuto49AvjN31sM zCE*o#sYWxy%dW+1>)f-|IGRkTqca#e#}Qtp#(g?0!=0n@aBNl~!5x2Fcnk|65_Q+Q zM@X5rvqc^%5Y1e>yXLIW^1}G?Cg0*_jXM={-L=c4M(@Zoj0YYcMiavjZ!~IlXeqlT z9LX@%^}v?vNbx|L={@pf+=!AQ+CSfQ|8C+4WyEi%Oq3zPR&|c-14}f5+|lqZ!?hjdAs6p+4Lyp=@@L0z(0WUWwTVGWH-}6NUp}j1C$q)e|fj*Sz^gnNi_T4 z@_tH1jgm3zST!mKr?Mhs)h%my&%iQP44lAo22Nr{!>WNb++>*SR)UXOlc!En&4)E7dFz^AWZZ01}!S3PX5j0T5hX!urBLjDE*TBd4#K5QOaG!xI z?@B7=OV-TASq+wfm+=ZQ%|X`w2hohpQhs+zC5$=4X=QG=I`#yeVWhL6Q1#sHkS~fy zT@sB)ilH~D`0afBC>;veM;Q!*6(Q4JrCAS3 zd^DMhlSsQ<&M19~_dL02S}svLZ`fu!m{5F91rV+ls+^eOdNNick&=*n_UnkQh)^oj zNcA+{-C!4Cq8Z!IIlknMCDt|=uEdQ8Y)!;?pt`oz0Rkf|WQOC(u1M(Ivgq;}o0+Do z@Zk~OQU{Xd6DGeRKHJaUZ}M8fWtfj6b+|CKq0$vp;Vn+-Mp!9?ANMGT1j&4#?XNa# zH40j1f3Cb2?YvZv3lh)9J&b1mC778i_wwR?Q&2jzy)_Sv|Nbq+KO^*xVi*M*8d3yI zFRWhroy7Ardy0CC=%Fv5rzU;@OZ|$TpJ>#B)AZj*GGJfe1?ry&rSKxo(1_#%ZHy#{ z<7iFk`jOfMwb_Z@-_YBGM@Xzp?%=86z819NPo-MM6q$qUbEIsPLzQiE=3Zv|6oMPYL9QziN>^sb{?~!3Y1TLmR<82qS zIEz=w!9jW%j^SM3(z}OHH&e-0>g|grPtoXhI;` fdPv(u;PE6b1nm?|Y7_KGoxw}g(`nxbwelFOG^=`;AmR{B+7gfUV@L6ut`)J3xHTeC>>?$(CnIU^GrY_9ElW?}BeaRGqu-^wSlD4mEUT(u z7%Rz0Y_^+ap|^QCq@8R@Rd~3=wRC>GnQ-M|$ZSNB(90n=R3L_zJ(K^3+U1H=y@|N) zUE&PIo*9ohF2iVpN7Ya)Yr(CkGCa(ecKIF;LLSwFE$i-nu_yBHv#h>pNf#C0bfzQT?&74OLBII)hut zXOP5j1}PMX){(O07ZwV>X{dHs^&@5d2Hz8YS%}D|eh392%w#Z&Inqp@B$F#LyzLjZ z)8z5WWtjfgz~_Bp%J6{KEXl0Xt!qlJ5Ob~e4|TAjgxOT~X}cUs(}-I#?(Nk*5m|=8 zywmvI-ecz&xwtQ<+}WJUwcQOWiiRI=$zZ9o;U*r@POF3UvV)(H=pv?FdiD)N?E4?6-XW@oNt|_ADfc;??~uDd-T*G*60Heb T#ubc_V6*W-o)@Plj8wm literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2b77793a5023791a38ee242692987f583efaf9f2 GIT binary patch literal 1643 zcmcIk-A)rh6#j;mEiFZ$ivP;072EQ&CPKWZF+l_+DQJXXj91g{v>n{;G_zCG8=t{f z@xo}l@Bw@T6MYopnPnA;O_0QHvODL@oc+$3bIy0Z{P^@4z#`_e7{=us988bE&EX2J zW^gToB7p)_|H-j)XDr7!TIuqj*{{z16a@(x3K zMfrkZye31j+3VDW-sbgyb_zAs;K2^p((1`(+NO&kzaEA{uLL}z1Tj4C>-<0DuDC?m zn@sY45IDnPUynyzmtm~ULq8BJT5uzLhI^&jF5lx`z{8feWo+%MeUX3NW%X58TC1ee zaR#%=;W_~p{>Ed-BnAxg#{y@_ZKoa_e|~w_tBZg?5xUe5fgprR9K8r2o_a literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..25e5bc3259e515b6e38d1ac643ed9da345e7cd77 GIT binary patch literal 1645 zcmcIkUr!T35dSSLS6Yfd75^)zR&4oqCK7x=O%MS|DjFd*#;0w&Z5OY*&E6K}#n0eZ z@xf?(@B{dDO!Un-TTYSK1WD{AcRRB?_nX<7`OTLfpFRUvz+4)GxSWB9$sza|T*1{8 zuBDJ?@N82?`I`*SOWHJosBNTb)D3TmSK7P`A`wMWtDwd$4;rFXmqrB3mB<=iwd5E*80L-z&XC#C9a9x+(iP;^@%nDw-HZyms;VKiqiQ@7wyA3=Ol5Hc zg)CAS$|8*-g>@(`h57lSA2oF+toce?zsYxnUlBt2)DNK`gy}41FiV{26J_#?3~%~{ z?KpWfa~Y=o)$m!LB4xPC>y~KN?bbDIHnocTZhNmS9%vD5YWt*931!rb58}>V-4)6* zBnpnf&pf`;S7=}sOAU#3r@bt`ku<6+k7(Be1U+A=%$I!wHO$Mn81n=$xc+ zx9Yr5*c3}p$ zRLn;4Ip$Q%M{yf>R4hc%i7%q~3@J(ZQZ5(e=dNT-cVH=sdy?FX`zkUjmQ{Sk(7nSe z!`rs;BqvPS(;c2ugmx+#~C5sP>_#+OFx@&a=F5J!xd#v`p^~!!Pl3 zv(i%W@pF%^Gej2cq96!YOiQfQwhO|^^FoCvJu9}sE9=}bL*DKsA>Fc&x zBsI|^euh!s$m1J^Tg}9dMIl80E|sujKNCei3@X+&Y~WjlnKP(3 z#Go;d8Xn<04Uh4?h9B^whM(}W29APs&7h<&ip{C%n<|PLuHqAFOsx#PRf$oC9~Daw zb%r5n?yx?Ng`J`INFZN!?A@SaY@Cye4AXqm6HXX|4bv-!P(G*?DyCZ&hb{N@C^59f zWs4hWJj+oRIMFp2x=O-JIi=dRU*-MrOk*FZSIiZuPqseC+tLl2t^!^)^^{ML{hw+e z*v*$YHH(FKLz#q1g8p+-M|h22RY}-Ckk<;8yyR&{}IE*GIw&~X-!ZT)Sc8@ zhW(@nKB8w<9~k-)Kw0 z2lQJKBiI5q)J9VYIL+G75++NgvRBuwm%S2@Cxs&CJ)fwqwb?) zBl!xQYvcQf5+(6F*a5osp=}W5-GHKm%L@nS?uqT=y$$x9v<1FgMF&k|=u&#nuk>M1 z8NfB=B9h7_%qf>~Um5cKOava({anT{u925rSiq+kA#H=0L>!}Z^aN>-(B4=qMW;xH zrxn3IS?_Yc} Be6auk literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..24eb4e73c6fef209b1574c8f00fe13cf0eadbc04 GIT binary patch literal 2800 zcmcImZC4XV6n^6xpVKG=idA5{QdIJzW`iAWfuDEF~*)d0Wm>a`w5@P7mRZhK$@B$Eu3ED!x#WWf=5p zmNz-a@LtjMbq&t-*KN6h37AllO@Zx{AGqm@niEcwZRZeI~BojV$HI}daF?uZjqPk zBpF+COkUsMt|ixzFeb0gpl5Acxam6g=&}qCk1N8-q(p+--i~k?7DFT&j`^67GAw(W zB9tH++0Ha?=V*IzYHf>ebED4fsv24VU#zUbu09g*%r3XFx&US zrepi!sc)qA>63FkDvId*Lf`Xyg(IXBuTwHng#<_CJu**C(F|%w#g`1X-VBv|c}tkG z(1r_E)#iT7rJSdFV2c!90m}1R)T17tye#7@I4#!{tClRHtN*R;XJyu? z7&Eq6r*^QbIpNowii)pvtRbi46yDQu8aWl~I`X*3Fw?IEUzZ6LU+cJ!0zODzSHp#k92&GA9VaEulEzUjIT^Z zUlE(vuFtD5b)3h?#5IR``yW&@nWPHuHcOawhO^S$UVrRMJHvSQK(XdJJ0W9~jwwWf zns55TjS^9^{91%(wsNmku3KJB?D6QU$zm9YOOm_Pdz&r~9N-Oxk*e@hZnf12`g|gu z?PZcq&zzI?B>B1imSH-?@4RUlsX!n}ow^|0E!H^E#Y()VQ6eKD10A#xeJ4V#&>}U} zRDXwkl!nmSNv5~}c1PUS{eNrYebGKdt({h;Nox9W9D zTK9amvLEe&FJBm>p6QJ+lKx9F(>3lE#FLhwa_B^B9Gd@wM~H&P=`qDH0X8}+S(u(# z1N3(q@00Wl&6c6iFQ6r+e*;VW4&@hGDL7022T2FYJU*cLsZa|a;vB6=Kd{C~gJ_QS zq^+N6jM12x9{2+T3SJg6%?UW28h9og{6%O|y4) zabj$=jdx4zIT;GWxIiyEC`pVcH!-0s;f%73i^>XSl-rnBQb;T5AjCxIyc1#u7w`!M zI6}|ENn8wqoW`fPL=eQudW`m_MpJZwM09~U8YLKmiRm`Rx)JmOq0=b|O$bEC4q2Nf bxq=y74#rs+G{)$qdIcZROrvw-G}6yMYY|j6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..521ff7445237771f73a853dc4d61f1a8af754a35 GIT binary patch literal 2818 zcmcImZFdtz6n+e7Q1aJ-IA&lZP4JUDRn1j-Vj@k`^@l!=UI+zl)2B1s%TU!R~YG%=eykW?~29}jn|sO zX*YS+H!&Uu1ZkJT@y6>kP4sQx*&-mMvSXwi+ej7I>*n zGb786$?NOfwd6ROjLD-j=sDXKZl=yXIxNGZy^9v?*$LxMM(bt|-#-4wRZFx~gS zrepi!g>R(y$&+zCN{VRzT;Kh>i6f*Duah!Sh6G#XIkGQI(F}4&#a9fs-VBws(uOc) zq7CJ(s?GhDOEFLPz!nMY0m}1Rr4l8(kq$z#&?6q8yeR$4J1y4~OO{NctN$(Ur)AVA z8MC%or*g2XE5ffiWffoRSjLKuQ+Q9uX{@MN)v<>A3{(9|@O6<;@r{lL$TQsRw{2el zBH-^(LAuViCQL;jxY<_(8{0dAuLNrGF(# z`m(58yFRPJ)bTOS6W1JO?SD|s_#9<;w^+icGn|#?cI#tb*cnE<8wxeo*$Nq>cuX!b zu(sQLyXUxmXQu7B+XM@gsX)bCjz;h>?xf{NyteD zbwoEuC>3g?GMngcu#YgYkLBfT&*!!&)+&_yy~YC)C%!yXUB~JWff3d>!^vb{Bs6ZC zbf=A9nV}o<uu)}*eVsEtvZogDZb0}5UtwlcMYw?^V^sKu#Q7+k&F#t_Ym^h;dTvRHUQmU9$YRD)Xfs3io zc*n&oF5nY#aF`y9xEq(q0lU7|E literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f13a58f1b0ac17b1ce04f86c666398348fc4e492 GIT binary patch literal 2340 zcmcJQTTc@~6vzM5(k@-ATok;aRzxXOSd=0X2uUTNBoz~j7-OQDw$r-U?rwIs2rtHu zq%V+YqCWefjAwSYRBS1&2`@XBo%1{YbIx3T{r>tLKpG1wR7@$D?uDizgc%hv+*5F0 zwzKk+R`5Ws8kGfUXq z)lI`$oY-RMSuu-(p)ac&Vxv~g3wx92D>O5hH4D75#cf@VgUKHEo$fH)*%XdTyfxxB zcsb!X#CjY_*Qo7sQ$_kNs?S2X9*Lt~kyh zP97UO?Sn+?-VtXHjys0xGDNWgd;H;`aRwYtcHYH0r) zp*TiyD~@4YRPd1DV>{C$$GN*8JG@;Oa;G4G;pHh%<$Z|+y(KEWIiMD@hM-H0ddu|c zgs6>9rVhZqP%ngY^p&p>lsAYdZ_!8NVSg3+ah^uB9v3h~3??fQu+j)qk8Hmo^lC7C zfSw;T@_AADN6C9E>05g6SqztOnN~?PPlyn1ODK7Sgum)gjfyL{8c;{57s55q^L3h| zokm|j*02}F@%py^inXp!D!u8^ncRXMvy5X{W4KKWdRQ^uG0Q%N<>~6rP>jidHA4{w z_1s6~vzG-~Pe1>!J&vFMsGmKu9>qjpJsViZCR0BV-G|cH5Y2$tAz&Dj0YIZx7B@1v bkKT6PBSGy#NO>CXVvt&ujANL?0DAubp(ko= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..053fa1a50091aea8288c1fbfb19b856c89d6eb18 GIT binary patch literal 4750 zcmcIoYjjlA75+{#nKKz~fLy?UAViENgvXSCR!KxdNWx%VWkwKer8hGt$qjez4fo#R z)oR~bTdlSBsg^#ZwQ5_z!VvILTKll}U27lzx>kSoZ@aqsht<9BJVQdlVlDFHo^$ru zd!POI_C6=`_QmsW0N9MbN6~>@Q6!M8MLX`5*b~8hQG~FU*ZZQlAMcOi19*UG`+51n zC=3kqGR4bu6bd7}9Oc;<&rIGJkKzC>^LtgM$8=SqNYLW8t=ull@Q6ns-RHQYF>k^(?a>j}$f(1PdmvU2kEIRY zh>fbu2x*9Q4tu_9r2K-$!3pIC$9e_byVQi^nZDy5ZJK&$yTD>~WJ0BUm7Z#AxWlwf zf2%-s%bMK+p)My)9xUiHZ8eb13@bNj3|mCe`<#?v?KWJK*9Bt8A2Z2=CCM@JKbNPu8;1-H+tDrYRSjRm(;Du?R*7c>hOd1x31A!f^k+5Pg>4dF*Ki!)kocyCZ{gb- zp2G>Id`IHD8lK1ZG`zqT9>%F0_Gm2Ob8%4i zd}UMm2&NOX*6>^Wj^^W8`v47ofVr@H*tAn)8h+1qNoUkl?g2`1WYks4CnS;M>di-y1AHP-3y88u_dvYfdMZ`1HMJS&j71_{4B#s!*GIvdMo(y^2m%lN5S zf7bHNJknK~1-lH7{H=`MQO{Qyf%;U|b(QUNlj=7uivvkjPt7WE4Sb-s(9(Bl3fsBI ztm4zS`MLghEJYnOW=xo|&VWE2ldOv7caviVb&=jmHC;|-!f?3-wXX@f%XB@39$Dth zYo_k7e&&NOBOp*~dIOF>khLs<=9W3mE1gm^s{DAG8ZJpp^IxF5(w#i8=X7Pva1&fX zc1o3wiOufJG?Boa?t@vwN)o#7sI+2mc${vAxvVIiynq~>dWo!S**Qma`lz-_3Yup% zz068itm*ag)v8>=f<5S#>|aDS^ckMtnc{vzzz;6oRYdJKj>K)cBh5o9Zj<04!;0Gp zm2&KK9`A91SWA2kds%c;xh0cZXEk{WH`N}QF+?3JWlk8@0Nv=+xd=)Dj_PTz)2Dtm zob?s&kx}(Uq-1^5iY1g!Sgi}7QzTF)GrjK2gnu+B*?sK7zBydj<~Wuz>??F(3U^>{ z(#?|L8|K3O6hSh4kvCIjLWB@5ecGHoK_N;FF)k#=OF~#|3TBGBeMNiAUnCT-QAzrSX?vaAUzZi!2^hK@%c71% zmqGg)!g{30dC8qp^pRMoJbDa^FTMq?$~cEqDN@)-kNggL-&aHDR~otHoM?R&p}l&|S%l9(ww{KZL?nmWJv_}JI*ECDO%7UNT{nsOv{RkKf&yh>o8nKK@E#vApay$AVm_i~@U783uN!7)**p6GviEsL1mQ zZqDJB3uxxBmpJtneN7HQsPwh^y23PCjMb51tkzSkS}9o@uF~|yh)p%V9;b_z<-keQ zH_l*vxXjZ~^E#UMR_iT^y&=6VF^Ns*u(_&~Y>H?O4f@)1xV1pMEkKCAw&ZmICVESW zqQAFzrruU2-p<4_Fpgm*0b>zrWvC!g9T6kQ+p^jEQ#n9}y#%g17+jR{4g6`m%3M+Qr@)LrFa>6Wg=sLm zT%y*_l&FfFFy!*eD$_!cED||Id3d(zl$ZiibJ)Vp1*i(DI)GEYtO-XIWxX3qD0{b4 z_O?*=I-tut(ID@_YI!%>WGA-EZAi#2q~vyZvKx=c9=s%b=|8z0cvtSkKjc05m+Zs8 zWj`*;0TGddqFxSFWJWJ#X0VtU`n{+sXo2BYL9MThrJ#w*Bw2HBSp&ia4OJMTwpoSu Vp_4|PW+Cjx-QXX89>-3s_&)%;F7f~X literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4ac1ad508acd6d06f08281bac6c2849201f371ef GIT binary patch literal 601 zcmcIhO-lnY5Pj*_wzb+?{Q(|4s0VY^5w;_A1#0Ko=x`xWJ~*5RRC;zw0_}k|bhFH3 za$^-|taJx9QQ1T}UF5%FB|K;^&=}i1_Q4viYh4>du9qqAiLGQ{T`K*;X_L;J%IVp< zN6D7g*2t*}N~V<0v?F=REu2ci73F=-hYNBlaFrjes&8pwy$;sBjLC=nznNzO&5>QY zg!;PJ^yGhyj_2x0wNODd!j6Di`@RC5Vx-KJN#!t}QxXL3)-)D-DDig}NATrWGS-+$ p#zLtcy+OP(DIwxmE5zs?b>^*A0UFE-fAc49VS};BUI`t>`ZpJ$vo!z! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..563296b9aac492662c6f20245f577c835c2689f0 GIT binary patch literal 41530 zcmdUY2YejG+4nOuyL-~<+|E_l#&R!`E!)@z7r?SDW7(42zy?0a?WD zqw}bf921nqa%`R)C&%;cUi>kEKPCp`B<{6$K<<-AJ>}#)>Mf@P@usN(IW3R+%6<7` zzo6V-PUou<{+JP@QaLk7xpEc*Q5ul5gET}Q5Rh|%vP{m+k@JGGTvqT$WkAjk$OSz4 z!W_AXzZdhMDjvRsyDtsOWpX*+uHf61LAgpE$hR~2_MlvOuskFv50w$_x0)YR^G6MT zM7i@C#-Nrz)&^yrJS-p&&!Zw)ACL{|I1o@#m#aw~`{R#4=E_DH%aKh?%5{uobB>JX z%7kp;oAvy$fv4RVlx1>LP#z(VR;!{ljSJ^c`CzmS{@b3(|Pn60eNOXo)x4u^6Y>-CrE4M5T52-rXC)i7o>V{ z6F0{MLe`&|=|*9Pe%c~U@L$9P?zCx0t%U>I-YK{w^m$#UNuc{AVK z!qh&HpWPaew*}i6-GR-WPXfZUuT zw*=(YAe}4k&!em4Hg11_du(SpdN3#-k`D*uBSE@}MfoPVFY^vu7=6^CEpUaWY=g1eBsW0-|p5Tv{ za^%Z7@)aKO2cG;@p5u>vizlz~_v<|WpMvrYxjaw)S-zPg|HAt8SAO;uH$wz(l5g|J zPX2f&SH3IX3*zH_z6DP2%D?f|2RZUX{{DNe{78PBBmWVQp9JYm`Kb%zk^HnKAV1^p z&+}-f{3ny<3%>dnUwz3}UorLm?T)bm@;`a>vHY4pzTuB=1MVxvwX)Of6pI3 z1murF`ci%xP!yzp!)PcGq_33>D3zm(Abrb^%z(1+R0V?cgUSig_bQiBT!Xn(5cE-b z&^#3is7^s)sm|QoC7`+nMXu_`H(^j$b?1&f__ina?!_Oy9e~G9wl75Pc;KP>a4-Fl z&$sz3ap23z@}+>Y=G%S&)juc(0S2^u9#DG*#ZbV2oA3B> zFrWqm#Yp{Fb%AiJf*b{$2L;6#)h$O2&QU|SUpPk%%~8X0)bJcNf*VGHSZY+BDpW=M zF*=}%^Tbq`NHmYdl^U0$#^WjlMal9*$|_4{R+TL+#YI)=qNOF}xHx2S>CE|+vla^yWr8}*#2XWl z#>CP{eM?k9`j-pphPR}Hu%tZJTw5G(YOZUnUDF(Ch;E2AA71QqEUt+pBE_}QhBd&X zxCF2@N2+%Nv#El*H^izBFWuNw#}hjk2pZk)+tRvYmi$F6jfuL3=+e4)-Rk;iNn>Ly zVN+93SkJ|;0X2&&@QnchzAul}f>8Q#q$yIpHdJjR@YdU z*iVoeF>X?u8QEL`c2i5`lXTPI=*)rjl|kI@N7l982wE8 zF{=Te8ILAfnp{i|YXPvuGoou^%~5_BfkZ(dhKyKMepqCEq_{o;#OAL)ELxqII?`@x zNz~OBqZhj8MC+ps(Z&Qo?w(-)Xn>b7@_H`cz+UAsKk}QJJOZq$D#gS-Qb$Zf<9=w) zU0he&7)i7=gMMSDl}>33<9;J}f;33o;hnYkG$xuim97WWf{q^H=VxsctSYY7y!A9} zYTI}0PRqz_6PJ3gXMAF=A`2RnZA20j(DU#pG(6lE0`MYMU!(OBmyOX4&gI~2v!=kI zs^$S2RkakKg}WXx4c*a~Ida0Zc^SB{G(+2dyFqJvUQE3k+ z60MR15Lw-lV1u5OHuk_|SHL{H{g?P?IIjJk$yt44j{7OhPnwfok|}viBhM4e%)tA( zWj4XGd84-eA=hzKWi^8OR>NVkr!8r$DUZYxCDqk%chQkyxf zD66lJ)<)_}nrmCwmz8d;jy5sJp+21!CnD8{S45h$dq&zRsH@f!+if}?wbY4aJVV_! zDl3aGXl7eqze$Hsj6t*pB2@*8yp&4TvU zuTJMFNRo(dOcZAw2t0b~nLQg)(Smp7RGFc^_4$9FFE zF+M+%9W_K(2pFBX%I}BU05Z+TIVUd32#gzSrmHtQtwXcD&6eX|;uS$pjN$>cx1a;s zvl1os^|1}{N=P9a5$(C-5RTG~iDraX^_$8g&9zQ5@_@SdOtwi;7I6E@6TC$T?V20o zRn09B_grSW6X?`r!#EiR{1RC2-41L(s4~_FHQ2bxCUXj~WBns_a9AFT)MQ3)cBDQI z{D%97ENO!DCG#R@Zl`CVzvm*5l*907jpH`TYEpX-^!N6Xr_?@WKaZYCALxiKOXK*+ z8hDK)PaUva#dnQ~-J!-|=!DFJ%4*slw!d%K>{#>ehw#U)^IH&XYAO;Hv6{Lyj>+5&1ollG4ViTCtU?yD8{;SH@ebu! z2ea_Y=@E4~ws)3sZCRE+vMhaMD$MB|PaW=qkmH$2daklY1Sxf_F}}y?^JvTIfxl1o zfo(BJ9XdC|(DqUAkM}{y2$aR`a)T|E_NU!_QM6jy#Wr|wuIJcHyQe)0c_~{+X9_zZ z)Gc-=N6`k>AjeI(<&v3^`ug}Re+$Djv|XKWzwA3fO7)S>_f_kmi)rk4cB?-+NgkpBk8*o@JsIy}yoXG^){w+N;a{B+= zg42-Hw*b@r?O?-#FruC3OB&;dK4Gb%HQaSjJ6%1rdPJRwHI)#(+~y>`Z3^{vA9!I? zO(l|6q#>Pa?Rd8I1}nd%;(9aM{q~_W~KmG1!Ub< zGU6%kDvPsR0mry)uxi}I3E;ZGIh5j>S4(2XCS4U7;6cOkg z#-pgV>TJuIBB1sOsL3eVtc|c)Ped4=%9!(XCJb+FH10?WDlh(CP9G1|xZS(ViN42Y z=$kIdZB!RI(y6QA&dfQE5r)g%ap$XOJI8tg9u$;#E zyiDNURBeFN4RfB9u4_TuJ*#fb8pO_xiN*GdW<*d7ncrB3<)ueZJ9PTaiNx1(-5bn| zCG^0mm~BOltGfAZp17KV#fLV}KuayPo`eo)r;9COu#I}TCJ7*3Z41U8 zZ65igWCnQXt0MX_W=ZCoN+&EGM>&U&3kTj6gQ6Yy`wz{ z(HYChSfLE4DFKCngB+rBwB(UDUV^fUw~hyGjp&->kg;RO3Ocew3V)oMrB=u@uYJjl z0KtW49K&;0N5k_A$9y1qaIsd`*>${1x7SZgV#jcXFK7>Ki|is{a|~l&NSW;;-71S;R%wpJg(;YQ+;R zLh-5HPDx!2sl}=)q?V|qA@M75DqLiH6e>+!+778@YI#VlP%8s!RY)DE4hpG*)yj}M zL>}ux=0ysV23Kal=)!iZkGefNBY;^=d;%ZDjVWRht6ph>$u`EaRJ_0_y0HIz~Xi zjt!~f)KMXIygDJIex*(fsgu<7koq-uJdWE=R;Ps2sp_ga61sTeL8S%WYt#f+Pb~>!NtnJGL}cm72E z)1KBVZg(7fh^abm^6^;YgOP;%b}*G;hX=RELdU3u)LrWCfVwB7ey8>ise9Qw-ltlz zPhvb@Y!0a{Y-GD8V+6Y>(2+EPf!eC>|4FtvwTRwv?1O3Ro+O2@Fh3yK>I6~PhmeSR zOUl@bgnU~E!L1>+O+64&+f}KcJ()+@Hzy*xC~aV z)zJ7sDGajLDMRW(^-xGXtR4xeN7Z8?^*BeNPpBOM^<+prrB(`B-JX2>OchTnz;lrD zbU-~5QomPEht#v`Ic|AApkCl`?8T6JiPIwil@kT1d6vzxqe(=PUgcfTvJQZggBOHY z5p1x~^)r2i;#o)>A`qy*tX{!W=9vAIuk_QU>JJp zO$F5v-lpn?#Ub@a^%`UUdO-aN)dJwI-T>Z^_CGUO-c)}HslTeXLh5Y=5!tEU2&i{L z>Rt6-NWHKA7E&MZ$A=v1nuo2fZ-E8Uz1I5g9SIzqyFi(zw;uq#9ALj6 zMPB!b2fFWZNPVwJYIhe07js5e4}ght@ws1AgC{8)aW3K@p_v?E_Lj$dPj3=6`7 z{Qty|5n$wUjNFhBL~4jzeB>d?GD0k|^&McH(yVAQ<%O9rI`K#6jwAtsln&EFP7ph8 z@(CfMi_sM^mNwX^xT4C^ac@I3p!6XPg+)JDVC?kP?jlE*3-u+p=`|U0wwLVEPREs}b#*trI-L>-wW)qhG?NuhNB!CF2O!#kqEci1eU z*RZg&*AKc)P~Q}Gl9ZXmoiI<*q62~KG`8#4$<9ERM{~&Fo?IB3eRQ%L#+ew$n^;m& zb>PH8Jszj-SixB+Y?bevBujaWSr)Ku8|ud0N6ht8jUVGZ-7!)6qB%}ZptZeKacIkk zkvOi_3rgT4qf;Zrv`l<=V=^*B2kD=vtMCihk6{xPrEJ@fWZ1!M_t2^hHfOS}yI~Xt z@Hjru*PJ*E=gx3$F49z2T%sFnl@8iZtJX%4ij?~0$xAHV6}&dnI7jfjj`qADlrD$1 zeQoCc(1*2=cm?X4ky?1l8GaZ%5zdT9<_Q4+&sZ6o8EN4SzhhnL+58IB~eeg9Koh>$q>FVN(vHPMVE@<*kmnDxN z*qPIwh)>CE$965@9Ft&+$}X&TSnn6M_kAU>2L$WAa5)K_xB^;ZT<*GFdOh}Zx!b>s zm-=q7FPx9GTDk-L^1=)R(Q>kTGx=SK=hXW#qulZC38IQf0*iIc0M>}>{drvxZlx^X zVJlfyf05EryNv=Z4Q-8+7c>FMnTtwGs!#&Vwi2Fn-ymga#e%98T3GC5C>>a4c}a2! zeJV$Q#UobkLb+zdV)fBTqbE!4%W_I@t;F^=r7^p*M=1lrX0s6$Ohojfoq;Y>b}1f} z^A}Z=l!F?4)`ky;AZ*ScDU5u#^7%7yEWUhx$*e+nQ!2q{lXh};^<<#vlA=0R7?$p zojE{tEpF|0LNHbrFTt-8`1hh?A8uwEWiuffmppA3ewxU_;2fCwRW8+1qOYH}H9|ub zm{q#CYSDb?Q%J+-EZ%|IWtI35g)&OM%N*;NIA2RIU3aRx4ZMQ z>&WGNOGl|V1eEd%1zza7n{ul_Cr}8#deFe}a*D5XD3mD$_GJ@JFBqOEuc@GVpTTJO z`uiXRCZ;|zu}j%(qtQQ!WV|HNxXI46y2IRi)nsyV}f<%6oXZYDC(3NCa z1F-?j&{RL|b#(_nsgW(+ai4pD>ZQ#{I-sfD*z@fI`P2b`3a+8Fp(z1D<3fm+c%+qa zT!r+>iWgptZC^v%hzEF?BFfH0SpaVXuvM+OAgI<2va)IC&or88rD)LT06*vK9qD{H zDI4!x`<(3QadC9Jl9@h0*9hR!b8x0Pu}Mdm#v1HC7j*tlqG*)=3gJxFE!%$u>q98IMRyLHO6%rIN#}=UIyl%*L{YWQV!IxaOEXp-m)IEedMYc zkeLyyX7Iy4Nf3NXem3SP>o|uFLb?dyS^TDs=2KfX1i&f#07UG6>E-r$DW*}b=9vBV zPAOgx&#=cH2XvxUSPlBAjsWr#tc#Z;<6w^p2||4Zr*|M#pu9esgL*{!*m~g~z+BgU z*Pp39Y2LsyZ*eUnW;2d!LHK*61bVJV15i0pK3bwpcMg;XWfl&@dZmO1+Qp%ry)l;( z@k1Gq(?n$5D>nSIa^hqo#?8c0DPTqeX&YUGpAIyrAAUb(9tly-KO`tB@E^AN>uYS> zMf)OLTlikA+i(IPt?dBZ<46ELm!n59VJ#lt=BUl2?$$$A;1d(z^DwazpCP-0SS1d` zoe&3Mu+)R+IQ{k*wT+Aw_%K&&CTlYVwouN)lzShE75=@{Rvd)TvjKp%`g zXYd9X=M9J9_c3`~cpC**jCyc0<&_tX+Crgag?FJ<35K;Z`VbwD9}+x)y3()o?7i$! zA|h7fS&(u>wWtB?QQRe;t?{1K;@Mi>({{`l;(7q_#X$y6Jm^w`{^UbZ) zMbH-NTDXVwUbdhMn71LpnScfYEv&{h>&17nvN1=tEHHx^`KjHOH zc>P<@-=@QQ&;h%>9XhmP6#rJ@KH;8)Td3E=)Uz_&TT`U>6a!fHNyQFW=KCo!I*DyB zJI>geK8t8q*2(J3LJH5u3yj8qV)85Tr4H>S#dTgNBG>#IbTyu3u=-(4QOjgdi2*%aIE- z4{)1%87b`r+&&Q9ds_H*`zK+y<>*GrqnoK8-9mfOtu&8rqiVXtCr4{MeAamQtP!U< z_^c79ViVIzoCS7DOnbIxR(^%vtn`Dn(U28lGYwsKBlRfhXhY zxWsuF86a665a;*M7AX&4U4Z}2spg*ILO`h4@QF_VA>JdpgaHf8LScEhNM96HgnR0X zo|Vvw(VFAoF*dKzP^=pqGr{I^^ky16#b7-14Is+arIp4_vGT#<@vXEMj7uv`*g_Lq zX%b)Vy@mFEvMHgLa$Rj{fRcv8+0W7nNFp@(Ao4?*oC*~3fc)teup;G zyR?Jeqd(B!=zaQt{!Jf>&h&T9$~iV09Kp&Jmbge<45o(ZdvS@l6pZdmUpf|JHa#sa z6PH7}7t(`T08PNKSzLh;mS;umkym;ne*=uJ0xkvw;A+oLU4RxLuJJ^62l}%(Cq~^% zB85%dAi$&*5vo zpb_*XjRVa}=xdrw-_lC@4i@1Diqnspg0^>0I4a-<4>o?+dicEoi^(dP70qqF-Y9PEwreW7B4IGM5U8?dMA3Z9Qdcf>J0C?tB(o}v$p z5PQ(xq96Qxe_Af~q&hKxHi-fs_D49_ho~_Pd%LAA_BVLgzwTh)4D6TfKF61*@)Lnl z3O_a4J~HeMzlVU|L&5J6;P)u-y9oRqO$)^siil!bhn=JxrP@(lv&Zl1G>p4II<6CK zF}^V)#w-3$F`fX7Cj#SrfbkSyJPjD{3yk*z#`^=~>Hi~)Z}Kqyz~S-HyQS3`ggg_s z{R;on*li2>EFfPBg~{A`V3~ z7NPZGwGZtL4%*>1md$RtrHy5~)kRy}1io`L|8@Al@^D`ruk@`zRANV{;REe>#f@z$ zx6wf>Mip(QgSXHj2x1PEh^Gp}ku9|PVTx>}YDt=W2Xg39KE=rF6GkIEVQ0bNN)2Bi z&Ova3W&|gOpHgfy@(silb`SzDz+#lz!qm*ipcF@u3`_cITzr8`VL0joHyNiaLLNb) z7CwG0?CN0%$?IvDXawz#hFv|D7Kr0O{}ZSd*+Wd6L>mzupDa$LOT}q)t2mvui!0H=Wjba9z5pp;C@YcNt5YJO?joGKc>9hay{Ok zO8MJe%G1X%8BF;GFX}1ZMr-ZjM1RPHW4`~=D-9(LkwN64RpAYXtW-%^qIj>d@}XomQa z7Q@rkNI?lHeS~Q72ywVah?Nc@im1#XM5;F2?V^pEjO|JO5MGzbldNmwNt(4MiMQuT z4hyd$CZhWceswZlJpMi**k1#&pUwhw!$*y zeZIg)__n?vqsnHddSN&-k@rJNMshreJOMVbhKSt!T(jF+V)@ys^cVAfT*iL)Pq3OdJwgd_Log`fLurOWt*-jz zfzFW|=}Nf?f2`*SA3<;S2zrA@&?_B+?yt$$+{RydAxXCsctWFwAfV@^e+e6LY(^WQBNurrD196#eFAL6iLepBhK;xoHsWH~h)ZB2E`yD@ z95&)g*odoOBd&&xxCS=jTG)u|U>~mUK>Ki?$C0Fc07sJc;W!rPBj-F+gW2~#8BQVR2~5skWhJM(qQr$_h$ZU!VMi6vU@spz#=};SH0#l^ zB)6@{46LV-d=Vsn86^J$Nd7KJ{yt5TAHaHi2wDD!qVi*Eke|>|@-sS9eh%yLPr5^X z0eSux?T}yk$o`~fMIQI8$Tr7{Ormogvz!`fY<7tZn`I)zB5_Rk#7tJ?#5PvsByB~0 z-JTUG3!mubtoP8-;S+6>VrEW_{DFwhjl4{jYwMaFUQ0@Di&DOq$=bPXj<3bGNC97q z9k%%57>-)F&h905^7I6N)4csQ~{l(2GYf95M8Z? z(4A@+J)(xwD{2J2uSVj}y^Rt9RVeaRkr<^$i)m_%s8GdXr5Y=uYMf|R!~MZEcD^ z54eD%Opawr0Dk`N7Jbgs3Uq#U1@cAb;R9j!FGzE}?MB)crg>4@;!MKY1*w^&)GWde z?@@m>hlZ)Skg64ss#TDx18Jo?nCjG_bcBk~$!ay7r>cEc=6qKg=p0uXP_c1qE)BLc zq;YqIfRGj-rX`Xxd*LOO@()TBS~)HOk)LV6UjwddSvz$gZ+YY8r|Ux+p>pEREuoT*1TI zWh5B_7~AQR6>1w@x*~kpX1aXw7P=y(kaQ(_+x0$QdH|vRO_K5H=pwp+WP78eC-hf^ zug2@HS)mH?nrqQ3e5sa*OSaN=O0OjPCE{eL!KoBhr_)$<22E9G(M)wV%~R(>8qTM6 z>H<1dU5LNgcoFQ%g>;3wSWARWq$@oYxj;N59!BvaOs8ig(jzXBr~xEmEg$WcN6Q&S zpnAQ#pqgCRLIL%+Tj>Tr&|%gzbvb~(lJeD6RHW=J1@pdR(WxD#No z&SEv~#_8MWCKRV{u7o4HMXw0ox(t`MZK2x-w9*}XeW&mGE-ddVULHjI-CO9MR{CA? z^4_GG(G>#)+ox`T;N48U)h#qw-3oJa8|ZvH%~p3n>+bZ?bD;yiK^5XL)I+gTnM%du zVh5#H&7SlS`JIEv5*Ly1eVeJ(MJ0S6FG~Mn$ovk-+((_&7V4|E(r|S@%*Qrp(E~JB zZKo>rpbwcP9x@9ZWIChzl?j=rJY-IEgkvysB)l1jBsVB*$+STs2&cssX(Ear|dA5#iX-ugTi1NNOyxmMYatJPrD$>saO}s9u%=IIK2mLoiQqW z=753SD(16{J`QBMtD1v??G%gz!s*5w7bf;Ygel`$W_pbGyVyb+K2vWuz?~zfk1yj#ET{up$-ZGp)v#eB0-mw3=3A}w z1n$BQw9*bZMu>a(5qqZa_GHte_Fe|hrZ_=OelqSs3wGHoPi?^lo3xe!9bx(B0W}bF zC0kOck^00>4c}t5-U6XsAgNv?OT7$6ze3&Bt8izpK{H>cMe0vful`IM)L#)4y#+V+ zHeIE5(jDp@dO*EPFR1tE9rZW*Qhk8GZu_C=qyCP7=pzI~AM4*hYEqwQIktnKb&ecM z5fjg7rL^!1p1;SHLNal%wlgLw#q-3o*a&CQ2KrV!2bB$YrEmM$^VkZJ8v4B83Kjj@ zk^7;{Xc*GIV0BXRpUforAry5|CI1UpnQy3z`jWb;uV@eTZ%F;uG(>%?kzvX2>XZDT zsggfGo8-Uf0r{k3Y2e&$oZfZg7J8}@)%B-a=@~XK?HEorKP-~?W{K>&F@y2kO220< z(K{QGCRA6U)emIAR9gl%(He@vxan`0G}5qWA0t4eMh-17a_LYb=(9c%&-xtXSf3y* z%V>S@D`oapJS>a^@IRt&T-AOysoF_B-a^m0>bixVw>K1NBCu*P6~fPI<-uK2GjWsD zOx*Z26SuA#;VJI+lfthk_R3po%l||L-LwZ@_B3sZeEVJW>YdS?2o zGGn(IZo{z8?)WxNXV;VP@cr?k?IJnN&j15(zT}72hRp+>Z_`juYW7NODm`&Fh2hi_~GP>WGM=u%W^sZ4s zUl{WtTnk0OSR{HGi^VX*u2<`LPz-liYKehb_tWFSKe~)0-YLnVG+a)T;G~u!wrq&H znUj(kiR+iOiCXTHExj$$SPn#1LcUf(z7C=;#=$`55NOPyKKXKiku+4i#v9FHYzj13 z>GJiu2iDyHiuV(g-b1e-+-RjgoH7mi+6KP93?J6KRJ@5M8|$Fr%^CrF!MD_*W*+v9*a&pR@-atr5}V=ri$Adf zr>V*t9xC@a#p<%I)23-{NvCmFtt~*p#r2QTcF$KF~rt<{9XGr#edD- zQ(72)y_Nn11>k$WhQj$3{vLXRBSfvNxc0Qh>58WCpVPH7>lpOZ)9ZKHH+s&OocBW& zld4xq-JyD?piFWqsC7DZGR~mh##wNx=g=tQT$*Z}M>CA`VcRdDCB{Xt@0U=_xRll# zm(fYa<#eiX1zlwPhORWOrW=iGG)1+#(M=9TO}Z|ly8Q*zv$y#cBl%)=+rEw7TrrAM zmcNu2_MpE)cnfvJ`nFBK@J^jc@2n_<9KVxH_IHNwb0g(`E~+fc-{B5qT-d- z42{Ut4DJ5gR{9`i66V2&8QN`Xay@A);k8MU>ct@A2I$jWh)?dOeB&M(VB8B`YK1Os zL5#8$*6e;*vTby%@c`W9cDmMhkRC7|@)?Njo_^h9lMh;Tq4=wK3l1pTM%lMrlFA53 z%3B#X*wKqtqQA4jm}G`upJIhS)|C9%-ZB3Ve+4c4x)ab~i~J}2fOpOhaCgWLbT5!K zY^6{6IhwlmM16Cho1J`S^YHU2Ir%x9Y5dc2otn;sR+x_DPRY&BNl9ODmkg3{clopU^d1?!YqOFm=m$ngGK*)Fu9^rAgwjB_Nr>K|l3>6s9!l*t+ zD~#u9o$(SKZM;J#8t>61#{1Bv59n6oL)v2eot`j0qF0QMX{YfI`j_#Eu#8W!x9c-e zWPC2B8UGa1jem(n#+RbT_)4rd{;dUQk6Yq$3;fIb!(!z#3hpwbI#Cu3&a=rA$Zh0Op*@W|hkDCQ{pCh>WCl~jh9^ERW-k8s#<|ZS&w7}Aa`#W{MjC+1HCn;K_ zaPPc6spopTg7F>lksqmxnM?i5AdN8dXm2w_GtEv^VRoUVW;d!fdr-{mPbZrL=v=da zt}zGF-R2;=-yBSjm_z7UbEsyU9S%R|=)Hk$^mf^&3%1e!4eU^~ls1SDu-C?*7#%GB zjy6-X0lO>3N7#3hno<74bx$-MKAE@8<9L^@ZM6#cDJX_NbkS!?%#qa19HpVLH>`(k zXwqi>#GCnWK*a^T;m*wEg~_=&w7pDwE$4N9FRjlfnTWp4an#-1i~5=qX_z@lzuNX6 zZiJMBlR7Mo>EYU^9uN-$2rl2P4El?A%+CR>!a%0!p*tESyjPjY`kBr`J=ofNmSnn4 zLd_{8&1n=g_orUwbQ);R0PM49yje>7ng`Gfvy3XuxwOKZr}44tqbnW8O6(%%f&mg( z?0d{q0{hIv>`@SxJ>!AMX{I?Ou7LAn+3edYOhlm`ZbbM9Obg6IXqD-YW)Jj)cDWNhg&f?{quI}ao9*>+ z(n;fXsq5Cuw+U;-sKU)6P*D`*z*QfcdArCFBM;TZ%ZeanIo`d0kMPc*>)4ZpDQY1*}eHcJyH#INVVDZ+vQmI@|-hJc8;~7)pN-R zoLrv_Wp|yk$kh}MRxkBzr$(-u4=* z<1v#GW)t!R5b{J2@FbdUofaM#=e1l$_ya{80(~ zi5;SdPRmBayNJ%(L5VKQM#Ie5Hynasl>4Y_dTwG~O`XkaDc`)F3d|d*(7YJ}bPF`= zR$64n-i*6iTbMeiIt-Xg8MLk4!zxE-6;LPO~$iXeGqNfv4q2*4NnF}sMl6xao0vv~e z_Pfx2*VS#BUqkb2?gY?T2wyK}G8Pa!T++Kw5FiH4`{0RMsW<@*kIgC@k4NZiGi8csaYcrx#S9NxdNjSX~i)*d`~%U9V4>&j6d} zfXVZ~;su|B8{t8?XGRD2wF`kb1wsoqAi~~ac;QxIpZsl8@Uf$C_+BR^5__a9E1=Gk z_P||L5Per{7X9E|M1OzLkqyP3cB36*gDYJ95dAZ}IvH`pYPX63{xyXn#M@qrU32m* z$;lcW-Q9Ki-lVwsS4hg+bgH?NZZT2! zH{Ye_&G+do^KbOE`GM$WewdUT;lw-$adT08#9BWN^4%%E5&vyd`uoo15Doxp4$&Fg zY%-Q}@bgHkD6s2uqQGg-NZx@RL*Aqu+Cj@d5Nv%$UCqzozrKL!`HIGx|A9t*L$l3q zsn+~2Z8E>3)6MUbw7}*Hd(%e_ohZHs1=#e|iyt!3;z!UzJ9ZpHwH zJ98!rgaLI&d_%g1_?$9aN&8OO*VmKe)bv}gv|9Ly4$GkKRu}4Pb)~^pm_}GVXqwfN zs;pjAZ}s*e>2BN4r5evUuXGrmCCfoP?Zz?tI;?-e@0>k141^rt3+L=4+7D zYdoD|?M0Va6X-T;5^cBkrsu7Fd<1^Mk)mAM;W+IQI%^jM7M^Y;vlm;pTEz&**(71q z*^4!ex>@_`_qLP0U|YWX!y3msmVL6PwaK}Y3Y>1pAhI?9{(MHSDp)0yW6grp&4$#? zq0v?uN)mH5Kz2?u*;A)+8vQh%~%u*cTsD2=gJ(_U5$?Psl_MOH1JYh6X3 zSXa}J)-|G=b*<=UT`xvkzZLsgH;6LpCUJ;$vuLtz6`QQv#0l0N;(Y5)aj$ikc+$FC zykXrV-nZ@*A6c#9zt(2i&)Oo3t*vr~b-%2z9*_rH+hxr1?Gutsu9nGK*Hg&iU1*u< z+H;A$0Z8yj{MNJQ-Njzr#RMoxVRtdHyO_jRtzvIpZPHt{uNICeyfG1#+%{=6hp z>9$SKZIkpy9;0Zhz+ZmSKT;$n3%Znwu_ZuE5%jQ_I>j1|-92KOpsiwG{@o&jZ})R= zZ~XB&Y&=iyZ{VLQO5Op?{kx0ltko`Lx~A4+~6IwZu%1~fT50`PA) zG5&V+4~$rBxeY|XzCMlL3>{z?f`3^`?{T&sh3|ZV!qyJzXFWv&t!HSY^?Qivb2QI- zo({EMq+_g?=nU&+y4-q&eq+4~G5sTLwO*&ktT*T->rHy!`U`z)y(RisZ;N5pPBGDX zN9<$0CrYjN#bWCNvC{fbM68cQ%=(8o*7_8p`kA=i`dk}%u9+W$-PIP(o>`)gd&R=! z`fPEf?Xz)U{zRFJs<^~C*_ASgD}~IwROaEzz-i`TdKUW^p?KSnJ#WaH7gzQivXeK* z^X?ot@8-_Y1?AoIKp$lAKOzgY0X``+qFmeM=MZLn8s%9T%xpTG_+(J~SDx z;reghHZc=P-mER6G(B|sl7iM(zR)Sp#@em&(t=n4N5ykx=uzO}#b!!Gu}&z$c! zo$rgBZ)OqyJIVf{6P)kkobMx@?~Ts)dgr^@`Hnf?_0IQN=X;IweUS6bC2szA6Ef2$ f@E;;_@h$$Fs>aBGl`F@|Vl@}vC*%7%EBF5a7zbvu literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8a75dc0c127af58c41b846b873d3b6ee293c15f6 GIT binary patch literal 2853 zcmb_eZC4vb6n-Y8ELm1TUaC^HwNe{GV1w4S2nACb+8~g&iQv0VHbb&B*-dvhKtK9V z`~@C8r$zKbPe1#k)H}P|B!v)>L(a+0?wxy|d*`_?yMO)t=W_tpP>x|3*W~3B6(hLb zj~lqDU{=Mam{TyX;uaPZEUJj%GZh~pEhV?*B%g z3=@8&CqZHuotl+Y7jl` zr)0iO-Di10#+SDnjv`Yldl=Eh@f@WmKt0tn!-hDt1Z1x`rI?Yj_K9YdDWL zHH_iDf(IHNBF~WQ)Xm4GK|w*o7ob|d-pT9``yuOhL{)gA!;jz^iZEngB?dO5Kxo*KTbJmySv6cqeA824=hm%b8`DhmbmJP%dvH}J@QtE zADIXY{e+%&%8i=e!K3kP`;2II!$pZF$C=}8>xNC^oYze~?F-~Ar}_?d3l&a-U@_j- z0wG8+TaIFc?Hp(Yh}13irYT~&S$5SbK{r!CQZ>S*D<6g!8v$l!IKGV(93q4IKnr$cMWLar4qqd5Ws*9+R zgdP`VSdiphYnjR7e3jF@C%-C4E7KlWDE*I=EmgRa7mpi)lHLqb@0#VKCN$+uH}kl` zs|6dE=qqUi45Nq)4$7el&`J}QzQ}s$KZXmm`wrbLA>vC05|hus63J(XBz{NFZ?qM` zyL9a(Mc^O2N7wTt0|syr@6#&pBqYr=Imu{G0{%j4l-8BWo<9(c;04aDB@fU$r0k<_ zGx-9s^{IWRBuP94J3#+Fv`vz{7DyuD`Ee$K2%2%OU>sK{%6=^3LtG`aF{BX31RXs==uz6698A+GlHn;* yw92#gCMNeW)QX^;4UMcMKLHy}973D&Bc6utuPMyX8l^AWk0~*LN_NAv((hjYnPB|@ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a3002e833a08c7f602eba15323e94f987a51fbe3 GIT binary patch literal 2950 zcmb_eZC4XV6n+LGE6G|xgj#H?wNyhu7GL^e@ud-i4Go|s1&RVrHbb(Q?1tSuP(|fZa0b>Ds$T^vpXYSnl+&g#f?BDIg*S_GV(hcOCzsJE0(K_`>HfS{Y+W8 zHB(+Xkb0!bj%WFf`#hsOe@vj`re$0HZGqY7k!zov9Gn#hjXODV^JL1h)pVtlRc=OR zi-ep?Ii@VmO4s6f9SpIv0(#Q6l{;RP9=RuwK5A|QSJ`)Id+W*-m=Am}Ip#BpjbYhU zV#X(ABpbsSdy1CF2KQx>*eF|kI`wFijc`+$K(P5RW(2hQxe8o_|wN0<|3Si&}ol-+iIO8EsRr(+4r0y9T^X>^>&dph31yE@Ksa{e#?@4PWc{2H*0^cN)Ie@dJL;5yKGGkNvp)kMc2aRiNwTd=NOxX8t1~1bUhq zG6mOJ4{AZTC#xz=bxG}1DuMPWmyb)kwKXqO%gq#sgR>Z8?BN!}3XTaPOl@xk1n7aCGtj6)DHgH`LTpNwyq){Un;A zl%!;^`3$RE@DQIPbV_a{Z8~JDs*<*^Tza^Zc3PQ^oukwtT1f$eQ*Ym3@z%U@8_Z&d zmlo(I8gZXaH(T-5G<^n;;qINIulQEcNGq<}Cu+H{1JH|Nd5Kcle_o@xz%&;Qpn2DE zib~ptq`60$URTS@xD~46BL^k&o{eKvUi<0mOyF&_cXe@{1*oS|TkEO#(nno8{V(8s zk{X~Z#eb~EwteSYCA|AVip%^+(#H~z$FY)&m&e$ zb(c#et+Cp_NG%&G428DQ(S|>vO%1=m@hx=D4R0eX@B)!j`W8;`^bMY#jQxuCEp#!^ zy#s{mz$pfLy4&WraGC{r1-8-0;G0`GGber~TLIIH=p?4|h=>LBh{w1fp5U5T#67Wu z2Vxl+@f0f}Tl3_6z_H;;0mHaVenhZ{5g4R#l=OxOxzZIU@2=Lp8>OCO&=DKj!dp$- oyQ8GjE{FMX+D?f?J) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9ff38f0b51bd3e1a790b4a8d5bf035acc54d5afc GIT binary patch literal 2854 zcmb_eZBrXn6n<`qEG(-aFIA~ptyDq?Y-(#;go2TV5(Ltc2)^sh<`R}ByXo!*&~Y5C zI{poRful1P(GN~P`=cDs-Q6ZBgoq58$==;_&w0+d&$;K^`}aS8{srJFO5GU1Rrz>R z#UQTr;5u$7m{Rc;rWMSnxQST>b1J&=wu(29l9G4i=e&H}l8WgrEU37RMU`+e3YHYS zt6-U-cZZipDz8V5d>TT zsejM!+|lqn zUeIt3&uJLO9R+tatRcscXjRR}r9nYn!+W5;eyx?+A@)PoZ;7(-MA0W-!G?zS@d3m2 z69BYIpN0?dk%o`)iH1+{nTF57H56dTz={m)vI3!DQ%+sPYt(kyIXYEA(SB}}Mv!BM z^U}@ZYB-c+hJl7be#^0UgT9bGB|H?%G&hNQIb4u0gT{f9VhY1 zAPryDFr(uNu4n^jTUuzg|P6tyL43w7c1 zfL3KOl3EpYPuhX!e^wGQm?P!$wrd9q45j3;Yad@@NGy64!Ej>Pc16BXD+|BG%MQ&9 zFMAeu*0^u0aXgt&M`bW_t}FaShf6vfL-Dvh8=F=q=dRolKEqse@|tJeA!JP3-6qcz zXlAa}Ex0SRJU70)#kaZXaJOo%d3J@==xuq1@zB$wXkr-R^}1t6ma^Nz4Hzc79@O&O zKeov}s zQSxP7%b~P)t1BYd^eP&b4Xhw<;1r%Ra2k0H1p{y6Hp4`>5_?z#G^`pZqQo%MZQDNJ zW590+M+Bl0;;!Kx18Z1kxN-yq-6Ch;UA$-DeSBcxLwsc5V|-%ZQ*}6wvhvPiV3##i z3<$OUJYFCsIn3H45Xsmy<#W3O|&iltiUi>6+y>r$ zZm^3mF^Mg6t_-+qiNXfM)lTCf5fk?vs;*^qfWU}qmEmNvD-t@lEV_@zrl#mt`}%*l zcn;;k|CrwdWWOzoblqksM6;d194#s>WORj0bPrQ@5i|^m&7??V?; zk@1#`S)9j<o@dLM?s%2HF2R@c;k- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5ddd2ccdb38dd91aa048bfa877b95ae5253f4b7a GIT binary patch literal 920 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..10c8654f7fa4779718814580b8d6821120e56196 GIT binary patch literal 14470 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bc0ce06b86e0e2cf0b7197095b45abd14b5fb876 GIT binary patch literal 1399 zcmc&!%WhLK5IxSb4JipNls6O_p(I6IDzQK+LTaN{iWIVG71qv;lbGJv!FH0CU*RV} zqC#T92k=pdu^YjHO;+iZu01n8Gq%r+=hyEaKLNZ#Wfd9R_rrq%vUr%sqdXontW9}R z8R_`6se0m!q0-W35b-gOhawsX-4jt99_Bkk==1>OoIqyD7B;#?a8Ps%n9!%WLa zq}S)hj3$HjgdRkM+dF z;z;^S?<|(y7a#bP6KRJkPPC=EdMDga_wsmB#8Ye+v4Yhia>y4^z&4ejuh`{QU}cwK zwA5`GHasm+!qp)9OEQC5>M6qWV>pn$Su|~1yCywD$rJfW^xhAJYU@xjzNr68_P!B~ z&;lk#^cd3BS_fOykh0XEQsuJGC_po%*IVc>;2P*XkklYOO>?Qfa{*R=et}f|JJMeR zaE-)nyNv{#>*q}8ZFe1G7$kx9h^@W5K{)O2KVTzZ4d6=7o c$&lq1ontfLZ{tp|-NikWNh;84hGzQy0JiF_jQ{`u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e91e585fbdc4985e556c01e0ead035df0b3acf7b GIT binary patch literal 1392 zcmc&!&2AGh5dNIsHf%{~q5MOkE0m;&MHROqq!P7Kq`;+BdUiHWV!E+|*PFDw3NHZ? z6%q#?fQLei-3Sg`a!OZPduBZI+5Tq6zkdJt3E&mNRTOaF4G$_P;$az&%6QDMHswh; z*70du^~D)O*wJPf@d=MdA{q+a7g6lxkC`y%k@wnTDA|!r!GZj=;7DZ%+DZx2N_a{%GEA@Fg5fT4yrRTxUKP*kjYY1^P&qh@#l$5yEn|!HBb}L8 z97=cToyF4o;sc*@BJDuMiB74m-U&O>{W6{ec#7=+D_9LsLODPM+f;(CVwYQi;V#2? zsoOGaI9j5Ft6}t)WCpX;Q~35{*mKP%c_Kf}JM?5ElrI%m&HrV2--wp){mh6yL%!bV zVvAm)BE3wxTFs>rpqcXOEc91!4b%uEwMfs?Ty5@LfHj|AAlLkk{8#U|Mq`N_fi|ww zxaotdsNx1`6yzbP4Y7_5T62IA`MZc>^BZzsNXX$IOvl3nmkx87o8(g<%Pl&`ruV;% SJKlB|_fR9LLaPOu>H7l}#j6hh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4867f2e4c7b27d81480d0d9ed65356514104f311 GIT binary patch literal 4634 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 + + + + +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 0000000000000000000000000000000000000000..14e13cc5d9125c963a9115460e47480383a846a9 GIT binary patch literal 100672 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 P&#zVe^gU&z&8q(gqv`jH literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ade875ced91cfe32e26a6617d02de2ca6a04f6be GIT binary patch literal 132951 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

-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
  • WvN@))IQj&7fnE-^X7}VZF}#FAdW^GYB$oJ| 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

    )|bCFJufgB)VoaYlEL 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 O6d`OBlu#rfALSoTegY8y literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..613c48ee00760826aa82f36ff2fb8df4df1db4b4 GIT binary patch literal 33379 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a8d2fe6d9d68e1aabfb48e58cb03fa9a7876c4a4 GIT binary patch literal 367451 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..169338858f0029b39dcc77167edf5d0a9ab66114 GIT binary patch literal 281 zcmd;JWMn`EEO#J$mWL2pb|EuNiR>nbkWwF%o(!d*v%-`pb3ugEpF!!@5L&~Y9i~Jh z2`t2Qzrlb literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e294c66e1ff07e506b787172e7cc2c8dd4439442 GIT binary patch literal 321285 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

    D>S_j}*hX`!a!UfzW0H5uq%Td& z6;pRSnIK=L;tL#xSKnp&6@ajpP z3dH}50U=WdrE;AcX@jjBm?K6*73otH$YfHYmdpHGsKYGowcAx!0*e}GplZeCjbc!1 z!rI+6w*iY9b++9o-j)zZkn>P%0CGKr)L1Q>i2NwU>UsA76Ge;RRD`)SG+VBKbEta= wfrMuRVAA2jB(+@{lS{kC=My22coNYMW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 0000000000000000000000000000000000000000..f96aa6f4994b191a8a1180ef316331dc99be775f GIT binary patch literal 7675 zcmeHM>2BLb5RQ{y3D9?70sUZ$U`@eG#1CUBk}(S+!J3mV1);Ef3)vv0F%R!O+MRsT%UIaYMyBrFSCLOP})K$ih4CN-Yj>1e={3c$l$ zkyL5ya2y3C7OQ48WWzzomVzwIqK$CGsRw*{Y~Y7XkJ#q7fPT%4Vrp_O=-oSNw~CvwAG_p;CLx5k zsCA>LyrlrjRzN&M@YU-d!b81@j_{M>LFEWcE<`7nJVB7dG*hVfqM`JuX=!__?&@z@7VO$i-^h zt(kP{$mBl{#pF4QWhUDSSq@{ABbY*nsYA_`%m@vT33ypM&y!t!$v8 zL9ju`zyvDchD^j{4AntE4l)Kgp9RkS|kvUaUP+pCa!Nw~wHiefRz zaZ6(w)oIPBok!XB`w(&!PR19N6jgVdd-MwycuHfT@S3AlUp`VBZoLmwyw z-Y(Rcp1EXRL$}e#9soH#cyzcI`pkGP3t6jcZz>O=k2+iEq1gt`V zZ9GB`*5fEnwAR2d6+li}x!!^!l9pE%lvj(QHBs;T>p7}9g?BCDIBA*nay`%zCD+sX zHLnoH;7xF<6~#fO?>#o4Ng%Ugpr_q0EdeX%(26OCI=d=IxEsFadIfq~f4s`%Uy80e zCbtx8=F9-b*_IBo*Yj8yw8y9y9cU=K=B;8_gV`-~x+Fsz3hF`Pq>*2!R?_$?CK66& zIAjRY(FD}Fse^fc0!;)I7m8LsXf9cUgl#Oz_&pJ3$iYgQX|TWhFp^MssE!0m&j`Pk z30y4H61OnP%G*;vOMJ<4^a5^y?y`lNZWAs1v7*sk(R)-hX-MRUtmnrOmF|dSl?4y? zvY~9wteDf*sN*4-mrM5wp0;xSoQo}TuKH3o!Pv#7e^G)JYfuubpC)UGf#Xi58GhHJ z5hRLQ_8T&as&ZW2v%I1qBp;F0nN=GxTc>wDx@~v)n5aq}qGB>7HNDAMjLkRURmg8b zWc@(LhG{aGs2WeSaIhRU=MZ>wGpt1@{ zq#uxy80RCwsCUYFkO8Y240DuOF^Q?kPOoq8f?G=ypHloX;FgX3>E}7WI`(n7E=1E$ z%|^R{hv9F#G>MsK^rzb>q|eFW$pgPfj54FGeUAW#P>~C_OwgvQyC&7L>r*QGq2EiO zThD&OBMr+F$gJ#s5%gcEKYOD7WxT76|!{_fx zc)ww|a4BR+&W(VIA^TJz*UjwZ#Cd}k_IR|q=AN0l;u$3bt;>xi}R>s_hByd6wx5AH-|CJe0AN~wP+E9P~UM1I7>x1QTI?pXokDI-i RKCoO}30DVwXu@NZ@LvsPi?aX# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..851a50d3bd3f4fead9d8c0ffd37d5408479842f3 GIT binary patch literal 36 YcmZQ%Vq|6j0~tpME&B~Z!$=te038eg!~g&Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bac19feb042d7dfd309305ff35de85f4695f5e00 GIT binary patch literal 6992 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e1188f3767c135a45186f9243adf25cfd0498a61 GIT binary patch literal 8508 zcmds62{@E(+nyO?82i4Cj5SMm#;zzrvhS3An;6SrX6#F5Y)K+1YnD=$6h)La5rx7V zMM))Pt>`T;udVMHTk3tk_x=C>_`c)#{?BnZ%yU22bGzob@AEvb>%0Mqh&lo(le9l+ zju}b^E2fA@0~8Sn7!-eGkoOD>0JiZmYp4S100vn7ao}ZE#DEtVMI{vt6%B{~ zzAsEJ+PbDtS_lm}4P4h07?})tqN?hf+TZM0_=2qCk*@y95N`XdXBs7VipOA@Z@g(vwR=7aDECP|=&|^m`O2?P;|Nl;?Sf}K z&0KESz}5GB*PT7T^br^R3v$Ch8;8g6i?_(a66SA-K0hkjU%V9j;Y2d}^Ysr`-rL4i zX<0qgU}>IdqBVa;2|0G#^~uZ7JX((SYC_9PiP%!pFNWev6z0e^< zEIJVHAAu1Dgw_~?XYB#B1pyb}PKZET1qPBpz5pmt(XH!6MFj=Q3IWF%U=%16QdK;& z7m85;E8#nQxO0Dfp@vzkO<>Hzh<@MAsPjX=2%o zQF?ZFLNWAn!Nqx0Y)a{P$v`lc`J83cr&~`%-I#AUo_XE4Wa-FQopW_UegZ!3k^D;b zVZYfu6R&MU-N^?Ujm$fI=!8&bjM|Wo~*WD5A!f7v%>zuyATriKf{H2^h0rC6yL zlcYeM8=Tsc;JfG-ablayebiP-#sP8 z)1mJiw|3v6%bq&jNl#u`zg$uwvV5q|j$1x50^{m=+FDTgIrpS_Kv2h>-zXIyUnGV- z3Pt&n8AJwjau2)6Q|^sd&YdLFR%X@-H{>R()tRvL+r11%lhmJ)+McERRi~yE z`%5#rzX6G)03?!xbs{myHVr49zjcvWp*DzLq08l`i~;ihBV2(T0Sc=ksIQyqO1)Iu z;0U9CMiFc4w@wk_fan^01=ohb%E1eZw#IqmskMWy4v2gM#lOXHLuz-3W0Ay*SdE&K zgX+B%Vm*|F3GrAb#^dqxqmc(k&$Z^1{^pVNIvtLlT+>*^#zAg5b}r(V(xPHACjfCcRBBOool{xOGj**xwLb?`K_<5 zGE1JL(UNAlWf3}sY(|k0?QKbONvEDjc4_j-Jd5tCethZX9A!t4q?-PFRs+#CsMKxw zcqiXdgL`8=1AgRvdqj9==~{IiE_m;_9_7Y>S_DlL#QVwx+h!HOHmheF|!0CnxwnE-$$@vKi6 z=t&IP0@pRvOTc*mu8m+C*ybl1K$@BuJ6se%mu>@47y*E9Z9lNvVF@_uJ}|W~Hk4D8 z1NR!0=-2q8j~Tls^0so@iouu(bJOi#UvXayUacI3#Nd1YPu!mq%#Zahr~*)k-HNr- z@PoozWgla$1AMuREstrt#JN_Mjw?*7KZLh;?CyTO^MF}RU%h9mwEY5%Hc#KwXHZ74 zPg$!7(&Es0%J4jXxTbYU$5h8Cus7^szk1p`{#Sfogt@Wt0s2hVzcb{?pLf0+s7U6^ ziRmBE>U{nEBMa2#NAm?u(5Iubi z+p3;`?Fijo_fU5N&K<)FrnlOOAWTE>I8PtUI+-wV37Q6m;7RT{d;kvbMMN6}crAT>mL{tfW?zGCZYMuN&c3RN~0dmeGsQOmk+yz zJ4EN_t55tcW72;gmi!RrQ+T8IgiE884%boWf9F}wb)H@SzFw=X?q*2_!2aTekN|cBa_vj)1!o4UGC12$5MO1*QY`YvLLRV9&<$&|c@SCv1|w5`{MPu{JqxS{;n@uPmNhsL~_ zaDLZ{^O>7x_Tq2cul1i9aWR=VT2aqEk=@b7xBwq}_dt;Tg}z*TQj1BzvvhCu-%!Hb z$=K?H@VpP5-@Hr5@7;ulCU`fmsG)D3tEe!HrC&wzi*%lPobZjHh_`*rnLFcjAN z0EM*)289AHz`v06U~GS2*dHyNEfNJbDsT!El4-w^v`8tJPhlF=ix&wgJ0kwU2zI^X zmw+(zHlf1?O#O@BBsohV9@VxdmlPI-U!qFFdUuFvw~h6ZU#uitVkZhlhxgWgJH+MY zuyflm(*^D9P-AM~Cvmx8i0;+~TI1q`jUPiYBXn_E0dS{@3vjO&S* zinTi0JT0ziCU$MlDFNRia@FnjBp|L z)4-w{V=Qdo5EBeav#J}kvMe+(0jjNaZ_A@lcrp13oO~G|Uj!Ey0h5LS!T=p&Ef~(V z_(s9$rhlzTyXGaoU8q;aDydzSFgP#6;4?l}MF7+%MT|P2u7XiibpXJYMiYjFd>Lko zy3@c}S?o}H0I=I4SwFPJ2G~FwLI{yW?Tf)mMxLr$G@RQvhZO;3bvX|l32lQ50L?b{ zfFNr5OD%su(+g8fVWbB;i2zWkZP%6B_1VdVnw*iZ-ci>(y?2Nf{sd#d<;P6E8+6tY z0q%Gb))Q1iLQo)K)ri}Y(dKPxB53Q)Og5aljf$MA-YQg&U{k%p_oJw&v7z4orZ@4o zx_dWeSv{j5fsZ52SnJa~XFHuWHJserKb|~~Li|FeP&8Fjmau%ihYP9^ zCN8w2wmw(+{r%YV4b2X58hheTGMwhi4SsJjDdK<-`Q?lFgM;@6-pDc}7{dy*b}Qa( zTe-!3oSmFATCNacX$`5B=!;2IFF4{8{rue%y3uRtMTKR~W}L?(iwrAnf7rd-h%#xa zZ6IahvAY7fBN%cB)6;C5d&9JoC1KaRR~CJ?PE#;v;EkW((nE-|jJ))uigT{W>?}C!@S9eQmbEcO$@V46|yy}{I5CC!GQBZ)q z0W2W1aSgT*+rHo*WC^}s8X7Nss9+C3;hGM4o41O?) zlOOsCJ*y&^>YVX7MOvjsX?fXSnS&+R494XAHOc|$fkU^#d;Ipe4W(%mWy^?8{33~S zyhEnHZZ6$v%RBrfM?ocAPXMW?%F`v$;?fWjT6tUvujnbG-N!OLxRm#lTlp8B) zngzSI61=Q~h}*AUT`z6vuDmc&$7FBI?%c}vyxK3ME5i0P_nEN9nI?UbMZI=@{N*>6 zS>40ViT$i^(2J5j3RlI|5`|o?TKFzp-oHGYnOoi=wV>z-D@s}X7CSI`l)odFc#h2? zXS^()H+}ChIZr9w?BsD7yGwP-GaU_0@uwxrp3vhYYYInrjE`lf>!p7|>h~FYb_j2G z?Sjr{)Pg4mCEzc^8sUH~PY|}A6l`(%)@_0xcoKB^Kt9q?qni6a@R8DYum3+P+rKjEpUEBwch^s{ zo>Y#qEcjS6D$mEV^2W7%dv9I)o9KgPJS;>Tw|j?wE0UksnJCV!IcNa)Y$?2-CE)Pd zB=XC1T_H`j$OwtSjFlP7G2odFWVuM{b;O;ln`i2|M#K{PD|FtNlt$FZ3Z(uzzw793 z{i@(hNL_|b&Z6tbg$DVf^GE)NMm@L#s7Af_;M?ZWWG(IZBsG;7;jX+ErbFoR#!7ff zQu8buJ@ehpv$RKhOjUP(?VrZAxxA~%3N*Sg_R8@{ebnH{_V=MJGb;BwuWip)ig=lE z0a6&Yu=IF))?S{1UX;&=yG}#zE27vK6iGImnAAj?gcA)1pa7S8wN%H_6$^fTWL1h` zFQ|y0z+d}yRg673wHV!Ic5u=-FRTx-v}^00T|MIZkJ<%P4OIk1^QS$#>9YU3HT>_K z@herehBn68C=P}JiHH-T_A-GluS?$7CHghrmA7zMVR0tph)%(`RvOFP%6|W%lelE8bbMm7 z8`u4Z?Yp>MG?8b7nMtoQMK5;DEs~8& zjNdyiyk{xfQB;XV_YRyMe;9qWW-S)-W+~bUHjriPt zFL>PKDpI`6!Q~)sEDUQ=BGzYA3g|FPWxP2 z7(oi%G^Ze()m$%F74f7^qB4?9R=}&awD+Ldv8C%_!k_@q9tFVQ zej$C2HYL?)<&i_(4S_eJXsea$wyxEB?-+kB-k|noMP)crH41m+Xi$RqQAybNl;gl# zl0Tb3x_Imti<}Pjrb%ON`{PJDld|VK{NL?(AqGvQ8Dns@QQRBHxLkxhQ%j4!#Kj7Y zozniT-`ptCq#^Rp2N@~i^o3cjiJtWUr9$jnmMM}z}eC*xclJBxMhryqIHXDgSHj@uremo+{M8BUaosqQm~3V+Re)&8o( z_1e}X#iahwKJ!)=vjf&cIIGzVwDLDIx6wOS-`^zURtdC;H1l~#@STl0WuMk_zD2Oe fmP3;_i_Y9x + + + 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 0000000000000000000000000000000000000000..eb1b9369d45fdd9a67fc50dbee1b198b7eebf540 GIT binary patch literal 273542 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

    m!5`#I!gv0VG}9s*hOf%qC3i3%T+l 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�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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..772a51a4d30cf389fad9805a59866cd55c4de0ae GIT binary patch literal 2322 zcmai0YkSjV7{1eXJ!DzCb!;3|j3~O5(IOxS19Te&#yW~!narV*w(qvgESX8lK`(!c zANeYJU1N&MH@z;u`ZxRy>is6^VFH&Q`X+e}_j9_Rq<{SV)2{&DMO(#wTuz~!#uXJ; zaV>@U3}U#hVgL(LQb}VmjT8!m$nt_!~=Jg4n8i8DMg8D?k;zjUisp+UUuS_-oN z6_57$&3LRu7+VVVcl=GKG;eRW{ZK)eq!*ctg-FjCjEM)nYc&13Qx{v?vL4@b?7o!f zamBO*vC=^m%)gsgPp6h2G{v@bW$BqNrh<`)Zr}h$_A}XNudNBf#8zi%-FWB=uO^I^ z0%e}9X$j9a?I@3|DeGa-POUko?eCS0cOz5-Rk!$zXRL`i%kkLa@m?N*L=J3PCZkZ< z*PLp%5LTRNO6PFaqunSyfA-`;(~7vFE(Oz+RgzqtSr;YqG`xnx3J$)M5$tzFm7vFT za#Lt%cneJh2YTe4@jT(mE|*=`aW%Y(LlV2CVFHXg7}71kAZ4QkT&k64E-#jg_1krtyLwCbhG}_4 zwx`#FYGYG0{S;Wf2cK)%Q_We1NB$j&X5GK<&n?(kzfp)8@L{rFPAbWlMdU2&-LqX< zrw!rIvrVp}FXSSHg3~X+3TgC$)OyRLwS*;nQMJntOcvN{b}u-m%UIl)fr-`GNp8)) zPAdJQr24*V`ea6mX7lrs?;{< z9H9)zPGxP{aY8 z=%QyZg17Mw^%=P|FF{ZLFZwz9pC|e>(J$^nFW^{!KE>#fuk%vs)FK?$e%FJO#pIYn)p zoXFuloC!u$rmZY1ff>Bdwvn6ofHBWAhhC|wd{IS%TIE$zCRg|knZl3Qr{ED1mB$oI zHVrXQnCv)%0`~}gpYpG$d5A2&4iXxtO_th=xD@#181zFvr1&TKsK3-+(X b^YNu!9QXlA$zCPkSu*hchUYA0G0go7cY+2F literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ab42096f567187de733a727cbf71e894fd1c7ac8 GIT binary patch literal 6225 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 bYN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..547008c257e9aaa4e6b40f8359406b941e4a32aa GIT binary patch literal 6715 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 literal 0 HcmV?d00001 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 + + + + + + +