Hallo,
ich habe ein prinzipielles Problem zu lösen. In unserem Projekt haben wir eine Sybasedatenbank, eine Middleware und ein Java Frontend. Die Middleware bietet verschiedene Methoden an z.B. putObject(), removeObject() etc. an. In diesen Methoden werden die komplexeren Datenbank Zugriffe transaktional angesteuert. Das folgende Listing gibt eine Beispielmethode an...
Diese Methode fügt einen einen neuen Benutzer hinzu, wenn irgendwas schief läuft, wird die Transaktion zurückgerollt. Nun möchte in einer weiteren Ebene die Möglichkeit haben, mehrere Benutzer zu schreiben, wobei diese gesamte Prozedur am bessten auch in einer eigenen Transaktion laufen sollte. Sobald ein Nutzer nicht angelegt werden konnte, sollen alle anderen ebenfalls zurückgerollt werden.
Also etwas in der Art wie:
Starte Transaktion
putUser(user1);
putUser(user2);
putUser(user3);
Commite Transaktion
Leider finde ich hierzu keinen Weg zur Lösung. Wie kann ich also mehrere Transaktionen in einanderschachteln (Nested Transactions)? Sybase unterstützt dies ja wohl...
Ich möchte jedoch keine neue Middleware-Methode schreiben, die parallel zu der ersten Methode steht.
Grüße
ich habe ein prinzipielles Problem zu lösen. In unserem Projekt haben wir eine Sybasedatenbank, eine Middleware und ein Java Frontend. Die Middleware bietet verschiedene Methoden an z.B. putObject(), removeObject() etc. an. In diesen Methoden werden die komplexeren Datenbank Zugriffe transaktional angesteuert. Das folgende Listing gibt eine Beispielmethode an...
Code:
public void putUser(User u) throws RepositoryException, SecurityException {
Connection conn = null;
RepositoryException exception = null;
CallableStatement putUserStatement = null;
CallableStatement changeMappingStatement = null;
CallableStatement updateUssStatement = null;
Statement stat = null;
try {
conn = getConnection();
stat = conn.createStatement();
stat.execute("BEGIN TRANSACTION");
...
...
...
stat.execute("COMMIT");
}
catch (Exception e) {
exception = new RepositoryException(e);
try {
if (stat != null) {
stat.execute("ROLLBACK");
}
}
catch (SQLException sqle) {
sqle.printStackTrace();
}
}
...
}
Diese Methode fügt einen einen neuen Benutzer hinzu, wenn irgendwas schief läuft, wird die Transaktion zurückgerollt. Nun möchte in einer weiteren Ebene die Möglichkeit haben, mehrere Benutzer zu schreiben, wobei diese gesamte Prozedur am bessten auch in einer eigenen Transaktion laufen sollte. Sobald ein Nutzer nicht angelegt werden konnte, sollen alle anderen ebenfalls zurückgerollt werden.
Also etwas in der Art wie:
Starte Transaktion
putUser(user1);
putUser(user2);
putUser(user3);
Commite Transaktion
Leider finde ich hierzu keinen Weg zur Lösung. Wie kann ich also mehrere Transaktionen in einanderschachteln (Nested Transactions)? Sybase unterstützt dies ja wohl...
Ich möchte jedoch keine neue Middleware-Methode schreiben, die parallel zu der ersten Methode steht.
Grüße