2010-01-02 3 views
1

방금 ​​검색 한 객체 목록의 JDO 지속성에 다소 문제가 있습니다.Google App Engine (Java) + Spring 관리 PersistenceManager

는 내가 뭘 원하는에 있습니다 :

  • 것은 "주문"의 목록을 가져 오기
  • 수정 하나의 속성 "상태"
  • 는 "주문"

의 대량 업데이 트를 확인 무엇 나는 지금까지 "ID를 가진 객체 ... 다른 객체 관리자가 관리합니다"입니다. 하지만 잠깐, 나는 봄이 없으면 그런 문제에 직면하지 않았다!

나는 이런 식으로 디버깅하려고 : 내 모든 DAO를이 JdoDaoSupport을 확장

try { 
    System.out.println(getPersistenceManager().hashCode()); 
    getPersistenceManager().makePersistentAll(entities); 
} finally { 
    getPersistenceManager().close(); 
} 

:

List<Orderr> orders = orderDao.findByIdAll(ordersKeys); 
for(Orderr o : orders) { 
    System.out.println(JDOHelper.getPersistenceManager(o).hashCode()); 
    //hashcode is 1524670 
    o.setSomething(somevalue); 
} 
orderDao.makePresistentAll(orders); //hashcode inside is 31778523 

makePersistentAll은 아무것도하지만하지 않습니다. Pmf는 봄에 주사되고 관리됩니다.

마지막으로 findByIdAll 이후 지속성 관리자가 닫히는 이유는 무엇입니까? 아니면 새로운 지속성 관리자 인스턴스를 얻는 이유는 무엇입니까? 내 findByIdAll 메서드는 지속성 관리자에서 close를 호출하지 않습니다.

물론 각 "주문"에 대해 makePersistent를 호출하면 잘 작동합니다. 그러나

UPD ... 비즈니스 및 데이터베이스 로직의 레이어링 나누기 그냥 makePersistentAll에 대한 모든 호출은 마이그레이션이 PersistenceManager에 관리 튀어 결국에서 작동하지 않는 것을 발견했다. 봄이 오기 전에 저는 평범한 오래된 PMF.get() 도우미를 사용했고 모든 것이 반짝 반짝 빛났습니다!

답변

1

30 초 이상의 HTTP 요청에 대한 응답으로 앱이 계속 실행되는 경우 앱이 종료됩니다. GAE의 작동 모드의 일부는 앱이 오래 가지 않는다는 것입니다. 조금도.

자신의 사이트에서이 작업을 수행하지는 않지만 DB 세션 관리자에 대한 단기 액세스 권한이 있어야합니다. 모든 트랜잭션에서 트랜잭션을 다시 열려면 많은 시간이 필요하지만 GAE가 프로세스를 확장 가능하게 만드는 방법입니다. 실제로 많은 트래픽이 발생하면 여러 서버에서 동시에 응용 프로그램을 실행할 수 있습니다.

+0

GAE 앱을 개발하고 있지만, 특정 애플리케이션이 아닙니다. localhost SDK (Jetty 만 제외하고)와 동일한 문제가 있습니다. 그리고 나는 "DB 세션 관리자"가 PersistenceManagerFactory이지만 PersistenceManager는 아니라고 생각했습니다. 각 객체에서 내 오래된 PersistenceManager를 얻을 수는 있지만 그렇게하지 않아도됩니다. 그것은 전혀 닫히지 않았 음을 의미하지만, 봄부터 dao에서 제거되었습니다. – vshulyak

+0

흠. 그렇다면 우리가 당신을 도울 수있는 능력을 넘어선 것 같습니다. GAE 앱에서 Spring을 사용했지만 관계가 행복하지 않았습니다.죄송합니다. 행운을 빈다. –

+0

감사합니다. 네, 그 질문은 명백하지 않습니다 ... – vshulyak

0

이것은 일종의 마술입니다. 매번 질문 할 때마다 질문 후 24 시간 이내에 답변을 얻습니다.

물론 공장은 항상 새로운 pm 인스턴스를 만들어야합니다. 지금 나는 나의 옛날 오후에 대한 참조를 저장한다. (나는 봄 jdo daos 이전에했던 것처럼) 그리고 모든 것은 괜찮다.