+ cache server starts last (on container refresh) to allow regions and interests to be properly registered and started
+ add documentation on cacheserver start-up
This commit is contained in:
Costin Leau
2011-08-23 15:57:07 +03:00
parent 8160cefb87
commit afb398a1a8
6 changed files with 60 additions and 5 deletions

View File

@@ -221,6 +221,10 @@
<ulink url="http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-placeholderconfigurer">support</ulink>,
<ulink url="http://static.springsource.org/spring/docs/3.0.x/reference/expressions.html">SpEL</ulink> and the <ulink url="http://blog.springsource.com/2011/06/09/spring-framework-3-1-m2-released/">environment abstraction</ulink> one
can externalize environment specific properties from the main code base easing the deployment across multiple machines.</para>
<note><para>To avoid initialization problems, the <interfacename>CacheServer</interfacename>s started by SGF will start <emphasis>after</emphasis> the container has been fully initialized. This
allows potential regions, listener, writers or instantiators defined declaratively to be fully initialized and registered before the server starts accepting connections. Keep this in mind
when doing programmatic configuration of the items above as the server might start before your components and thus not be seen by the clients connecting right away.</para></note>
</section>
</section>

View File

@@ -34,7 +34,7 @@ import com.gemstone.gemfire.cache.server.ClientSubscriptionConfig;
import com.gemstone.gemfire.cache.server.ServerLoadProbe;
/**
* FactoryBean for easy creation and configuration of GemFire {@link CacheServerProcess} instances.
* FactoryBean for easy creation and configuration of GemFire {@link CacheServer} instances.
*
* @author Costin Leau
*/
@@ -106,8 +106,6 @@ public class CacheServerFactoryBean implements FactoryBean<CacheServer>, Initial
config.setEvictionPolicy(evictionPolicy.name().toLowerCase());
if (subscriptionDiskStore != null)
config.setDiskStoreName(subscriptionDiskStore.getFile().getCanonicalPath());
start();
}
public void destroy() {

View File

@@ -19,7 +19,7 @@ package org.springframework.data.gemfire.server;
import com.gemstone.gemfire.cache.server.CacheServer;
/**
* Enumeration of the various client subscription policies for {@link CacheServerProcess}.
* Enumeration of the various client subscription policies for {@link CacheServer}.
*
* @author Costin Leau
*/

View File

@@ -0,0 +1,45 @@
/*
* Copyright 2011 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;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import com.gemstone.gemfire.cache.server.CacheServer;
/**
* Simple bean used to check initialization order
*
* @author Costin Leau
*/
public class Init implements InitializingBean, BeanFactoryAware {
private BeanFactory bf;
public void afterPropertiesSet() {
CacheServer cs = bf.getBean(CacheServer.class);
Assert.isTrue(!cs.isRunning(), "CacheServer should not have been started yet... ");
}
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.bf = beanFactory;
}
}

View File

@@ -35,6 +35,11 @@ public class CacheServerNamespaceTest extends RecreatingContextTest {
return "org/springframework/data/gemfire/config/server-ns.xml";
}
@Test
public void testInitOrder() throws Exception {
// the test is actually executed through Init#afterPropertiesSet
}
@Test
public void testBasicCacheServer() throws Exception {
CacheServer cacheServer = ctx.getBean("advanced-config", CacheServer.class);

View File

@@ -5,7 +5,6 @@
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
default-lazy-init="true"
xsi:schemaLocation="http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
@@ -13,6 +12,8 @@
<gfe:cache />
<bean id="bean1" class="org.springframework.data.gemfire.Init"/>
<!-- Advanced example depicting various cache server configuration options -->
<gfe:cache-server id="advanced-config" auto-startup="true"
bind-address="localhost" port="${gfe.port.6}" host-name-for-clients="localhost"
@@ -23,6 +24,8 @@
<gfe:subscription-config eviction-type="ENTRY" capacity="1000" disk-store="file://${java.io.tmpdir}"/>
</gfe:cache-server>
<bean id="bean2" class="org.springframework.data.gemfire.Init"/>
<context:property-placeholder location="classpath:port.properties" />