Tomcat 6中的Toplink运行时错误



让我为这个问题提供一些背景知识。随着时间的推移,我被指派处理的应用程序失去了作为完整应用程序构建和部署的能力。我的意思是,以前的开发人员在他的本地IDE中编译了代码,并删除了单个类文件,而不是构建适当的JAR和WAR来部署到tomcat。因此,我的任务是清理该项目,使其再次成为标准的可部署应用程序。因此,总结一下重要的部分,该应用程序以工作格式存在于windows tomcat环境中,该环境已经很久没有进行过干净的部署了,我的目标是通过jenkins CI服务器将该应用程序构建并部署到运行在Linux服务器上的tomcat实例。现在来谈谈这个问题。我在一个应用程序模块中得到以下toplink异常。

Local Exception Stack:
Exception [TOPLINK-6007] (OracleAS TopLink - 10g (9.0.4) (Build 031126)): oracle.toplink.exceptions.QueryException
Exception Description: Missing descriptor for [class edu.cornell.finsys.datamodel.AccountDTO].
Query: ReadObjectQuery(edu.cornell.finsys.datamodel.AccountDTO)

我已经验证了tomcat已经加载了toplink映射文件,并且在该文件中映射了AccountDTO。为了再次检查,我已经移出了映射文件,在加载时我得到了一个完全不同的错误。我知道文件映射是正确的,因为它在旧服务器上工作正常。我不知道是什么原因导致了toplink异常。有关更多信息,我使用的是tomcat版本6.0.37、Java版本1.6.0_45、toplink版本9.0.4.031126

有什么想法吗?

可能就是这样;来自Metalink的右侧:

原因:

这是加载sessions.xml文件的问题,当应用程序第一次使用该应用程序的类加载器部署时加载一次,然后在重新部署应用程序并创建新的XMLContext时不重新加载会话。导致我们尝试使用与当前应用程序不同的类加载器加载的会话。

可能的解决方案:

当TopLink是主类路径的一部分时(例如:Applib目录而不是存储在ear文件中),就会出现问题。当这种情况发生时,静态SessionManager在部署应用程序的第二次及以后的时间里很难找到描述符。基本上,描述符是按类索引的。重新部署应用程序时,将卸载用于索引的类,并显示这些类的新版本。这会导致"未找到描述符"异常。

的潜在解决方案

  1. 将toplink.jar文件放入ear中。

  2. 编写一些代码,以便在toplink应用程序被拆除时手动清理。

  3. 对于某些体系结构,他们可以使用允许刷新会话的sessionManager.getSession()版本。

Workaround 3是最好的,也是非常可行的。会议必须懒散从SessionManager获得并保存在应用程序代码中变量当应用程序重新启动时,它在TopLink上的句柄会话将为null。然后可以从SesssionManager使用getSession(XMLLoader XMLLoader,StringsessionName,ClassLoader对象ClassLoader,布尔值shouldLoginSession,boolean shouldRefreshSession)APIshouldRefreshSession设置为true。这将确保会话(如果有)已注销并从SessionManager中删除在创建新的之前。

有任何解决方法帮助吗?

相关内容

  • 没有找到相关文章

最新更新