Juni 2nd, 2006
Transaktionen in SessionBeans steuern
Um den Aufruf einer Methode in einer SessionBean in Bezug auf die Transaktion zu steuern, bietet die EJB3-Spezifikation ebenfalls eine entsprechende Annotation an: @TransactionAttribute
Die Annotation kann an entsprechende Methoden und Klassen gehangen werden und erwartet als Parameter einen Wert aus TransactionAttributeType, welches folgende Werte annehmen kann:
- MANDATORY: Die Methode muss im Rahmen einer bereits bestehenden Transaktion aufgerufen werden. Befindet sich der Aufrufer nicht in einer Transaktion, so wird eine Exception geworfen.
- NEVER: Das Gegenteil zu MANDATORY. Befindet sich der Aufrufer in einer Transaktion wird eine Exception geworfen.
- REQUIRED: Die Methode wird in einem Kontext einer Transaktion ausgeführt. Ist bereits eine Transaktion vom Aufrufer vorhanden, so wird diese verwendet, ansonsten wird eine neue erstellt, welche nach der Methode beendet ist.
- REQUIRES_NEW: Wie REQUIRED, jedoch dass unbedingt eine neue Transaktion erstellt wird. Befindet sich der Aufrufer bereits in einer Transaktion, so wird diese angehalten. Die Methode wird daher explizit in einer eigenen Transaktion ausgeführt.
- SUPPORTS: Wenn der Aufrufer in einer Transaktion sich befindet, so wird die Methode ebenfalls in einer Transaktion ausgeführt. Anderenfalls wird die Methode ohne Transaktionskontext ausgeführt.
- NOT_SUPPORTED: Wie NEVER, jedoch wird bei vorhandener Transaktion keine Exception geworfen, sondern die Transaktion angehalten und die Methode außerhalb des Transaktionskontextes ausgeführt.
Wenn die Annotation an eine Klasse gesetzt wird, so wird damit das Standardverhalten für alle in der Klasse befindlichen Methoden gesetzt.