Ich habe drei voneinander abhängige Ressourcen: (ob Closeable ist nicht sicher) QueueConnection, QueueSession und QueueSender. Wobei diese drei aus create-Methoden erzeugt werden. Diese Methoden können alle eine XException werfen. Da in dieser Erzeugungskette an jeder Stelle etwas schiefgehen kann, muss ich im finally Block jede Resource auf null prüfen und gegebenenfalls schlieszen. Diese “Aufräumungsmethoden” können jedoch selbst wieder fehlschlagen und wieder eine XException werfen. Wenn in dieser Kette im finally Block etwas schiefgeht, bleiben mitunter Ressourcen offen. Eine Lösung wäre, für jede Ressource im finally Block einen separaten try-catch-Block zu benutzen - insgesamt etwas unschön, aber es sollte gehen. Damit hat jede Ressource einen Versuch frei.
im Moment hast du ja keine null-Prüfung für r1 im finally, wäre das noch zusätzlich angedacht?
hilfreich ist in jedem Fall eine Methode zum Aufräumen, wiederholt aufgerufen,
idealerweise etwa close(r1);
für jeden schließbaren Typ vorhanden oder noch besser gemeinsames Interface Closable
notfalls auch ein Aufruf mit Runnable als Java-8-Abkürzung
Nun hast du explizit gesagt, dass nicht klar ist, ob die Closeable sind. Aber wenn nicht, müßte man sich was überlegen - vielleicht noch eine Art „Closer“-Interface mit implementierungen für die drei Typen erstellen oder so…
EDIT: Bzw. utility-Funktionen, die die Objekte einwickeln, und als „Closeable“ zurückgeben:
private static Closeable closeable(SomeType t) {
return new Closeable() {
@Override
public void close() {
if (t != null) t.specificClose();
}
};
}
[quote=„Falk, post:6, topic:19046“]
Soll ich jetzt das Thema schliessen?[/quote] So weit ich weis kannst Du eine (oder mehrere?) Antwort als „richtig“ oder „hilfreich“ o.ä. markieren.
Auf die Herzchen klicken wird auch immer gern gesehen… ;o)