[SPRING] Google App Engine - org.datanucleus.exceptions.NucleusUserException : 객체 관리자가 닫혔습니다.
SPRINGGoogle App Engine - org.datanucleus.exceptions.NucleusUserException : 객체 관리자가 닫혔습니다.
왜 아래 코드는 org.datanucleus.exceptions.NucleusUserException을 발생시킵니다 : Object Manager가 닫혔습니까? 예외는 query.getResultList ()에서 throw 된 것으로 보입니다.
public final void removeUserTokens(final String username) {
final Query query = entityManager.createQuery(
"SELECT p FROM PersistentLogin p WHERE username = :username");
query.setParameter("username", username);
for (Object token : query.getResultList()) {
entityManager.remove(token);
}
}
예외:
org.datanucleus.exceptions.NucleusUserException: Object Manager has been closed
at org.datanucleus.ObjectManagerImpl.assertIsOpen(ObjectManagerImpl.java:3876)
at org.datanucleus.ObjectManagerImpl.getFetchPlan(ObjectManagerImpl.java:376)
at org.datanucleus.store.query.Query.getFetchPlan(Query.java:497)
at org.datanucleus.store.appengine.query.DatastoreQuery$6.apply(DatastoreQuery.java:611)
at org.datanucleus.store.appengine.query.DatastoreQuery$6.apply(DatastoreQuery.java:610)
at org.datanucleus.store.appengine.query.LazyResult.resolveNext(LazyResult.java:94)
at org.datanucleus.store.appengine.query.LazyResult$LazyAbstractListIterator.computeNext(LazyResult.java:215)
at org.datanucleus.store.appengine.query.AbstractIterator.tryToComputeNext(AbstractIterator.java:132)
at org.datanucleus.store.appengine.query.AbstractIterator.hasNext(AbstractIterator.java:127)
at org.datanucleus.store.appengine.query.LazyResult$AbstractListIterator.hasNext(LazyResult.java:169)
at com.mystuff.service.auth.PersistentTokenRepositoryImpl.removeUserTokens(PersistentTokenRepositoryImpl.java:90)
편집 : 나는 datanucleus에 대한 로그 수준을 증가 시켰고 이것은 내가 보는 것입니다.
FINE: Object Manager "org.datanucleus.ObjectManagerImpl@5d8d3d6c" opened for datastore "org.datanucleus.store.appengine.DatastoreManager@2447e380"
Feb 25, 2010 7:21:38 AM org.datanucleus.ObjectManagerImpl initialiseLevel1Cache
FINE: Level 1 Cache of type "weak" initialised
Feb 25, 2010 7:21:38 AM org.datanucleus.JDOClassLoaderResolver classForName
FINE: Class "java.lang.PersistentLogin" was not found in the CLASSPATH [Class resolver called from org.datanucleus.util.Imports.resolveClassDeclaration (line=177)]
Feb 25, 2010 7:21:38 AM org.datanucleus.ObjectManagerImpl disconnectSMCache
FINE: Level 1 Cache cleared
Feb 25, 2010 7:21:38 AM org.datanucleus.ObjectManagerImpl postClose
FINE: Object Manager "org.datanucleus.ObjectManagerImpl@5d8d3d6c" closed
Feb 25, 2010 7:21:38 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /j_spring_security_logout
Object Manager has been closed
org.datanucleus.exceptions.NucleusUserException: Object Manager has been closed
at org.datanucleus.ObjectManagerImpl.assertIsOpen(ObjectManagerImpl.java:3876)
at org.datanucleus.ObjectManagerImpl.getFetchPlan(ObjectManagerImpl.java:376)
해결법
-
==============================
1.메소드에 @Transactional을 추가하면 객체 관리자가 닫히지 않습니다. 그러나, 나는 이것이 왜 이것없이 끝나는 지 확신하지 못한다.
메소드에 @Transactional을 추가하면 객체 관리자가 닫히지 않습니다. 그러나, 나는 이것이 왜 이것없이 끝나는 지 확신하지 못한다.
-
==============================
2.그 이유는 정확히 모르지만, 게으른로드 된 query.getResultList ()와 관련이있는 것으로 보입니다. 분명히 lazy-loading은 remove (토큰)를 호출 할 때 중단됩니다.
그 이유는 정확히 모르지만, 게으른로드 된 query.getResultList ()와 관련이있는 것으로 보입니다. 분명히 lazy-loading은 remove (토큰)를 호출 할 때 중단됩니다.
해결 방법으로 먼저 ArrayList의 요소에 대한 ids / 키를 수집 할 수 있으며 별도의 루프에서 데이터 저장소에서 해당 요소를 제거 할 수 있습니까?
-
==============================
3.나를 위해 일한 해결책과 내가 발견 한 버그에 대한 설명 :
나를 위해 일한 해결책과 내가 발견 한 버그에 대한 설명 :
http://groups.google.com/group/google-appengine-java/browse_thread/thread/945f6ca66c1c587e
from https://stackoverflow.com/questions/2294867/google-app-engine-org-datanucleus-exceptions-nucleususerexception-object-mana by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Apache CXF + Spring : 간단한 클라이언트 생성 (0) | 2019.05.09 |
---|---|
[SPRING] 봄에 같은 콩을 여러 개 가져 오는 법? (0) | 2019.05.09 |
[SPRING] JAX WS webservice는 applicationcontext에서 스프링 빈을 가져 가지 않으므로 null 포인터 예외가 발생합니다. (0) | 2019.05.09 |
[SPRING] 스프링 부트의 리소스 폴더에서 파일 읽기 (0) | 2019.05.09 |
[SPRING] 일치하는 팩토리 메소드가 없습니다. factory 메소드 'aspectOf ()' (0) | 2019.05.09 |