JPA: Verwendung von Transaktionen mit JTA EntityManager?

Zunächst diese Lösung ist keine option für mich, denn ich kann es nicht ändern, die persistence-unit.

Mein problem ist, dass ich eine JTA-EntityManager aber ich brauche für genau einen use-case etwas wie eine Transaktion:

public boolean saveWithResult(PointsValidityPeriod pointsValidityPeriod)
{
    //TODO use transaction here 
    super.save(pointsValidityPeriod);

    if (updatePrevious(pointsValidityPeriod.getValidFrom()) != 1)
    {
        logger.error("Update of Period was not possible, because UPDATE returned no single result.");

        return false;
    }

    pointsValidityPeriodEvent.fire(pointsValidityPeriod);

    return true;
}

Speichern-Methode (die ich nicht ändern kann):

public void save(T entity)
{
    getEntityManager().persist(entity);
}

Sehen Sie, dass es ein speichern-Aufruf, aber diese speichern müssen werden zurückgesetzt, wenn das update schief ging, also wie kann ich das erreichen? Irgendwelche Ideen?

Der springende Punkt bei der JTA ist es, Transaktionen zu verwalten. In welcher Umgebung sind Sie executingyour app? Ein application server mit EJB? Dann verwenden EJBs zur Abgrenzung von Transaktionen: das ist Ihre wichtigste Punkt.
Ja, wir verwenden EJB-JBoss.
Eine EJB ist, von Standard -, Transaktions. Alle code-inside EJB-Methoden ausgeführt wird, in einer Transaktion standardmäßig.
Änderte ich die Methode Aufrufe. Wenn ich sage if (updatePrevious() == 2) { => don't invoke save.} im saveWithResult Methode, dann updatePrevious wird nicht zurückgesetzt, also UPDATE ausgeführt wurde, aber EINFÜGEN (speichern) nicht, also wie ist das transaktionale? Ich verstehe nicht, dass.

InformationsquelleAutor Bevor | 2012-06-27

Schreibe einen Kommentar