在TopLink中获取客户端会话时出错

问题描述:

我正面临一个特殊问题。以下是我得到的错误的堆栈跟踪。请帮助。在TopLink中获取客户端会话时出错

Exception [TOPLINK-7001] (Oracle TopLink - 11g Release 1 (11.1.1.1.0) (Build 090527)): oracle.toplink.exceptions.ValidationException 
Exception Description: You must login to the ServerSession before acquiring ClientSessions. 
at oracle.toplink.exceptions.ValidationException.loginBeforeAllocatingClientSessions(ValidationException.java:1155) 
at oracle.toplink.threetier.ServerSession.acquireClientSession(ServerSession.java:313) 
at oracle.toplink.threetier.ServerSession.acquireClientSession(ServerSession.java:303) 
at com.ofss.elcm.domain.Session.fetchClientSession(Session.java:113) 
at com.ofss.elcm.domain.Session.acquireUnitOfWork(Session.java:132) 
+0

部署期间是否存在其他错误?你有没有调用ServerSession.login()?你是否使用SessionManager创建ServerSession? – 2010-07-30 18:54:49

+0

@戈登嗨..只有当我尝试通过不同的类加载器使用相同的类时,才会出现此错误..在应用程序中,我同时使用了servlet和EJB ..因此,如果使用其中的一种,代码工作绝对正常..无论是servlet或EJB ..但是当我尝试同时使用,如果得到这个错误..我觉得这可能是类加载器的问题..作为servlet有它自己的类加载器和EJB有它自己.. – 2010-08-02 09:28:45

+0

添加到上面的评论..我使用会话管理器来创建服务器会话.. – 2010-08-02 09:29:15

在应用程序重新部署的情况下,EclipseLink可以检查类加载器的更改。从Web容器和EJB容器调用特定会话的SessionManager时,这可能会导致问题。

确保您使用API​​ getSession(null,sessionName,classLoader,true,false)或具有较长签名的相同方法禁用此类加载器检查。如果您希望直接构造XMLSessionConfigLoader,则可以通过xmlSessionConfigLoader.setShouldCheckClassLoader(false)直接禁用类加载器检查。

您是否尝试过使用单例对象的sessionmanager?这样,你应该总是得到相同的管理器实例,并且不应该有类加载器问题。