Avatar billede neoman Novice
17. november 2007 - 11:36 Der er 12 kommentarer og
1 løsning

Transaktioner: transient exceptions

Jeg har fundet mig en lille algoritme til at håndtere transaktioner :

while(not done) {
  ... some statements
  commit;
  done = true;
}  catch (SQLException e) {
  if (transient error) {
      ..
      rollback;
  } else {
      rollback;
      done = true;
      e.g. throw exception
  }
}
(taget fra http://weblogs.java.net/blog/bernt/archive/2006/06/what_about_tran.html )

Det spændende spørgsmål her er, hvordan man på forhånd skelner "transient error" fra de andre, og mere permamente, af slagsen, så man ikke sætter koden i en uendelig løkke.

MAO: hvilke specifikke "transient" exceptions kunne man forvente?
Avatar billede arne_v Ekspert
17. november 2007 - 15:53 #1
Hvis du bruger Java 1.6 og en JDBC driver skrevet til Java 1.6, så er det nemt:

der skal nemlig smides en sub class af SQLException kaldet SQLTransientException
i de tilfælde
Avatar billede arne_v Ekspert
17. november 2007 - 15:56 #2
For software der ikke er spritnyt tror jeg at det må blive et hack.
Avatar billede neoman Novice
17. november 2007 - 19:56 #3
Min fejl - burde have nævnt konteksten, som i mit tilfælde er ASP.NET.

Rent fysisk - hvad slags exceptions kan give en "transient" error ? Venten på at records som er locked frigives ?
Avatar billede arne_v Ekspert
17. november 2007 - 20:16 #4
transaction timeout, transaction deadlock var oplagte exceptions at retry'e
Avatar billede neoman Novice
17. november 2007 - 20:37 #5
De findes ikke i en "sub class" i mit tilfælde ? Det er for mig et spørgsmål om at vide hvad de forskellige hedder, så jeg kan smide dem i "retry"-blokken, i stedet for at sætte dem i den anden blok, hvor jeg opgiver transaktionen og udfører passende tiltag efterfølgende. Dvs for at kunne klassificere exceptions skal jeg så bladre igennem listen af dem alle og gætte på hvilke har en transient karakter - eller findes der en officiel gruppering et eller andet sted ?

I øvrigt: har du en kommentar til den viste konstruktion ? Jeg får nemlig myrekryb af at sætte noget ind i uendelige løkker, og kunne bedre forestille mig en limit af en eller anden art på hvor længe (udtrykt i tid eller antal) man kan retry'e.
Avatar billede arne_v Ekspert
17. november 2007 - 20:49 #6
Ikke nok med at SqlException ikke har sub klasser - den er sågar sealed ...
Avatar billede arne_v Ekspert
17. november 2007 - 20:50 #7
Som skrevet i en kommentar til den blog du linkede til så kan man sætte et max antal forsøg på.
Avatar billede neoman Novice
17. november 2007 - 21:34 #8
Tak - jeg fumler videre:) Læg et svar
Avatar billede neoman Novice
17. november 2007 - 22:09 #9
Nå ja - hvis du har nogle gode  hints til hvordan jeg finder de relevante "transiente" i  høstakken, så må du endeligt gerne skrive det:)
Avatar billede arne_v Ekspert
18. november 2007 - 01:02 #10
Det mest guidende for SQLServer må være severity (SqlException Class property).

Docs siger:

Messages that have a severity level of 10 or less are informational and indicate problems caused by mistakes in information that a user has entered. Severity levels from 11 through 16 are generated by the user, and can be corrected by the user. Severity levels from 17 through 25 indicate software or hardware errors. When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement.

The SqlConnection remains open when the severity level is 19 or less. When the severity level is 20 or greater, the server ordinarily closes the SqlConnection. However, the user can reopen the connection and continue. In both cases, a SqlException is generated by the method executing the command.
Avatar billede arne_v Ekspert
18. november 2007 - 01:04 #11
1-10 er slet ikke fejl og dermed ikke relevant

11-16 er syntax fejl i ens SQL og det bliver sikkert ikke bedre af at prøve igen

17-19 kan man prøve igen

20-25 er man nødt til at genåbne connection hvis man vil prøve igen og jeg er lidt
skeptisk overfor at prøve igen i det tilfælde
Avatar billede arne_v Ekspert
18. november 2007 - 01:04 #12
og et svar
Avatar billede neoman Novice
18. november 2007 - 12:24 #13
Mange tak!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester