Avatar billede runeklausen2 Nybegynder
11. september 2006 - 17:33 Der er 7 kommentarer og
1 løsning

Web services synchronized?

Halløjsa...

Nu har jeg lavet en web-service som henter og skriver information ned i en database, og den forbindelse har jeg prøvet med proxysniffer at teste hvordan den performer, ved omkring 40 forbindelser inden for meget kort tid, og i øvrigt som samme bruger, kommer problemet: Nogle gange når den ene kørsel ikke at blive færdig med at skrive sit resultat i databasen, inden den næste prøver at overskrive resultat, hvilket resultere i en fejl.

Jeg har prøvet at omgå problemet med at lave metoden synchronized, og det ser ud til at hjælpe en hel del, men der er stadigvæk nogle enkelte som fejler.

Findes der god råd til hvordan man håndtere 200+ bruger på samme web-service som kalder samme funktion inden for så kort tid, at den ikke bliver færdig med at køre et kald før det næste er på vej ind?
Avatar billede arne_v Ekspert
11. september 2006 - 17:56 #1
hvis det er en enkelt servlet container og du synchronizer på noget static, så
bør det altid virke

men principielt mener jeg at det er mere korrekt at sætte transaction isolation
level på database connection
Avatar billede runeklausen2 Nybegynder
11. september 2006 - 18:23 #2
Der er ikke noget servlet, funktionerne bliver kaldt fra nogle .NET sider
Men ja, det er jo samme funktion, som er synchronized, så derfør bør det vel fungere...

Hvordan sætter jeg transaction isolationlevel på database connection?

Jeg bruger jtds
Avatar billede arne_v Ekspert
11. september 2006 - 18:38 #3
hvilket web service toolkit bruger du ? (det plejer at være servlet baseret)

og på hvilken container ? (tomcat/websphere/weblogic/jboss/...)

Connection har en setTransactionIsolation metode
Avatar billede runeklausen2 Nybegynder
11. september 2006 - 18:51 #4
Den er bygget i Jbuilder2006, axis, så er det nok servlet

Den køre på en tomcat.

Ok.

Jeg har aldrig rigtig haft tid til at sætte mig ind i det omkring liggende omkring web-services, jeg ved bare at jeg laver mine services, deployer war-filen på tomcat server, og så køre det :)
Avatar billede arne_v Ekspert
11. september 2006 - 19:33 #5
Med Axis kan man angive om der er en enkelt instans, en instans per session
eller en instans per request.

public synchronized void noget() {
  ...
}

er ikke sikker hvis det er per request.

private static Object lck = new Object();
public void noget() {
    synchronized(lc)k) {
        ...
    }
}

er sikker på alle 3.
Avatar billede arne_v Ekspert
11. september 2006 - 19:33 #6
men con.setTransactionIsolation var altså et oplagt valg
Avatar billede runeklausen2 Nybegynder
11. september 2006 - 19:35 #7
oki, jeg prøver at lege med den i morgen, point?
Avatar billede arne_v Ekspert
11. september 2006 - 19:41 #8
gerne

menvent da med at acceptere til det virker
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