我正在将我的GemFire集群从8.2.7(使用Spring Data GemFire 1.6.0. RELEASE)迁移到Pivotal GemFire 9.3.0(SDG 2.0.7.RELEASE)。我正在使用spring-context.xml
(在cache.xml
中的初始化器
标记下声明)来初始化区域,同时在每个节点上启动缓存服务器。
当我尝试为Pivotal GemFire 9.3.0重用相同的spring-context. xml
时,我的Spring bean标签未被gfsh
命令标识,并且我得到以下异常:
Caused by: org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 107; cvc-elt.1: Cannot find the declaration of element 'beans'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
spring-context. xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:gfe="http://www.springframework.org/schema/geode"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/geode http://www.springframework.org/schema/gemfire/spring-geode.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:properties id="gemfireProperties">
<prop key="log-level">config</prop>
<prop key="locators">hostA[10334],hostB[10334]</prop>
</util:properties>
<bean id="mappingPdxSerializer" class="org.springframework.data.gemfire.mapping.MappingPdxSerializer"/>
<gfe:cache properties-ref="gemfireProperties" pdx-serializer-ref="mappingPdxSerializer"/>
<gfe:replicated-region id="Product">
</gfe:replicated-region>
<gfe:replicated-region id="ProductCustomer">
</gfe:replicated-region>
</beans>
我更新了XML模式路径从"gemfire
"到"gede
"基于Spring留档为spring-data-gemfire: 2.0.7.RELEASE
。
尝试使用GF 9.1.1和SDGF 2.0.7。(SDGFjar放在库中)
脚本:
#!/bin/sh
export PATH=$PATH:/var/tmp/user/gemfire/9.1.1:/opt/jdk/1.8.0_71l64/bin/:/var/tmp/user/gemfire/9.1.1/bin/
export GEMFIRE=/var/tmp/user/gemfire/9.1.1/
for i in `ls /var/tmp/user/gemfire/9.1.1/lib/*.jar`
do
CLASSPATH=${CLASSPATH}:${i}
done
CLASSPATH=$CLASSPATH:/var/tmp/user/gemfire/9.1.1/config
#echo $CLASSPATH
if [ -e "/var/tmp/user/gemfire/9.1.1/config/spring-context.xml" ]; then
echo "File exists"
else
echo "File does not exist"
fi
gfsh start server --name=server1 --server-port=40405 --classpath=$CLASSPATH --spring-xml-location=/var/tmp/user/gemfire/9.1.1/config/spring-context.xml --locators=hostA[10334],hostB[10334] --mcast-port=0
更新:
FileNotFoundException
抛出:
Caused by: java.io.FileNotFoundException: class path resource [var/tmp/sn17180/gemfire/9.1.1/config/spring-context.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
... 17 more
我已授予所有文件的权限,并且我的脚本中的-e“/”也在打印“文件存在”。
更新:
缓存. xml
<?xml version="1.0" encoding="UTF-8"?>
<cache xmlns="http://geode.apache.org/schema/cache"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd"
version="1.0">
<region name="Parent" refid="REPLICATE">
<region name="Child" refid="REPLICATE"/>
</region>
</cache>
gefire-config. xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:gfe="http://www.springframework.org/schema/gemfire"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:properties id="gemfireProperties">
<prop key="locators">xyz[10334],xyx[10334]</prop>
<prop key="mcast-port">0</prop>
</util:properties>
<bean id="autoSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer"/>
<gfe:cache properties-ref="gemfireProperties" cache-xml-location="cache.xml" pdx-serializer-ref="autoSerializer" pdx-read-serialized="true"/>
</beans>
从9. x发布系列开始,Pivotal GemFire停止在$GEMFIRE_HOME/lib
目录中随Spring Data GemFire一起发布。这有两个主要原因。
1)首先,Pivotal GemFire依赖于SDG是一个难题,SDG完全用于gfsh
2)当与版本相关时,Pivotal GemFire明显落后于Spring生态系统的当前状态。即使是最新版本9.3.0,也附带过时的Spring JAR,例如core Spring Framework4.3.13。RELEASE
,当core Spring Framework4.3.17时。RELEASE
已经可用,5.0.6。RELEASE
,5.1即将推出。
话虽如此,当使用start server
命令--spring-xml-place选项从Gfsh启动时,仍然可以使用Spring配置和引导您的Pivotal GemFire服务器。您只需根据您正在使用的Pivotal GemFire版本(例如(9.3.0))下载适当版本的SDG,并在启动服务器时将SDG放在类路径上。
注意:目前,SDG 2.1.0。M3(SDLovelace)是唯一基于Pivotal GemFire 9.3及更高版本的版本;目前设置为9.5.0。
注意:也不是,我不记得我是否遇到过任何API的重大变化,从Pivotal GemFire 9.3逐步升级SDG Lovelace,然后升级到9.4,最后升级到9.5。如果您在使用spring-data-gemfire: 2.1.0.M3
时遇到问题,您也可以使用spring-data-gemfire:2.1.0.M2
,它当时基于Pivotal GemFire 9.3。
所以按照上面的食谱,你会做以下事情…
gfsh> start server --name=SpringConfiguredServer --classpath=/file/system/path/to/spring-data-gemfire22.1.0.M3.jar --spring-xml-location=/classpath/to/your/spring-context.xml
这应该能行!
此外,您不需要将模式从“gemfire”切换到“geode”。当您使用Spring Data GemFire时,请使用“spring-gemfire”模式。当您使用Spring Data Geode时,请使用“spring-geode”模式。两者都可能有效,但是…
希望这有帮助!
-j