0
我需要從EntityGroup中取出一個對象並將其存儲在實體組之外,我認爲解釋它的最簡單方法是顯示代碼。在下面的代碼中,removeMessage()
函數是否會回調這兩個調用到持久性管理器?瞭解JDO中的這個事務是否安全
有沒有辦法來測試這個,即我該如何模擬第二個makePersistent
請求失敗?
// Not meant to compile, it is for example only
public class UndeliveredMessages {
private Key key;
private long count = 0;
private Set<Message> messages = HashSet<Message>();
public void removeMessage(Message message) {
Transaction tx = pm.currentTransaction();
try {
count--;
messages.remove(message);
pm.makePersistent(this);
Message item = new Message();
item.setFrom(message.getFrom());
item.setTo(message.getTo());
item.setText(message.getText());
pm.makePersistent(message); // If this one fails, will all of the above be rolled back?
tx.commit();
} finally {
if (tx.isActive())
tx.rollback();
}
}
public void addMessage(String from, String to, String message) {
count++;
messages.put(new Message(from, to, message));
pm.makePersistent();
}
public Message getNextMessage() {
if(!messages.isEmpty())
return messages.iterator().next();
return null;
}
}
換句話說,我需要確保它沒有進入消息完全消失的狀態。
現在可以與JDO進行跨組交易。請參閱:https://developers.google.com/appengine/docs/java/datastore/transactions – eeeeaaii 2012-11-27 13:20:43