Avatar billede carstenknudsen Nybegynder
17. februar 2003 - 12:08 Der er 12 kommentarer

Opdatering af side med jsp og mysql

Jeg har en applikation med nogle jsp sider der bla kan
udveksle beskeder mellem forskellige brugere. Beskederne
lægges i mysql og hives dernæst ud igen når siden opdateres.
Problemet er at når jeg går ind på siderne på mit arbejde
virker det fint, jeg skriver en besked til mig selv og
den kommer umiddelbart frem på listen over beskederne.
Når jeg derimod sidder på web serveren og gør det samme
kommer der godt nok en ekstra besked men den er en
kopi af en af de andre beskeder. Når jeg lige hopper til
en anden side og tilbage er siden korrekt. Jeg benytter
Mozilla browseren dog i forskellige versioner. Hvor
ligger problemet egentlig? Er det browseren eller mine
jsp sider eller  mysql?
Avatar billede erikjacobsen Ekspert
17. februar 2003 - 12:21 #1
Det er vel bare fordi dine sider ligger i cachen i browseren.
Du kan ændre indstillingen i browseren, eller informationer
om cachen i headeren på de sider du sender tilbage (hvis det
altså er derfor...)
Avatar billede arne_v Ekspert
17. februar 2003 - 12:33 #2
Når det virker efter refresh må databasen være OK.

Det må altså være enten browser eller web app.

Jeg har svært ved at tro at en browser kan vise en ny record
med forkerte data (medmindre du laver noget avanceret JS og XML),
så jeg vil foreslå at du starter med at debugge
lidt i din web app.

Forskellen på arbejde og hjemme skulle så forklares med et timing
problem - det virker på en langsom forbindelse (forudsætter at der
er en redirect involveret).
Avatar billede carstenknudsen Nybegynder
17. februar 2003 - 12:48 #3
erikjacobsen: når jeg sender en besked vises beskederne i en tabel
og den har så en række mere, så det kan vel ikke skyldes caching
for siden er blevet sendt igen?
arne_v: der er en redirect efter en update på databasen. Kunne
man forestille sig, at den næste query ikke ser effekten af
update'n selvom de er eksekveret i rigtig rækkefølge?
Avatar billede erikjacobsen Ekspert
17. februar 2003 - 13:09 #4
Så du lyder det mere til at du har lavet en lille programmeringsmæssig fejl.
Avatar billede carstenknudsen Nybegynder
17. februar 2003 - 13:13 #5
erikjacobsen: ja, det er ikke utænkeligt...
Avatar billede arne_v Ekspert
17. februar 2003 - 16:24 #6
Ja. Jeg kan forestille mig to muligheder:

1)  din update er ikke writethrough'et helt til databasen
    og din select får derfor ikke rigtige data

2)  din select henter fra en ikke valid cache

Det er lidt gætværk, da du ikke har skrevet noget om
hvordan du tilgår databasen.
Avatar billede carstenknudsen Nybegynder
17. februar 2003 - 17:09 #7
Databasen (mysql) tilgås gennem <sql:query> og <sql:update>.
Avatar billede arne_v Ekspert
17. februar 2003 - 17:15 #8
Hmmm. Det ligger lidt uden for mit ekspertise område.

Hvilken web container bruger du ?

Hvilket transaction isolation level står databasen connection til ?

Bruger du selv transactions eller er det med autocommit ?
Avatar billede carstenknudsen Nybegynder
26. februar 2003 - 12:49 #9
Jeg benytter tags som herunder til insert, delete og query.
Der benyttes ikke noget eksplicit isolation level.
Det er nok her det kan reparere mine sider.
Hvilket level skal bruges hvis en delete/insert
skal nå at opdatere tabellen i databasen uden
at andre kan nå at læse en halvopdateret tabel,
det er tilsyneladende det der er problemet.
<sql:update>
  INSERT INTO mytable VALUES (?, ?, ?)
  <sql:param value="a"/>
  <sql:param value="b"/>
  <sql:param value="c"/>
</sql:update>
Avatar billede arne_v Ekspert
26. februar 2003 - 13:04 #10
Du kan prøve med transaction isolation level:
  Connection.TRANSACTION_SERIALIZABLE
og se om det hjælper - det er ikke umiddelbart logisk,
at det skulel være nødvendigt, men et eller andet må
du jo gøre for at løse problemet !
Avatar billede carstenknudsen Nybegynder
26. februar 2003 - 15:48 #11
Serializable er det eneste isolation level jeg rent
faktisk har afprøvet og det virkede ikke:(
Avatar billede arne_v Ekspert
26. februar 2003 - 16:26 #12
Tough one.

Det kunne måske være interessant at se om det samme
problem eksisterer med en anden database.

Hvilken version af MySQL JDBC driver bruger du ?
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