Spring和Apache Tomcat Jar之间是否有任何依赖关系

时间:2014-03-20 10:53:23

标签: java

以下是我的申请中出现错误的时间表

  1. 使用Spring 2.5.3和tomcat 7.0.27 - 没有错误
  2. 使用相同的tomcat(7.0.27)升级到Spring 3.1.1 - 无错误
  3. 将tomcat升级到7.0.42,与Spring 3.1.1一起使用 - VerifyError
  4. 当我停止我的应用程序时,当我升级到tomcat 7.0.42时,我得到1000个verifyerrors(每个destroyBean都有单独的错误)。

    以下是Stack Trace:

    java.lang.VerifyError: (class: org/springframework/orm/jpa/EntityManagerFactoryUtils, method: convertJpaAccessExceptionIfPossible signature: (Ljava/lang/RuntimeException;)Lorg/springframework/dao/DataAccessException;) Wrong return type in function at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessBeforeDestruction(PersistenceAnnotationBeanPostProcessor.java:357) at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:193) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:498) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:474) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:509) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:474) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:442) at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1066) at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1040) at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:988) at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:556) at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:142) at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4980) at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5626) at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1575) at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1564) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

    可能的原因:     修复EntityManagerFactoryUtils的“convertJpaAccessException”以始终返回而不是抛出DataAccessExceptions       这一行在Spring 2.5.6的ChangeLog中

    但我的应用程序适用于Spring 3.1.1和tomcat 7.0.27,但在升级到tomcat 7.0.42时抛出此错误

1 个答案:

答案 0 :(得分:0)

AFAIK,Tomcat不依赖于Spring,而Spring不依赖于Tomcat。不在任何版本中。

我怀疑在“使用相同的tomcat(7.0.27)升级到Spring 3.1.1”之后的应用程序的中间版本中,您要么没有触发要运行的代码。请注意,它发生在关闭Web应用程序时运行的代码中。如果您从未尝试在应用程序的中间版本中进行干净关闭,则不会在该bean上调用postProcessBeanBeforeDestruction方法,并且不会出现问题。

我的猜测是真正的问题是由Spring JAR文件的混合版本引起的。