Je dois prendre un objet à partir d'un EntityGroup et le stocker en dehors d'un groupe d'entités, je pense que la façon la plus simple de l'expliquer est de montrer le code. Dans le code suivant, la fonction removeMessage()
annulera les deux appels au gestionnaire de persistance?Comprendre si cette transaction dans JDO est sûr
est-il un moyen de tester, à savoir comment puis-je simuler la deuxième makePersistent
défaut de demande?
// 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;
}
}
En d'autres termes, je dois vous assurer qu'il ne soit pas dans un état où un message disparaît complètement.
Il est maintenant possible d'effectuer des transactions intergroupes avec JDO. Voir: https://developers.google.com/appengine/docs/java/datastore/transactions – eeeeaaii