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?
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...)
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).
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?
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>
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 !
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 ?
Synes godt om
Ny brugerNybegynder
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.