Avatar billede niwikr Nybegynder
28. oktober 2004 - 14:42 Der 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?
Avatar billede arne_v Ekspert
28. oktober 2004 - 20:05 #1
Hvordan henter du data og hvordan bruger du de Java objekter ?
Avatar billede niwikr Nybegynder
29. oktober 2004 - 10:23 #2
Det sker fler steder.

Men f.eks.

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.

koden til servletten ses nedenfor:

package dk.skow.admintool;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class UserExport extends HttpServlet {



    public void init(ServletConfig config)throws ServletException {
          super.init(config);
    }


    public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

              // If it is a get request forward to doPost()
              doPost(request, response);
    }

    public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

        //for notes
        PrintWriter out = response.getWriter();




        String outputFile=Ini.getSystemUrl()+"admintool/excel/users.xls";

        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");

            HSSFCell TOP_organisation_id = topRow.createCell((short)5);
            TOP_organisation_id.setCellValue("ORGANISATION");
            HSSFCell TOP_jobtitle_id = topRow.createCell((short)6);
            TOP_jobtitle_id.setCellValue("JOB TITLE");
            HSSFCell TOP_address_id = topRow.createCell((short)7);
            TOP_address_id.setCellValue("ADDRESS");
            HSSFCell TOP_postal_id = topRow.createCell((short)8);
            TOP_postal_id.setCellValue("POSTAL_CODE");
            HSSFCell TOP_city_id = topRow.createCell((short)9);
            TOP_city_id.setCellValue("CITY");
            HSSFCell TOP_country_id = topRow.createCell((short)10);
            TOP_country_id.setCellValue("COUNTRY");
            HSSFCell TOP_membership_country_id = topRow.createCell((short)11);
            TOP_membership_country_id.setCellValue("EIRM MEMBERSHIP");
            HSSFCell TOP_expires_id = topRow.createCell((short)12);
            TOP_expires_id.setCellValue("EXPIRES");

            //now get the group names
            ArrayList groups = DBUtils.selectFromWhere("*","phpbb_groups","1");

            for (int x = 0; x < groups.size() ; x++ ) {

                    HSSFCell TOP_groups = topRow.createCell((short)(13+x));
                    HashMap hm = (HashMap)groups.get(x);
                    String name = (String)hm.get("group_name");

                    TOP_groups.setCellValue(name);

            }


            //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

                    HashMap hm = (HashMap)users.get(x);
                    HSSFRow row = sheet.createRow((short)(x+1));

                    cell = row.createCell((short) 0);
                    String ID = (String)hm.get("user_id");
                    cell.setCellValue(ID);

                    cell = row.createCell((short) 1);
                    String  fnavn = (String)hm.get("fnavn");
                    cell.setCellValue(fnavn);

                    cell = row.createCell((short) 2);
                    String enavn = (String)hm.get("enavn");
                    cell.setCellValue(enavn);

                    cell = row.createCell((short) 3);
                    String email = (String)hm.get("email");
                    cell.setCellValue(email);

                    cell = row.createCell((short) 4);
                    String brugernavn = (String)hm.get("brugernavn");
                    cell.setCellValue(brugernavn);


                    //extensiondata


                    ArrayList extraData = DBUtils.selectFromWhere("*","extranetextension","user_profile_id="+ID);

                    HashMap hme = (HashMap)extraData.get(0);

                    cell = row.createCell((short) 5);
                    String virksomhed = (String)hme.get("virksomhed");
                    cell.setCellValue(virksomhed);

                    cell = row.createCell((short) 6);
                    cell.setCellValue((String)hme.get("afdeling"));

                    cell = row.createCell((short) 7);
                    cell.setCellValue((String)hme.get("adresse"));

                    cell = row.createCell((short) 8);
                    cell.setCellValue((String)hme.get("postnummer"));

                    cell = row.createCell((short) 9);
                    cell.setCellValue((String)hme.get("lokation"));

                    cell = row.createCell((short) 10);
                    cell.setCellValue((String)hme.get("land"));

                    cell = row.createCell((short) 11);
                    cell.setCellValue((String)hme.get("mdlland"));

                    cell = row.createCell((short) 12);
                    cell.setCellValue((String)hme.get("dato"));












                    //groupdata
                    for(int y = 0 ; y<groups.size() ;y++ ) {
                          String user_id = ""+ID;
                          HashMap hmg = (HashMap)groups.get(y);
                          String group_id= (String)hmg.get("group_id");

                          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 ..");

        }catch(Exception e) {
            System.out.println("!!BANG!! xlCreate() : " + e );
        }

        out.println(" <head><TITLE>Excel export</TITLE><LINK REL='stylesheet' type='text/css' href='/css/oakstyle.css'></head>");
        out.println("<body><a href='"+Ini.getHomeUrl()+"admintool/excel/users.xls'>click here to download excel-spreadsheet</a><body>");
    }


}
Avatar billede niwikr Nybegynder
03. januar 2006 - 13:05 #3
lukker
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