Spring在JPPF中遇到classloader的问题。
有个JPPF的task是使用spring的。当spring配置文件中使用了 引用xmlns:context="http://www.springframework.org/schema/context"这个namespace时,会报找不到这个namespace的错误。 如下:
引用[client: driver-3 (192.168.1.60:11198)] : Reconnected to the JPPF task server
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: class path resource [donkey-context.xml]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:281)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1250)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1243)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
通过看org.springframework.beans.factory.xml.PluggableSchemaResolver.getSchemaMapping(String systemId)的方法得知, 发生找不到META-INF/spring.schemas这个文件的原因应该是用了不同的classloader。 JPPF使用的是org.jppf.node.JPPFClassLoader,这是一个network classloader通过网络来加载class。 解决这个问题的方法就是把META-INF/spring.schemas和META-INF/spring.hanlders打包成一个jar。 仍到jppf node的lib目录下。 (我尝试过把spring.jar考到lib目录下。可是发现其他的一些依赖包都需要放到lib目录中了。 )