JDOを使用してオブジェクトを永続化するSpringアプリケーションがGoogleAppエンジンにあります。そのため、サービスレイヤーでこのように使用して、トランザクションを保持しています( @Transactional アノテーションを使用)。
@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
}
私が抱えている問題は、低レベル API を使用して object2 を永続化する必要があることです (JDO では実行できない高度な保存であるため)。私が抱えている問題は、それらすべてを同じトランザクションに保持する方法がわからないことです。愛レベルで行われた sving の保存時に dao3 が失敗した場合、ロールバックされません。
したがって、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()
しかし、それは私にとってはヌルです。低レベルで JDO のトランザクションを認識し、3 つの daos を同じトランザクション内に保持するにはどうすればよいでしょうか。
ありがとう。