Transakční izolační level a WebSphere Application Server data source
Během nedávného řešení problému se zámky v databázi jsem narazil to, že pro většinu JDBC driverů je nastavený isolační level REPEATABLE READ. Pro většinu aplikací přitom postačuje isolační level READ COMMITED, který zaručí, že nebudu číst nepotvrzená data jiných transakcí, ale není tak striktní například k opakovanému selectu - při READ COMMITED během mé transakce mohou do výsledku stejného selectu přibýt nebo naopak ubýt některé řádky - to ale v drtivé většině řešení nevadí.
Pokud chci tedy mít aplikaci, která se chová šetrně k uzamykání záznamů v databázi, pak je vhodné nepoužívat implicitně nastvený isolační level REPEATABLE READ, ale změnit jej na READ COMMITED.
To lze zajistit následujícími způsoby:
Nastavení na rozšířené konfiguraci resource reference v aplikaci
Pro tento účel je potřeba do WEB-INF přidat soubor ibm-web-ext.xmi, který obsahuje konfiguraci s explicitním nastavení izolačního levelu:
<resourceRefExtensions xmi:id="ResourceRefExtension_1" isolationLevel="TRANSACTION_REPEATABLE_READ">
<resourceRef href="WEB-INF/web.xml#ResourceRef_1102108961944"/>
</resourceRefExtensions>
<resourceRefExtensions xmi:id="ResourceRefExtension_2" isolationLevel="TRANSACTION_READ_COMMITTED">
<resourceRef href="WEB-INF/web.xml#ResourceRef_1102108961964"/>
</resourceRefExtensions>
Nstavení na konfiguraci data source:
WebSphere Application Server umožňuje na úrovni datového zdroje nastavit isolační level , který datový zdroj bude používat. Pro tento účel je potřeba použít custom property
webSphereDefaultIsolationLevel
povolené hodnoty:
Hodnota
|
JDBC isolation level
|
8
|
TRANSACTION_SERIALIZABLE
|
4
(default)
|
TRANSACTION_REPEATABLE_READ
|
2
|
TRANSACTION_READ_COMMITTED
|
1
|
TRANSACTION_READ_UNCOMMITTED
|
0
|
TRANSACTION_NONE
|

Žádné komentáře:
Okomentovat