在我们这边非常正常的一个VM环境,但在中东一个Sales的机器上load vm就是不正常,VM中系统的环境如下:
Spring 3.0
Spring DM(OSGi) 2.0.M1
Hibernate Validator
其它XX
系统启动时出现:
Caused by: java.lang.ClassNotFoundException: javax.validation.spi.ValidationProvider
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
... 59 more
百思不得其解,同样的VM在我们这边load起来没有任何问题,但在sales那边load就有问题。问题出现了就解决吧!这类问题也只能在出现问题的机器上解决,因为我们这无法重现。
VM环境中tomcat是通过windows service启动的,会不会是运行tomcat的jdk有问题呢(tomcat service应该默认会取系统注册表中注册的jre)。
用命令行方式启动一下tomcat试试,点击start.bat,命令窗口一闪而过。这应该是没有设置JAVA_HOME,在catalina.bat中设置JAVA_HOME到JDK(非JRE)路径,再点start.bat,系统启动一切正常,ClassNotFoundException: javax.validation.spi.ValidationProvider,也没有了。
这个错误是因为tomcat service默认用jre启动引起的,但为什么在同样的VM,运行起来会有差异呢,还是不知道原因!