28. oktober 2004 - 14:42Der er
2 kommentarer og 1 løsning
cache problem eller lign.
Jeg har de sidste par dage oplevet et sært problem.
Jeg får "forældet" data data ud af databasen. Når jeg henter data på én PC gennem min Java applikation , får jeg data som databasen var før ændringer. Åbner jeg en ny PC får jeg de nyeste og aktuelle data, samtidig med PCén ved siden af stadig viser de gamle data
Jeg ved ikke om det kan skyldes at jeg henter data ind i java objekter og de caches af enten server eller lign. Men problemet løser sig IKKE ved at lukke browseren ned og starte forfra.
Serveren ligger på et webhotel og er en Resin med MySQL DB.
Det er ligesom det ikke er sket før nu, men jeg har oplevet i flere tilfælde inden for den seneste uge, i uafhængeige og forkskellige dele af koden.
kan DB data være cahcet, eller er det på objekter på serveren?
Nogen der har oplevet noget lign. eller evt. har en forklaring?
Jeg har en klasse DBUtils der "holder styr på" databaseadgangen. Den indeholder en række metoder der står for at åbne og lukke connection , udtrække resultsets og pakke dem i relevante datastrukturer. f.eks arrayLists og HashMaps.
Et eksempel.
jeg har en servlet der genererer et excel ark på med hkjælp fra apache.POI pakken. servletten kører og henter data ind gennem DBUtils i arrayList indholdende HashMaps.
f.eks.
ArrayList list = DBUtils.selectFromWhere("*","users","user_id>1");
herefter generes diverse POI objekter og excel filen skrives til serveren.
hvis jeg så kører nedenstående servlet, skrives excelarket fint. Herefter opdater jeg gennem et andet interface databsen. og jeg kan se i DB at ændringerne har fundet sted.
Hvis jeg så sletter excel filen på serveren og kører servletten igen, generes excelfilen med data fra før opdateringer. Eftersom jeg kan se at DB er ændret, undrer det mig hvor den får de gamle data fra. De må være chachet et eller andet sted.
kører jeg servletten fra en anden PC dog, genreres excel filen på bagrund af de nye data. Så cahcen må være relateret ti den enkelte brugersession. Men jeg har prøvet at lukke browser ned, slette cahce osv. og det gør ingen forskel. Først vist man vender tilbage f.eks dagen efter får man de nye data i excel filen.
Jeg har andre steder i min kode oplevet det samme hvor det virker som om at DB kaldene får forældet data ud.
try{ // Create a New XL Document HSSFWorkbook wb = new HSSFWorkbook(); // Make a worksheet in the XL document created HSSFSheet sheet = wb.createSheet();
//lav den første linie HSSFRow topRow = sheet.createRow((short)0); //lav celler med topværdier HSSFCell TOP_user_id = topRow.createCell((short)0); TOP_user_id.setCellValue("ID"); HSSFCell TOP_fnavn_id = topRow.createCell((short)1); TOP_fnavn_id.setCellValue("FIRS TNAME"); HSSFCell TOP_enavn_id = topRow.createCell((short)2); TOP_enavn_id.setCellValue("LAST NAME"); HSSFCell TOP_email_id = topRow.createCell((short)3); TOP_email_id.setCellValue("E-MAIL"); HSSFCell TOP_brugernavn_id = topRow.createCell((short)4); TOP_brugernavn_id.setCellValue("USERNAME");
//hent grunddata fra user_profile ArrayList users = DBUtils.selectFromWhere("*","user_profile","user_id > 0 ORDER BY user_id"); HSSFCell cell = null; for (int x = 0; x < users.size() ; x++ ) { //grunddata
boolean member = DBUtils.relationExistsGroupUser(group_id , user_id); cell = row.createCell((short)(13+y));
cell.setCellValue(member); }
}
// The Output file is where the xls will be created FileOutputStream fOut = new FileOutputStream(outputFile); // Write the XL sheet wb.write(fOut); fOut.flush(); // Done Deal.. fOut.close(); //System.out.println("File Created ..");
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.