SGF-148 - Added 'close' property on CacheFactoryBean which, if false, will leave cache open when ApplicationContext closes
This commit is contained in:
@@ -201,6 +201,8 @@ public class CacheFactoryBean implements BeanNameAware, BeanFactoryAware, BeanCl
|
||||
protected String beanName;
|
||||
|
||||
protected boolean useBeanFactoryLocator = true;
|
||||
|
||||
protected boolean close = true;
|
||||
|
||||
// PDX options
|
||||
protected Object pdxSerializer;
|
||||
@@ -405,6 +407,9 @@ public class CacheFactoryBean implements BeanNameAware, BeanFactoryAware, BeanCl
|
||||
|
||||
@Override
|
||||
public void destroy() throws Exception {
|
||||
if (!close) {
|
||||
return;
|
||||
}
|
||||
if (cache != null && !cache.isClosed()) {
|
||||
cache.close();
|
||||
}
|
||||
@@ -614,6 +619,14 @@ public class CacheFactoryBean implements BeanNameAware, BeanFactoryAware, BeanCl
|
||||
public void setCriticalHeapPercentage(Float criticalHeapPercentage) {
|
||||
this.criticalHeapPercentage = criticalHeapPercentage;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param close set to false if destroy() should not close the cache
|
||||
*/
|
||||
public void setClose(boolean close) {
|
||||
this.close = close;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
@@ -67,6 +67,7 @@ class CacheParser extends AbstractSimpleBeanDefinitionParser {
|
||||
ParsingUtils.setPropertyValue(element, builder, "search-timeout");
|
||||
ParsingUtils.setPropertyValue(element, builder, "critical-heap-percentage");
|
||||
ParsingUtils.setPropertyValue(element, builder, "eviction-heap-percentage");
|
||||
ParsingUtils.setPropertyValue(element, builder, "close");
|
||||
|
||||
List<Element> txListeners = DomUtils.getChildElementsByTagName(element, "transaction-listener");
|
||||
if (!CollectionUtils.isEmpty(txListeners)) {
|
||||
|
||||
@@ -239,6 +239,15 @@ JavaDocs for com.gemstone.gemfire.cache.control.ResourceManager for more informa
|
||||
]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="close" default="true">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation><![CDATA[
|
||||
Determines if the cache should be closed when the application context is closed. This value is
|
||||
true by default but should be set to false if deploying multiple applications in a jvm that share the
|
||||
same cache instance.
|
||||
]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
</xsd:complexType>
|
||||
<!-- -->
|
||||
<xsd:element name="cache">
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2002-2013 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.data.gemfire.config;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
||||
import com.gemstone.gemfire.cache.Cache;
|
||||
|
||||
/**
|
||||
* @author David Turanski
|
||||
*
|
||||
*/
|
||||
|
||||
public class MultipleCacheTest {
|
||||
@Test
|
||||
public void testMultipleCaches() {
|
||||
String resourcePath = "/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml";
|
||||
|
||||
ConfigurableApplicationContext ctx1 = new ClassPathXmlApplicationContext(resourcePath);
|
||||
ConfigurableApplicationContext ctx2 = new ClassPathXmlApplicationContext(resourcePath);
|
||||
Cache cache1 = ctx1.getBean(Cache.class);
|
||||
Cache cache2 = ctx2.getBean(Cache.class);
|
||||
assertSame(cache1,cache2);
|
||||
ctx1.close();
|
||||
ctx2.close();
|
||||
assertFalse(cache1.isClosed());
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ package org.springframework.data.gemfire.fork;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.data.gemfire.ForkUtil;
|
||||
|
||||
@@ -24,19 +25,22 @@ import org.springframework.data.gemfire.ForkUtil;
|
||||
*/
|
||||
public class SpringCacheServerProcess {
|
||||
public static void main(String[] args) {
|
||||
ConfigurableApplicationContext ctx = null;
|
||||
try {
|
||||
new ClassPathXmlApplicationContext(args[0]);
|
||||
ctx = new ClassPathXmlApplicationContext(args[0]);
|
||||
ForkUtil.createControlFile(SpringCacheServerProcess.class.getName());
|
||||
|
||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
|
||||
System.out.println("Waiting for shutdown");
|
||||
bufferedReader.readLine();
|
||||
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
} finally {
|
||||
if (ctx != null) {
|
||||
ctx.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
default-lazy-init="true"
|
||||
xmlns:gfe="http://www.springframework.org/schema/gemfire"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire-1.3.xsd
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
|
||||
|
||||
<gfe:cache use-bean-factory-locator="false" close="false"/>
|
||||
</beans>
|
||||
Reference in New Issue
Block a user