From 2d6f505a30b4f288cc1420f81fea362bec5708bf Mon Sep 17 00:00:00 2001 From: John Blum Date: Mon, 11 Apr 2016 07:31:05 -0700 Subject: [PATCH] Update to Spring Data Hopper Fixes gh-470 --- .../HttpSessionGemFireIndexingITests.java | 2 - .../GemFireHttpSessionConfig.java | 2 - gradle.properties | 8 +-- .../src/main/java/sample/Application.java | 4 +- ...FireCacheServerReadyBeanPostProcessor.java | 26 ++++--- .../webapp/WEB-INF/spring/session-client.xml | 5 +- .../src/main/webapp/WEB-INF/web.xml | 14 ++-- .../src/main/java/sample/ClientConfig.java | 72 +++++++++---------- .../src/main/java/sample/ServerConfig.java | 11 ++- .../src/main/java/sample/Config.java | 2 +- spring-session-data-redis/build.gradle | 11 +-- spring-session/build.gradle | 2 +- .../AbstractGemFireIntegrationTests.java | 19 ++--- ...ionsSessionRepositoryIntegrationTests.java | 72 +++++++------------ ...ionsSessionRepositoryIntegrationTests.java | 2 - ...FireHttpSessionEventsIntegrationTests.java | 3 +- ...FireHttpSessionJavaConfigurationTests.java | 1 - .../http/GemFireHttpSessionConfiguration.java | 70 +++++++++--------- ...emFireCacheTypeAwareRegionFactoryBean.java | 44 +++++++++++- ...reCacheTypeAwareRegionFactoryBeanTest.java | 49 ++++++++++--- 20 files changed, 226 insertions(+), 193 deletions(-) diff --git a/docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java b/docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java index 71be12d1..fd46080f 100644 --- a/docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java +++ b/docs/src/integration-test/java/docs/http/HttpSessionGemFireIndexingITests.java @@ -115,9 +115,7 @@ public class HttpSessionGemFireIndexingITests extends AbstractGemFireIntegration CacheFactoryBean gemfireCache = new CacheFactoryBean(); gemfireCache.setClose(true); - gemfireCache.setLazyInitialize(false); gemfireCache.setProperties(gemfireProperties()); - gemfireCache.setUseBeanFactoryLocator(false); return gemfireCache; } diff --git a/docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/GemFireHttpSessionConfig.java b/docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/GemFireHttpSessionConfig.java index f0361d3f..acda280a 100644 --- a/docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/GemFireHttpSessionConfig.java +++ b/docs/src/integration-test/java/docs/http/gemfire/indexablesessionattributes/GemFireHttpSessionConfig.java @@ -50,9 +50,7 @@ public class GemFireHttpSessionConfig { CacheFactoryBean gemfireCache = new CacheFactoryBean(); gemfireCache.setClose(true); - gemfireCache.setLazyInitialize(false); gemfireCache.setProperties(gemfireProperties()); - gemfireCache.setUseBeanFactoryLocator(false); return gemfireCache; } diff --git a/gradle.properties b/gradle.properties index 0028c7c4..4acdc2e0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ jspApiVersion=2.0 servletApiVersion=3.0.1 jstlelVersion=1.2.5 version=1.2.0.BUILD-SNAPSHOT -springDataRedisVersion=1.6.2.RELEASE +springDataRedisVersion=1.7.1.RELEASE junitVersion=4.12 gebVersion=0.13.1 mockitoVersion=1.10.19 @@ -14,11 +14,11 @@ seleniumVersion=2.52.0 springSecurityVersion=4.0.3.RELEASE springVersion=4.2.5.RELEASE httpClientVersion=4.5.1 -jedisVersion=2.7.3 +jedisVersion=2.8.1 h2Version=1.4.191 -springDataMongoVersion=1.8.2.RELEASE +springDataMongoVersion=1.9.1.RELEASE springShellVersion=1.1.0.RELEASE -springDataGemFireVersion=1.7.4.RELEASE +springDataGemFireVersion=1.8.1.RELEASE assertjVersion=2.3.0 spockVersion=1.0-groovy-2.4 jstlVersion=1.2.1 diff --git a/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/Application.java b/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/Application.java index 5c12ee1c..fdaf83d6 100644 --- a/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/Application.java +++ b/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/Application.java @@ -27,8 +27,8 @@ import org.springframework.context.annotation.ImportResource; public class Application { public static void main(final String[] args) { - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( - Application.class); + AnnotationConfigApplicationContext context = + new AnnotationConfigApplicationContext(Application.class); context.registerShutdownHook(); } } diff --git a/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/GemFireCacheServerReadyBeanPostProcessor.java b/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/GemFireCacheServerReadyBeanPostProcessor.java index 7bee1604..0c624bbf 100644 --- a/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/GemFireCacheServerReadyBeanPostProcessor.java +++ b/samples/httpsession-gemfire-clientserver-xml/src/main/java/sample/GemFireCacheServerReadyBeanPostProcessor.java @@ -51,35 +51,32 @@ public class GemFireCacheServerReadyBeanPostProcessor implements BeanPostProcess // tag::class[] static { - ClientMembership - .registerClientMembershipListener(new ClientMembershipListenerAdapter() { - public void memberJoined(final ClientMembershipEvent event) { - if (!event.isClient()) { - latch.countDown(); - } + ClientMembership.registerClientMembershipListener( + new ClientMembershipListenerAdapter() { + public void memberJoined(final ClientMembershipEvent event) { + if (!event.isClient()) { + latch.countDown(); } - }); + } + }); } @SuppressWarnings("all") @Resource(name = "applicationProperties") private Properties applicationProperties; - public Object postProcessBeforeInitialization(Object bean, String beanName) - throws BeansException { + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof PoolFactoryBean || bean instanceof Pool) { String host = getServerHost(DEFAULT_SERVER_HOST); Assert.isTrue(waitForCacheServerToStart(host, this.port), - String.format( - "GemFire Server failed to start [host: '%1$s', port: %2$d]%n", - host, this.port)); + String.format("GemFire Server failed to start [host: '%1$s', port: %2$d]%n", + host, this.port)); } return bean; } - public Object postProcessAfterInitialization(Object bean, String beanName) - throws BeansException { + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof PoolFactoryBean || bean instanceof Pool) { try { latch.await(DEFAULT_WAIT_DURATION, TimeUnit.MILLISECONDS); @@ -157,4 +154,5 @@ public class GemFireCacheServerReadyBeanPostProcessor implements BeanPostProcess return condition.evaluate(); } + } diff --git a/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/spring/session-client.xml b/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/spring/session-client.xml index 1621d292..46818823 100644 --- a/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/spring/session-client.xml +++ b/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/spring/session-client.xml @@ -35,6 +35,8 @@ ${sample.httpsession.gemfire.log-level:warning} + + - - diff --git a/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/web.xml b/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/web.xml index a6855753..d30dc3ee 100644 --- a/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/web.xml +++ b/samples/httpsession-gemfire-clientserver-xml/src/main/webapp/WEB-INF/web.xml @@ -9,9 +9,7 @@ contextConfigLocation - - /WEB-INF/spring/session-client.xml - + /WEB-INF/spring/session-client.xml @@ -23,9 +21,9 @@ springSessionRepositoryFilter /* - REQUEST - ERROR - ASYNC + REQUEST + ERROR + ASYNC @@ -36,9 +34,7 @@ --> - - org.springframework.web.context.ContextLoaderListener - + org.springframework.web.context.ContextLoaderListener diff --git a/samples/httpsession-gemfire-clientserver/src/main/java/sample/ClientConfig.java b/samples/httpsession-gemfire-clientserver/src/main/java/sample/ClientConfig.java index 4030f458..6d32ba54 100644 --- a/samples/httpsession-gemfire-clientserver/src/main/java/sample/ClientConfig.java +++ b/samples/httpsession-gemfire-clientserver/src/main/java/sample/ClientConfig.java @@ -36,7 +36,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.data.gemfire.client.ClientCacheFactoryBean; import org.springframework.data.gemfire.client.PoolFactoryBean; -import org.springframework.data.gemfire.config.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.support.GemFireUtils; @@ -52,17 +51,20 @@ public class ClientConfig { static final CountDownLatch latch = new CountDownLatch(1); static { - System.setProperty("gemfire.log-level", - System.getProperty("sample.httpsession.gemfire.log-level", "warning")); + System.setProperty("gemfire.log-level", logLevel()); - ClientMembership - .registerClientMembershipListener(new ClientMembershipListenerAdapter() { - public void memberJoined(ClientMembershipEvent event) { - if (!event.isClient()) { - latch.countDown(); - } + ClientMembership.registerClientMembershipListener( + new ClientMembershipListenerAdapter() { + public void memberJoined(ClientMembershipEvent event) { + if (!event.isClient()) { + latch.countDown(); } - }); + } + }); + } + + private static String logLevel() { + return System.getProperty("sample.httpsession.gemfire.log-level", "warning"); } @Bean @@ -75,14 +77,22 @@ public class ClientConfig { return new Properties(); } - @Bean(name = GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME) + @Bean + ClientCacheFactoryBean gemfireCache() { // <4> + ClientCacheFactoryBean clientCacheFactory = new ClientCacheFactoryBean(); + + clientCacheFactory.setClose(true); + clientCacheFactory.setProperties(gemfireProperties()); + + return clientCacheFactory; + } + + @Bean PoolFactoryBean gemfirePool(// <3> - @Value("${spring.session.data.gemfire.port:" + ServerConfig.SERVER_PORT - + "}") int port) { + @Value("${spring.session.data.gemfire.port:" + ServerConfig.SERVER_PORT + "}") int port) { PoolFactoryBean poolFactory = new PoolFactoryBean(); - poolFactory.setName(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME); poolFactory.setFreeConnectionTimeout(5000); // 5 seconds poolFactory.setKeepAlive(false); poolFactory.setMaxConnections(ServerConfig.MAX_CONNECTIONS); @@ -92,46 +102,29 @@ public class ClientConfig { poolFactory.setSubscriptionEnabled(true); poolFactory.setThreadLocalConnections(false); - poolFactory.setServerEndpoints(Collections.singletonList( - new ConnectionEndpoint(ServerConfig.SERVER_HOSTNAME, port))); + poolFactory.setServers(Collections.singletonList( + new ConnectionEndpoint(ServerConfig.SERVER_HOSTNAME, port))); return poolFactory; } - @Bean - ClientCacheFactoryBean gemfireCache(Pool gemfirePool) { // <4> - ClientCacheFactoryBean clientCacheFactory = new ClientCacheFactoryBean(); - - clientCacheFactory.setClose(true); - clientCacheFactory.setProperties(gemfireProperties()); - clientCacheFactory.setPool(gemfirePool); - clientCacheFactory.setUseBeanFactoryLocator(false); - - return clientCacheFactory; - } - @Bean BeanPostProcessor gemfireCacheServerReadyBeanPostProcessor(// <5> - @Value("${spring.session.data.gemfire.port:" + ServerConfig.SERVER_PORT - + "}") final int port) { + @Value("${spring.session.data.gemfire.port:" + ServerConfig.SERVER_PORT + "}") final int port) { return new BeanPostProcessor() { - public Object postProcessBeforeInitialization(Object bean, String beanName) - throws BeansException { + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof PoolFactoryBean || bean instanceof Pool) { - Assert.isTrue( - waitForCacheServerToStart(ServerConfig.SERVER_HOSTNAME, port), - String.format( - "GemFire Server failed to start [hostname: %1$s, port: %2$d]", - ServerConfig.SERVER_HOSTNAME, port)); + Assert.isTrue(waitForCacheServerToStart(ServerConfig.SERVER_HOSTNAME, port), + String.format("GemFire Server failed to start [hostname: %1$s, port: %2$d]", + ServerConfig.SERVER_HOSTNAME, port)); } return bean; } - public Object postProcessAfterInitialization(Object bean, String beanName) - throws BeansException { + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof PoolFactoryBean || bean instanceof Pool) { try { latch.await(DEFAULT_WAIT_DURATION, TimeUnit.MILLISECONDS); @@ -206,4 +199,5 @@ public class ClientConfig { return condition.evaluate(); } + } diff --git a/samples/httpsession-gemfire-clientserver/src/main/java/sample/ServerConfig.java b/samples/httpsession-gemfire-clientserver/src/main/java/sample/ServerConfig.java index 14c571c8..d53b316e 100644 --- a/samples/httpsession-gemfire-clientserver/src/main/java/sample/ServerConfig.java +++ b/samples/httpsession-gemfire-clientserver/src/main/java/sample/ServerConfig.java @@ -49,20 +49,23 @@ public class ServerConfig { gemfireProperties.setProperty("name", "GemFireClientServerHttpSessionSample"); gemfireProperties.setProperty("mcast-port", "0"); - gemfireProperties.setProperty("log-level", - System.getProperty("sample.httpsession.gemfire.log-level", "warning")); + gemfireProperties.setProperty("log-level", logLevel()); gemfireProperties.setProperty("jmx-manager", "true"); gemfireProperties.setProperty("jmx-manager-start", "true"); return gemfireProperties; } + private String logLevel() { + return System.getProperty("sample.httpsession.gemfire.log-level", "warning"); + } + @Bean CacheFactoryBean gemfireCache() { // <3> CacheFactoryBean gemfireCache = new CacheFactoryBean(); + gemfireCache.setClose(true); gemfireCache.setProperties(gemfireProperties()); - gemfireCache.setUseBeanFactoryLocator(false); return gemfireCache; } @@ -76,6 +79,7 @@ public class ServerConfig { cacheServerFactory.setAutoStartup(true); cacheServerFactory.setBindAddress(SERVER_HOSTNAME); cacheServerFactory.setCache(gemfireCache); + cacheServerFactory.setHostNameForClients(SERVER_HOSTNAME); cacheServerFactory.setMaxConnections(MAX_CONNECTIONS); cacheServerFactory.setPort(port); @@ -86,5 +90,6 @@ public class ServerConfig { public static void main(final String[] args) throws IOException { // <5> new AnnotationConfigApplicationContext(ServerConfig.class).registerShutdownHook(); } + } // end::class[] diff --git a/samples/httpsession-gemfire-p2p/src/main/java/sample/Config.java b/samples/httpsession-gemfire-p2p/src/main/java/sample/Config.java index 0ad1c8fb..7be47047 100644 --- a/samples/httpsession-gemfire-p2p/src/main/java/sample/Config.java +++ b/samples/httpsession-gemfire-p2p/src/main/java/sample/Config.java @@ -44,8 +44,8 @@ public class Config { CacheFactoryBean gemfireCache() { // <3> CacheFactoryBean gemfireCache = new CacheFactoryBean(); + gemfireCache.setClose(true); gemfireCache.setProperties(gemfireProperties()); - gemfireCache.setUseBeanFactoryLocator(false); return gemfireCache; } diff --git a/spring-session-data-redis/build.gradle b/spring-session-data-redis/build.gradle index ccaf035d..c24b2936 100644 --- a/spring-session-data-redis/build.gradle +++ b/spring-session-data-redis/build.gradle @@ -6,9 +6,12 @@ apply plugin: 'spring-io' description = "Aggregator for Spring Session and Spring Data Redis" dependencies { - compile project(':spring-session'), - "org.springframework.data:spring-data-redis:$springDataRedisVersion", - "redis.clients:jedis:$jedisVersion", + compile project(':spring-session') + compile ("org.springframework.data:spring-data-redis:$springDataRedisVersion") { + exclude group: "org.slf4j", module: 'slf4j-api' + exclude group: "org.slf4j", module: 'jcl-over-slf4j' + } + compile "redis.clients:jedis:$jedisVersion", "org.apache.commons:commons-pool2:$commonsPoolVersion" } @@ -18,4 +21,4 @@ dependencyManagement { mavenBom "io.spring.platform:platform-bom:${springIoVersion}" } } -} \ No newline at end of file +} diff --git a/spring-session/build.gradle b/spring-session/build.gradle index 68939653..f4487929 100644 --- a/spring-session/build.gradle +++ b/spring-session/build.gradle @@ -25,7 +25,7 @@ dependencies { "org.springframework:spring-messaging:$springVersion", "org.springframework:spring-websocket:$springVersion" provided "javax.servlet:javax.servlet-api:$servletApiVersion" - integrationTestCompile "redis.clients:jedis:2.4.1", + integrationTestCompile "redis.clients:jedis:$jedisVersion", "org.apache.commons:commons-pool2:2.2", "com.hazelcast:hazelcast-client:$hazelcastVersion", "com.h2database:h2:$h2Version", diff --git a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java index 83324307..4a015ae4 100644 --- a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java +++ b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/AbstractGemFireIntegrationTests.java @@ -65,24 +65,25 @@ import static org.assertj.core.api.Assertions.assertThat; 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 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 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_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", "warning"); + protected static final String GEMFIRE_LOG_LEVEL = + System.getProperty("spring.session.data.gemfire.log-level", "warning"); @Autowired protected Cache gemfireCache; @@ -93,7 +94,7 @@ public abstract class AbstractGemFireIntegrationTests { @Before public void setup() { System.setProperty("gemfire.Query.VERBOSE", - String.valueOf(isQueryDebuggingEnabled())); + String.valueOf(isQueryDebuggingEnabled())); } /* (non-Javadoc) */ diff --git a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java index 97e63445..ca092a8e 100644 --- a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java +++ b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/ClientServerGemFireOperationsSessionRepositoryIntegrationTests.java @@ -32,7 +32,6 @@ import com.gemstone.gemfire.cache.DataPolicy; import com.gemstone.gemfire.cache.Region; import com.gemstone.gemfire.cache.RegionAttributes; import com.gemstone.gemfire.cache.client.ClientCache; -import com.gemstone.gemfire.cache.client.Pool; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -49,7 +48,6 @@ 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.config.GemfireConstants; import org.springframework.data.gemfire.server.CacheServerFactoryBean; import org.springframework.data.gemfire.support.ConnectionEndpoint; import org.springframework.session.ExpiringSession; @@ -78,10 +76,8 @@ import static org.assertj.core.api.Assertions.assertThat; * @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.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 @@ -159,17 +155,17 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests public void setup() { assertThat(GemFireUtils.isClient(gemfireCache)).isTrue(); - Region springSessionGemFireRegion = gemfireCache - .getRegion(SPRING_SESSION_GEMFIRE_REGION_NAME); + Region springSessionGemFireRegion = + gemfireCache.getRegion(SPRING_SESSION_GEMFIRE_REGION_NAME); assertThat(springSessionGemFireRegion).isNotNull(); - RegionAttributes springSessionGemFireRegionAttributes = springSessionGemFireRegion - .getAttributes(); + RegionAttributes springSessionGemFireRegionAttributes = + springSessionGemFireRegion.getAttributes(); assertThat(springSessionGemFireRegionAttributes).isNotNull(); assertThat(springSessionGemFireRegionAttributes.getDataPolicy()) - .isEqualTo(DataPolicy.EMPTY); + .isEqualTo(DataPolicy.EMPTY); } @After @@ -270,54 +266,40 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests @Bean Properties gemfireProperties() { Properties gemfireProperties = new Properties(); - gemfireProperties.setProperty("name", - ClientServerGemFireOperationsSessionRepositoryIntegrationTests.class - .getName()); gemfireProperties.setProperty("log-level", GEMFIRE_LOG_LEVEL); return gemfireProperties; } - @Bean(name = GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME) + @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() { - @Override - protected Properties resolveGemfireProperties() { - return gemfireProperties(); - } - }; + PoolFactoryBean poolFactory = new PoolFactoryBean(); - poolFactory.setName(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME); poolFactory.setFreeConnectionTimeout(5000); // 5 seconds poolFactory.setKeepAlive(false); - poolFactory.setMaxConnections( - SpringSessionGemFireServerConfiguration.MAX_CONNECTIONS); + poolFactory.setMaxConnections(SpringSessionGemFireServerConfiguration.MAX_CONNECTIONS); poolFactory.setPingInterval(TimeUnit.SECONDS.toMillis(5)); poolFactory.setReadTimeout(2000); // 2 seconds poolFactory.setRetryAttempts(2); poolFactory.setSubscriptionEnabled(true); poolFactory.setThreadLocalConnections(false); - poolFactory - .setServerEndpoints(Collections.singletonList(new ConnectionEndpoint( - SpringSessionGemFireServerConfiguration.SERVER_HOSTNAME, - port))); + poolFactory.setServers(Collections.singletonList(new ConnectionEndpoint( + SpringSessionGemFireServerConfiguration.SERVER_HOSTNAME, port))); return poolFactory; } - @Bean - ClientCacheFactoryBean gemfireCache(Pool gemfirePool) { - ClientCacheFactoryBean clientCacheFactory = new ClientCacheFactoryBean(); - - clientCacheFactory.setClose(true); - clientCacheFactory.setPool(gemfirePool); - clientCacheFactory.setProperties(gemfireProperties()); - clientCacheFactory.setUseBeanFactoryLocator(false); - - return clientCacheFactory; - } - @Bean public SessionEventListener sessionEventListener() { return new SessionEventListener(); @@ -335,7 +317,7 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests for (InetSocketAddress server : clientCache.getCurrentServers()) { System.err.printf("GemFire Server [host: %1$s, port: %2$d]%n", - server.getHostName(), server.getPort()); + server.getHostName(), server.getPort()); } } } @@ -366,12 +348,12 @@ public class ClientServerGemFireOperationsSessionRepositoryIntegrationTests @Bean CacheFactoryBean gemfireCache() { - CacheFactoryBean cacheFactory = new CacheFactoryBean(); + CacheFactoryBean gemfireCache = new CacheFactoryBean(); - cacheFactory.setProperties(gemfireProperties()); - cacheFactory.setUseBeanFactoryLocator(false); + gemfireCache.setClose(true); + gemfireCache.setProperties(gemfireProperties()); - return cacheFactory; + return gemfireCache; } @Bean diff --git a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java index 60760cf0..47ae611e 100644 --- a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java +++ b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepositoryIntegrationTests.java @@ -391,9 +391,7 @@ public class GemFireOperationsSessionRepositoryIntegrationTests CacheFactoryBean gemfireCache = new CacheFactoryBean(); gemfireCache.setClose(true); - gemfireCache.setLazyInitialize(false); gemfireCache.setProperties(gemfireProperties()); - gemfireCache.setUseBeanFactoryLocator(false); return gemfireCache; } diff --git a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java index 29045f49..624b0302 100644 --- a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java +++ b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/EnableGemFireHttpSessionEventsIntegrationTests.java @@ -253,9 +253,8 @@ public class EnableGemFireHttpSessionEventsIntegrationTests CacheFactoryBean gemfireCache() { CacheFactoryBean gemfireCache = new CacheFactoryBean(); - gemfireCache.setLazyInitialize(false); + gemfireCache.setClose(true); gemfireCache.setProperties(gemfireProperties()); - gemfireCache.setUseBeanFactoryLocator(false); return gemfireCache; } diff --git a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java index 7aa603e6..58c76611 100644 --- a/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java +++ b/spring-session/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionJavaConfigurationTests.java @@ -135,7 +135,6 @@ public class GemFireHttpSessionJavaConfigurationTests cacheFactory.setClose(true); cacheFactory.setProperties(gemfireProperties()); - cacheFactory.setUseBeanFactoryLocator(false); return cacheFactory; } diff --git a/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java b/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java index 72552efd..a9fd0b79 100644 --- a/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java +++ b/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/GemFireHttpSessionConfiguration.java @@ -65,8 +65,8 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat * 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); + 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; @@ -152,7 +152,7 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat */ protected ClientRegionShortcut getClientRegionShortcut() { return (this.clientRegionShortcut != null ? this.clientRegionShortcut - : DEFAULT_CLIENT_REGION_SHORTCUT); + : DEFAULT_CLIENT_REGION_SHORTCUT); } /** @@ -175,7 +175,7 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat */ protected String[] getIndexableSessionAttributes() { return (this.indexableSessionAttributes != null ? this.indexableSessionAttributes - : DEFAULT_INDEXABLE_SESSION_ATTRIBUTES); + : DEFAULT_INDEXABLE_SESSION_ATTRIBUTES); } /** @@ -245,7 +245,7 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat */ protected RegionShortcut getServerRegionShortcut() { return (this.serverRegionShortcut != null ? this.serverRegionShortcut - : DEFAULT_SERVER_REGION_SHORTCUT); + : DEFAULT_SERVER_REGION_SHORTCUT); } /** @@ -269,8 +269,8 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat */ protected String getSpringSessionGemFireRegionName() { return (StringUtils.hasText(this.springSessionGemFireRegionName) - ? this.springSessionGemFireRegionName - : DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); + ? this.springSessionGemFireRegionName + : DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME); } /** @@ -281,26 +281,24 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat * this @Configuration class. */ public void setImportMetadata(AnnotationMetadata importMetadata) { - AnnotationAttributes enableGemFireHttpSessionAnnotationAttributes = AnnotationAttributes - .fromMap(importMetadata.getAnnotationAttributes( - EnableGemFireHttpSession.class.getName())); + AnnotationAttributes enableGemFireHttpSessionAnnotationAttributes = + AnnotationAttributes.fromMap(importMetadata.getAnnotationAttributes( + EnableGemFireHttpSession.class.getName())); - setClientRegionShortcut(ClientRegionShortcut.class - .cast(enableGemFireHttpSessionAnnotationAttributes - .getEnum("clientRegionShortcut"))); + setClientRegionShortcut(ClientRegionShortcut.class.cast( + enableGemFireHttpSessionAnnotationAttributes.getEnum("clientRegionShortcut"))); setIndexableSessionAttributes(enableGemFireHttpSessionAnnotationAttributes - .getStringArray("indexableSessionAttributes")); + .getStringArray("indexableSessionAttributes")); setMaxInactiveIntervalInSeconds(enableGemFireHttpSessionAnnotationAttributes - .getNumber("maxInactiveIntervalInSeconds").intValue()); + .getNumber("maxInactiveIntervalInSeconds").intValue()); - setServerRegionShortcut( - RegionShortcut.class.cast(enableGemFireHttpSessionAnnotationAttributes - .getEnum("serverRegionShortcut"))); + setServerRegionShortcut(RegionShortcut.class.cast( + enableGemFireHttpSessionAnnotationAttributes.getEnum("serverRegionShortcut"))); setSpringSessionGemFireRegionName( - enableGemFireHttpSessionAnnotationAttributes.getString("regionName")); + enableGemFireHttpSessionAnnotationAttributes.getString("regionName")); } /** @@ -316,11 +314,11 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat public GemFireOperationsSessionRepository sessionRepository( @Qualifier("sessionRegionTemplate") GemfireOperations gemfireOperations) { - GemFireOperationsSessionRepository sessionRepository = new GemFireOperationsSessionRepository( - gemfireOperations); + GemFireOperationsSessionRepository sessionRepository = + new GemFireOperationsSessionRepository(gemfireOperations); - sessionRepository - .setMaxInactiveIntervalInSeconds(getMaxInactiveIntervalInSeconds()); + sessionRepository.setMaxInactiveIntervalInSeconds( + getMaxInactiveIntervalInSeconds()); return sessionRepository; } @@ -339,8 +337,8 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat @Bean @DependsOn(DEFAULT_SPRING_SESSION_GEMFIRE_REGION_NAME) public GemfireTemplate sessionRegionTemplate(GemFireCache gemFireCache) { - return new GemfireTemplate( - gemFireCache.getRegion(getSpringSessionGemFireRegionName())); + return new GemfireTemplate(gemFireCache.getRegion( + getSpringSessionGemFireRegionName())); } /** @@ -363,7 +361,8 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat GemFireCache gemfireCache, RegionAttributes sessionRegionAttributes) { - GemFireCacheTypeAwareRegionFactoryBean serverRegion = new GemFireCacheTypeAwareRegionFactoryBean(); + GemFireCacheTypeAwareRegionFactoryBean serverRegion = + new GemFireCacheTypeAwareRegionFactoryBean(); serverRegion.setGemfireCache(gemfireCache); serverRegion.setClientRegionShortcut(getClientRegionShortcut()); @@ -390,19 +389,18 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat */ @Bean @SuppressWarnings({ "unchecked", "deprecation" }) - public RegionAttributesFactoryBean sessionRegionAttributes( - GemFireCache gemfireCache) { + 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); + regionAttributes.setValueConstraint(SPRING_SESSION_GEMFIRE_REGION_VALUE_CONSTRAINT); if (isExpirationAllowed(gemfireCache)) { regionAttributes.setStatisticsEnabled(true); regionAttributes.setEntryIdleTimeout(new ExpirationAttributes( - Math.max(getMaxInactiveIntervalInSeconds(), 0), - ExpirationAction.INVALIDATE)); + Math.max(getMaxInactiveIntervalInSeconds(), 0), + ExpirationAction.INVALIDATE)); } return regionAttributes; @@ -421,8 +419,8 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat */ boolean isExpirationAllowed(GemFireCache gemfireCache) { return !(GemFireUtils.isClient(gemfireCache) - ? GemFireUtils.isProxy(getClientRegionShortcut()) - : GemFireUtils.isProxy(getServerRegionShortcut())); + ? GemFireUtils.isProxy(getClientRegionShortcut()) + : GemFireUtils.isProxy(getServerRegionShortcut())); } /** @@ -486,9 +484,9 @@ public class GemFireHttpSessionConfiguration extends SpringHttpSessionConfigurat index.setCache(gemfireCache); index.setName("sessionAttributesIndex"); index.setExpression(String.format("s.attributes[%1$s]", - getIndexableSessionAttributesAsGemFireIndexExpression())); + getIndexableSessionAttributesAsGemFireIndexExpression())); index.setFrom(String.format("%1$s s", - GemFireUtils.toRegionPath(getSpringSessionGemFireRegionName()))); + GemFireUtils.toRegionPath(getSpringSessionGemFireRegionName()))); index.setOverride(true); return index; diff --git a/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java b/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java index 211340c7..61879e43 100644 --- a/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java +++ b/spring-session/src/main/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBean.java @@ -23,6 +23,8 @@ import com.gemstone.gemfire.cache.RegionAttributes; import com.gemstone.gemfire.cache.RegionShortcut; import com.gemstone.gemfire.cache.client.ClientRegionShortcut; +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; @@ -43,9 +45,12 @@ import org.springframework.util.StringUtils; * @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 FactoryBean>, InitializingBean { + implements BeanFactoryAware, FactoryBean>, InitializingBean { protected static final ClientRegionShortcut DEFAULT_CLIENT_REGION_SHORTCUT = GemFireHttpSessionConfiguration.DEFAULT_CLIENT_REGION_SHORTCUT; @@ -53,6 +58,8 @@ public class GemFireCacheTypeAwareRegionFactoryBean 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; @@ -138,6 +145,7 @@ public class GemFireCacheTypeAwareRegionFactoryBean ClientRegionShortcut shortcut = getClientRegionShortcut(); + clientRegion.setBeanFactory(getBeanFactory()); clientRegion.setCache(gemfireCache); clientRegion.setAttributes(getRegionAttributes()); clientRegion.setInterests(registerInterests(!GemFireUtils.isLocal(shortcut))); @@ -206,6 +214,36 @@ public class GemFireCacheTypeAwareRegionFactoryBean return true; } + /** + * Sets a reference to the Spring {@link BeanFactory} responsible for + * creating GemFire components. + * + * @param beanFactory reference to the Spring {@link BeanFactory} + * @see org.springframework.beans.factory.BeanFactory + * @throws IllegalArgumentException if the {@link BeanFactory} reference + * is null. + */ + @Override + 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. @@ -240,7 +278,7 @@ public class GemFireCacheTypeAwareRegionFactoryBean * @throws IllegalArgumentException if the {@link GemFireCache} reference is null. */ public void setGemfireCache(GemFireCache gemfireCache) { - Assert.notNull(gemfireCache, "The GemFireCache reference must not be null"); + Assert.notNull(gemfireCache, "GemFireCache must not be null"); this.gemfireCache = gemfireCache; } @@ -253,7 +291,7 @@ public class GemFireCacheTypeAwareRegionFactoryBean */ protected GemFireCache getGemfireCache() { Assert.state(this.gemfireCache != null, - "A reference to a GemFireCache was not properly configured"); + "A reference to the GemFireCache was not properly configured"); return this.gemfireCache; } diff --git a/spring-session/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java b/spring-session/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java index 952a3877..67796f27 100644 --- a/spring-session/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java +++ b/spring-session/src/test/java/org/springframework/session/data/gemfire/config/annotation/web/http/support/GemFireCacheTypeAwareRegionFactoryBeanTest.java @@ -32,6 +32,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.beans.factory.BeanFactory; import org.springframework.data.gemfire.client.Interest; import org.springframework.session.ExpiringSession; @@ -47,6 +48,7 @@ import static org.mockito.Mockito.mock; * @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 @@ -63,14 +65,16 @@ import static org.mockito.Mockito.mock; public class GemFireCacheTypeAwareRegionFactoryBeanTest { @Rule - public ExpectedException expectedException = ExpectedException.none(); + public ExpectedException exception = ExpectedException.none(); + + @Mock + ClientCache mockClientCache; @Mock Region mockClientRegion; + @Mock Region mockServerRegion; - @Mock - ClientCache mockClientCache; private GemFireCacheTypeAwareRegionFactoryBean regionFactoryBean; @@ -164,13 +168,37 @@ public class GemFireCacheTypeAwareRegionFactoryBeanTest { 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); + this.regionFactoryBean.setClientRegionShortcut( + ClientRegionShortcut.LOCAL_PERSISTENT); assertThat(this.regionFactoryBean.getClientRegionShortcut()) .isEqualTo(ClientRegionShortcut.LOCAL_PERSISTENT); @@ -192,17 +220,16 @@ public class GemFireCacheTypeAwareRegionFactoryBeanTest { @Test public void setGemfireCacheToNullThrowsIllegalArgumentException() { - this.expectedException.expect(IllegalArgumentException.class); - this.expectedException - .expectMessage("The GemFireCache reference must not be null"); + this.exception.expect(IllegalArgumentException.class); + this.exception.expectMessage("GemFireCache must not be null"); this.regionFactoryBean.setGemfireCache(null); } @Test public void getGemfireCacheWhenNullThrowsIllegalStateException() { - this.expectedException.expect(IllegalStateException.class); - this.expectedException.expectMessage( - "A reference to a GemFireCache was not properly configured"); + this.exception.expect(IllegalStateException.class); + this.exception.expectMessage( + "A reference to the GemFireCache was not properly configured"); this.regionFactoryBean.getGemfireCache(); }