2011-03-24 3 views
1

JDO를 사용하여 객체를 유지하는 Google 애플리케이션 엔진에 Spring 애플리케이션이 있습니다. 그래서 저는 트랜잭션을 (@Transactional annotation으로) 유지하기 위해 서비스 레이어에서이 방법으로 이것을 사용하고 있습니다.JDO와 낮은 수준의 API 간의 트랜잭션 유지

@Transactional 
public void save(Object object) { 
    dao1.save(object); // dao1 saves using JDO 
    Object object2 = generate1Object(object) 
    dao2.save(object2); // dao2 saves using low level API 
    Object object3 = generate2Object(object) 
    dao3.save(object3); // dao3 saves using JDO 
} 

내가 가진 문제는 내가 (이 진행된하는 저장 JDO와 함께 할 수 있기 때문에)을 object2를 유지하기 위해 낮은 수준의 API를 사용할 필요가있다. 내가 가진 문제는 같은 거래에서 모두 유지하는 법을 모른다는 것입니다. dao3가 사랑 수준에서 끝난 sving을 저장할 때 실패하면 롤백되지 않습니다.

그래서 이런 식으로 계속 dao2의 :

//save using low-level API 
public void save(Object object){ 
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
    Entity entity = generateEntity(object); 
    datastore.put(entity); 
} 

과 dao1 및 dao3에서 나는 이런 식으로 뭔가가 (JDO를 사용하는 사람) : 나는했습니다

//save using JDO 
public void save(Object object) { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    pm.makePersistent(object); 
} 

을 데이터 스토어 객체에 다음과 같은 메소드가 있음을 알았습니다.

datastore.getCurrentTransaction() 

하지만이 값은 null입니다. 낮은 수준에서 JDO의 트랜잭션을 인식하고 동일한 트랜잭션에서 세 개의 daos를 유지하는 방법은 무엇입니까?

감사합니다.

+0

를 구현 가정, 정상적으로 JDO 사용하고에서 Bigtable 연결 이론입니다 적어도

tx.begin(); ... // Get hold of native connection JDOConnection jdoConn = pm.getDataStoreConnection(); ... cast "jdoConn.getNativeConnection()" to the right type ... (do something with the connection) jdoConn.close(); // Hands it back to JDO tx.commit(); 

잡아? 그게 무슨 뜻 이죠? –

+0

@Nick Johnson 저장하려는 개체가 UUID 이름에 따라 다른 속성 이름을 가지고 있습니다. 그래서 저를 저장할 때 해당 UUID로 열의 각 값을 설정해야합니다. 하지만 UUID 이름을 미리 알 수는 없으므로 저수준 API를 사용하여 유지합니다. – Javi

+0

JDO와 저수준 API를 함께 사용하여 솔루션을 해킹하려는 것이 아니라 Objectify와 같은 것을 사용해야하는 것 같습니다. –

답변

1

은 GAE/J는 '저장 전진'그것을

+0

디버깅 모드에서 getNativeConnection() 메서드가 반환하는 것을 보려고 했으므로 객체를 캐스팅해야하는 유형을 알지 못합니다. jdoConn.getNativeConnection() 할 때 null 개체를 가져옵니다 (전) dao1.save (개체) (전 둘 다 시도) 호출 전후 null입니다. 그래서 나는이 물건으로 아무 것도 할 수 없다. – Javi

+0

그래서 http://code.google.com/p/datanucleus-appengine/issues/list에서 JDO를 구현한다고 주장하지만 해당 기능이 누락되어 버그가 발생합니다. – DataNucleus