Avatar billede fsconsult.dk Nybegynder
03. marts 2003 - 09:56 Der er 4 kommentarer og
1 løsning

Implementer timeout for forretningslogik

Jeg har et stykke programlogik, som kalder en ekstern server, som kan fejle uden at jeg har mulighed for at fange det, hvilket betyder at min program kan stå og hænge.

Derfor har jeg brug for en mulighed for at indkapsle min kode med noget timeout-logik.

Min kode kører via servlets (Struts action), og løsningen skal derfor være trådsikker.

Noget i retning af:

try {
  doStuff();
} catch (executiontime > 60 seconds)  {
  log.error("server timeout");
}
Avatar billede fsconsult.dk Nybegynder
03. marts 2003 - 10:03 #1
Forestiller mig at det evt. kan implementeres vha. tråde, men mangler et eksempel at arbejde ud fra.
Avatar billede arne_v Ekspert
03. marts 2003 - 10:09 #2
Den "ægte" J2EE løsning er at implementere forbindelsen som
en JCA connector. En sådan smider en ResourceException ved
timeout.

Men det er sikkert ikke lige sagen at gå igang med at lave
so ein ding for at løse et så relativt simpelt problem.

Hurtigste løsning er formentlig at kalde setSoTimeout på
din Socket det reades fra (jeg formoder at det er en Socket connection).

Så får I en SocketTimeoutException når x antal sekunder er gået og
der ikek er kommet noget svar.
Avatar billede fsconsult.dk Nybegynder
03. marts 2003 - 10:20 #3
Ja, det er en socket-connection jeg benytter til at kommunikere med serveren via Telnet (vi har desværre ikke bedre muligheder for at kommunikere med serveren direkte).

Løsningen med setSoTimeout vil løse nogle af problemerne, men der kan desværre opstå mange andre fejlsituationer, idet jeg skriver "blindt" det til serveren, som jeg formoder den spørger om. Hvis der går noget galt i denne "blindskrift", vil serveren formentlig aldrig levere det svar jeg forsøger at få, og derfor har jeg brug for at kunne afbryde min forretningslogik efter 30-60 sekunder.
Avatar billede arne_v Ekspert
03. marts 2003 - 10:32 #4
Men vil en socket timeout ikke løse problemet ?

Du laver en write til socket
Du sætter timeout på socket til 45 sekunder
Du laver en read fra socket
Hvis du for et svar så fortsætter du med din forretnings logik
Hvis du får en timeout exception afbryder du din forretnings logik

Hvis du får et svar skal du muligvis teste indholdet af dette
inden du beslutter dig for at fortsætte eller aborte.

Men er det ikke ligesom de muligheder du har ?
Avatar billede fsconsult.dk Nybegynder
03. marts 2003 - 10:37 #5
jeg er ikke helt sikkert, men vil lige teste det i praksis ...  det ville være lettere end at pakke logikken ind i en tråd ..
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
Kurser inden for grundlæggende programmering

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