<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:gfe="http://www.springframework.org/schema/gemfire"
	xmlns:gfe-data="http://www.springframework.org/schema/data/gemfire"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd
		http://www.springframework.org/schema/data/gemfire http://www.springframework.org/schema/data/gemfire/spring-data-gemfire-1.8.xsd
		http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire-1.8.xsd">

	<bean id="portGenerator"
		class="com.ex.server.geodeserver.utils.ServerPortGenerator" />

	<bean id="pdxSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer">
		<constructor-arg>
			<array>
				<value>com.ex.server.shared.event.*</value>
			</array>
		</constructor-arg>
	</bean>
		
	
	<util:properties id="geodeProperties">
		<prop key="name">${SERVER_NAME:MyGeodeServer}</prop>
		<prop key="mcast-port">0</prop>
		<prop key="locators">${LOCATORS:localhost[10334]}</prop>
		<prop key="jmx-manager">false</prop>
		<prop key="jmx-manager-start">false</prop>
		<prop key="http-service-bind-address">${HTTP_SERVICE_BIND_ADDRESS:localhost}</prop>
		<prop key="http-service-port">${HTTP_SERVICE_PORT:9301}</prop>
		<prop key="http-service-ssl-require-authentication">false</prop>
		<prop key="start-dev-rest-api">true</prop>
		<prop key="enable-network-partition-detection">false</prop>
		<prop key="groups">${SERVER_GROUP:default}</prop>
		<prop key="log-level">${geode.cache.server.logging.logLevel:info}</prop>
		<prop key="log-file">${ex.logging.logHome}/current/${ex.logging.applicationHome}/${spring.application.name}.log</prop>
		<prop key="log-file-size-limit">${geode.cache.server.logging.logFileSize}</prop>
		<prop key="log-disk-space-limit">${geode.cache.server.logging.logDiskSpaceLimit}</prop>
		<prop key="deploy-working-dir">${ex.geode.cache.client.deployWorkingDir}</prop>
		<prop key="security-manager">com.ex.server.geode.security.MyClusterSecurityManager</prop>
		<prop key="security-post-processor">com.ex.server.geode.security.MyClusterPostProcessor</prop>
		<prop key="security-username">${geode.cache.server.security-username}</prop>
		<prop key="security-password">${geode.cache.server.security-password}</prop>
		<prop key="security-udp-dhalgo"></prop>
	</util:properties>
	
	<gfe:cache id="geodeCache" 
		properties-ref="geodeProperties"
		pdx-serializer-ref="pdxSerializer" 
		critical-heap-percentage="${critical-heap-percentage}"
		eviction-heap-percentage="${eviction-heap-percentage}"
		pdx-persistent="true"
		pdx-disk-store="pdx_metadata_diskstore"
		enable-auto-reconnect="true"
		pdx-read-serialized="true"
		use-cluster-configuration="true"
		/>

	<gfe:cache-server id="myCacheServer" 
						cache-ref="geodeCache"
						auto-startup="true" 
						port="#{portGenerator.generatePort(40404,40410)}"
						notify-by-subscription="true"
						max-connections="${geode.cache.server.max-connections}" 
						max-threads="${geode.cache.server.max-threads}" 
						max-message-count="${geode.cache.server.max-message-count}"
						socket-buffer-size="${geode.cache.server.socket-buffer-size:32768}"
						load-poll-interval="${geode.cache.server.load-poll-interval:5000}">
	</gfe:cache-server>
</beans>