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를 유지하는 방법은 무엇입니까?
감사합니다.
를 구현 가정, 정상적으로 JDO 사용하고에서 Bigtable 연결 이론입니다 적어도
잡아? 그게 무슨 뜻 이죠? –
@Nick Johnson 저장하려는 개체가 UUID 이름에 따라 다른 속성 이름을 가지고 있습니다. 그래서 저를 저장할 때 해당 UUID로 열의 각 값을 설정해야합니다. 하지만 UUID 이름을 미리 알 수는 없으므로 저수준 API를 사용하여 유지합니다. – Javi
JDO와 저수준 API를 함께 사용하여 솔루션을 해킹하려는 것이 아니라 Objectify와 같은 것을 사용해야하는 것 같습니다. –