2009-06-30 6 views
2

Ich habe einen Webservice mit den PHP-SOAP-Klassen geschrieben. Es bietet Funktionen zum Zurückgeben von XML-Daten aus einer Oracle-Datenbank oder zum Einfügen/Aktualisieren/Löschen in der Datenbank.Warteschlange Oracle-Transaktionen mit PHP oci_pconnect-Funktion in einem Webservice

Im Moment wird jedoch Autocommit verwendet, so dass jeder Vorgang sofort ausgeführt wird.

Ich schaue mir an, wie man die Transaktionen in die Warteschlange stellt und dann die ganze Menge nur festlegt, wenn ein Benutzer eine Taste drückt, um zu "speichern". Ich habe Schwierigkeiten herauszufinden, ob das möglich ist. Ich kann keine konsistente Verbindung leicht aufrechterhalten, da natürlich der Webservice für separate Operationen aufgerufen wird.

Ich habe versucht, mit der PHP oci_pconnect Funktion, aber auch wenn ich jedes Mal mit den gleichen Parametern verbinden, scheint die Sitzung beendet zu haben, und meine Änderungen sind nicht verpflichtet, wenn ich schließlich oci_commit aufrufen.

Irgendwelche Ideen?

Antwort

2

Die Wiederverwendung der gleichen nicht festgeschriebenen Datenbanksitzung zwischen PHP-Anfragen ist nicht möglich. Sie haben keine Möglichkeit, einen Benutzer in eine PHP-Prozesse oder DB-Verbindung zu sperren, da der Webserver eine Anfrage an beliebig viele von ihnen senden wird. Daher können Sie in der Oracle-Sitzung keine unverbindlichen Daten zwischen Anforderungen speichern.

Der beste Weg, dies zu tun, hängt wirklich von Ihren Anforderungen ab. Mein Gefühl ist, dass Sie irgendeine Art von Sitzungsspeicher wünschen (vielleicht eine Datenbanktabelle, die auf user_id eingegeben wird), die alle ausstehenden Transaktionen zwischen Anforderungen enthalten kann. Wenn der Benutzer auf "Speichern" klickt, extrahieren Sie alle ausstehenden Anforderungen und fügen Sie sie in ihre endgültige Zieltabelle ein und übertragen Sie sie anschließend.

Eine Alternative wäre, alle Transaktionen mit einem Flag einzufügen, das besagt, dass sie noch nicht abgeschlossen sind. Wenn Sie auf Speichern klicken, aktualisieren Sie die Flagge, um zu sagen, dass sie abgeschlossen ist.

In beiden Fällen müssen Sie Ihre ausstehenden Anforderungen in eine andere Position bringen, bis diese Schaltfläche zum Speichern gedrückt wird.

+0

Das macht Sinn, ich werde nach alternativen Methoden zur Speicherung ihrer Commits suchen. Vielen Dank. –

0

DBMS_XA ermöglicht Ihnen die gemeinsame Nutzung von Transaktionen in Sitzungen.