2011-12-08 1 views
1

내 특정 질문 (그 밖의 모든 내용은 문맥이므로 내 질문에 대한 대답을 알고있는 경우 무시할 수 있음) : JDO를 사용하여 개체가 일시적인지 여부를 어떻게 확인할 수 있습니까? 또는이 작업을 수행하는 간단한 방법은 어떻게 작성합니까?) 호기심이 아니면이 원하는 이유 understance하지 않는 사람들을위한개체가 지속성 관리자에 속하는지 여부를 확인하십시오.

컨텍스트 : 나는/GAE/J에 JDO 현재 응용 프로그램 엔진 Memcache를 API의 사용을 구현하고 승 일하고 있어요

. 내 데이터 저장소에서 엔티티 인스턴스를 캐시하는 문제가 발생했습니다. 요청이 끝날 때 나의 퍼시스턴스 매니저가 닫히고 - 캐시 된 오브젝트가 일시적으로되어 버렸다고 말할 수있다. (나는 이것에 관해 틀릴 수도있다.) 캐시에 놀고있다.

길을 가다 보면 캐시 된 객체가 내보기 등을 만드는 데 사용되지만 객체를 업데이트하고 계속하려고 할 때; 객체는 지속되지 않습니다. 나는이 문제를 해결하기 위해 업데이트 작업을 수행하기 전에 캐시 된 객체를 다시 가져 오는 중입니다. 하지만 이것은 다른 문제를 일으키고 있습니다. 캐시 된 상태가 아닌 객체를 업데이트 할 때 내 영속성 관리자가 관리하고 새 객체를 가져올 때 수행 한 모든 업데이트 작업을 덮어 쓰게되기 때문입니다. 나는이 잘못을 지적 주시기 바랍니다에 대해 생각하고 있다면이 일을하려고하거나해야 다른 방법이 있다면 기본적으로, 나는 ....

// valueWithChangesToUpdate is an object that could be from 
// memcache or could be fresh from pm, don't know for sure 
// going into the method 
public <T extends SomeKindOfEntity> void update(CustomQueryClass q, T valueWithChangesToUpdate) { 

    // If valueWithChangesToUpdate is not from memcache/not transient then 
    // any changes made are overridden when the following statement executes 

    T freshObject = q.runQuery(); 


    // What I would like to do to avoid problem I'm having... 
    // T freshObject = null; 
    // if(valueWithChangesToUpdate.isTransient()) { 
    // freshObject = q.runQuery(); 
    // } 

    // End goal... 
    freshObject.applyUpdates(valueWithChangesToUpdate); 
    PMF.getCurrentPM().makepersistent(freshObject); 
} 

을이 일을하고 있습니다.

답변

1
JDOHelper.getObjectState(obj); 

은 분명히 개체의 상태를 알려줍니다. 및

JDOHelper.getPersistenceManager(obj); 

은 해당 개체를 관리하는 PM을 알려줍니다. 설명서는 JDO 사양 또는 Apache JDO 웹 사이트에서 찾을 수 있습니다.