2013-12-20 45 views
0

让我给出一点背景,给出这个问题的上下文。随着时间的推移,我分配的应用程序失去了作为完整应用程序构建和部署的能力。我的意思是以前的开发人员在他的本地IDE中编译代码,并删除单个类文件,而不是构建适当的JAR和WAR以部署到tomcat。所以我一直负责清理这个项目,以便它再次成为一个标准的可部署应用程序。因此,总结一下重要的部分,应用程序在Windows Tomcat环境中以工作格式存在,并且长时间没有进行干净部署,我的目标是通过jenkins CI服务器将应用程序构建和部署到运行在Linux服务器上的一个tomcat实例。现在解决这个问题。我在一个应用程序模块中获得以下toplink异常。Tomcat中的Toplink运行时错误6

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) 

我已验证toplink映射文件已被tomcat加载,并且AccountDTO映射到文件中。为了仔细检查,我已经将映射文件移出了,并且在加载时我得到了完全不同的错误。我知道文件映射是正确的,因为它在旧服务器上正常工作。我不知道还有什么可能导致toplink异常。 欲了解更多信息,我在tomcat版本6.0.37,Java版本1.6.0_45,toplink版本9.0.4.031126

任何想法?

+0

您是否还在持久层中使用AccountDTO作为JPA注释实体? –

+0

不,没有JPA在这个应用程序,AccountDTO是一个基本的POJO – Jay

+0

我不明白。如果不是实体管理器接口实现,TopLink的目的是什么?对不起,如果问题是愚蠢的... –

回答

1

这可能是它;权从Metalink:

原因:

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

可能的解决办法:(:Applib目录,而不是存储在耳文件,例如)

当TopLink的是主类路径的一部分,就会出现问题。发生这种情况时,静态会话管理器在第二次和随后部署应用程序时遇到困难。基本上描述符是按类别索引的。重新部署应用程序时,用于索引的类将被卸载,并出现这些类的新版本。这会导致“未找到描述符”异常。

可能的解决办法

  1. 把toplink.jar文件中的耳朵。

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

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

解决方法3是最好的和非常可行的。会话必须从会话管理器获得并且保存在应用程序代码 变量中,可以是 。当应用程序重新启动时,TopLink 会话中的句柄将为空。然后可以从 SesssionManager使用getSession(XMLLoader xmlLoader,String sessionName,ClassLoader objectClassLoader,boolean shouldLoginSession,boolean shouldRefreshSession)API与 shouldRefreshSession设置为true来获取会话。这将确保旧的 会话(如果有的话)在创建新会话之前被注销并从SessionManager 中删除。

是否有任何解决方法可以解决问题?

+0

我没有在我的搜索中看到这个,谢谢,当我从休息中返回时,我会试试这个。 – Jay