Avatar billede michaell Nybegynder
10. maj 2008 - 12:06 Der er 8 kommentarer og
1 løsning

Reader/writer synchronization

Jeg er ved at lave et Java program, som skal samle omsætningstal fra fem forskellige kasseapparater/computere og vise en omsætningsoversigt i en tabel.

Kasseapparatet er indrettet således, at det hver gang der sælges en vare, åbnes en simpel tekstfil og der tilføjes en salgslinje i slutningen af filen. Det er denne fil som mit program læser.

Selvom disse filer aldrig bliver større end 100 kb, tager det alligevel ca. 1 sekund at læse filen, da det foregår over netværk.

Kan der opstå problemer, hvis vi nu forestiller os at mit program er ved at læse en af disse filer, og mens den gør det, forsøger kasseprogrammet at åbne filen og tilføje en ny salgslinje?

Det er jo i denne sammenhæng super vigtigt at der ikke går nogle salgsdata tabt.
Avatar billede arne_v Ekspert
10. maj 2008 - 15:18 #1
Jeg tror at der kan gå mange ting galt.

En database ville være langt bedre til at håndtere samtidigheds problemerne.

Hvis du hænger på filer, så skal du sikre dig at dit program ikke låser filen
for kasseapperaterne. Måske var det bedre hvis dit program arbejdede på en kopi ??
Avatar billede michaell Nybegynder
10. maj 2008 - 15:30 #2
Ja, en database vil helt klart være at foretrække, men sagen er den at det ikke er mig, der har udviklet kasseprogrammet, så det kan der desværre ikke laves om på.

Det med en kopi har jeg overvejet, men så er jeg vel stadig nød til åbne filen for at kunne kopiere den? Eller har du nogen idéer?
Avatar billede arne_v Ekspert
10. maj 2008 - 15:35 #3
Jo. Men hvis den kopi kunne laves lokalt (ikke over netværk), så burde det kunne gå
meget hurtigere.

En anden mulighed var at bruge et eller andet til at synkronisere adgangen til filen, men
jeg fornemmer lidt at det heller ikke er en mulighed p.g.a. der ikke kan ændres
på den anden app.
Avatar billede arne_v Ekspert
10. maj 2008 - 15:36 #4
Har du testet om den version af Java du bruger + det netværks software du bruger til
at læse filerne rent faktisk låser filen, så der ikke kan skrives tild en ?

(det er jo helt platform specifikt)
Avatar billede michaell Nybegynder
10. maj 2008 - 16:36 #5
Butikkerne som kasseapparaterne står i, er en del af kæde, hvor kasseprogrammet er udviklet på hovedkontoret, så nej, jeg kan ikke ændre på kasseprogrammet.

Jeg har testet med følgende kodestump. Når programmet "går i stå" ved beskedboksen, kan jeg uden problemer åbne tekstfilen i notepad og tilføje et par linjer og gemme igen. Jeg bruger Java 5 på Windows XP. Kasseapparaterne kører Windows XP og 2000.

try
{
    BufferedReader br = new BufferedReader(new FileReader("trans.txt"));

    for (int i = 0 ; i < 20 ; i++) // Læs lidt af filen
        br.readLine();
   
    JOptionPane.showMessageDialog(null, "Luk filen");

    br.close();
}
catch (Exception e)
{
    e.printStackTrace();
}
Avatar billede _carsten Nybegynder
10. maj 2008 - 16:56 #6
En mulighed var måske at lade dit program lytte til hvornår filen senest er ændret vha. lastModified() (måske hvert sekund) og så læse hurtigst muligt efter filen er ændret, der er sikkert mere end et sekund mellem hver gang kasseapparatet skriver til filen.

lastModified kaster en SecurityException hvis filen er låst, men kan jo håndteres

Ved det ikke - bare et forslag.
Avatar billede arne_v Ekspert
10. maj 2008 - 18:47 #7
notepad---lokal hard disk---java

er ikke nødvendigvis en god test for:

X app---netværks drev---java
Avatar billede michaell Nybegynder
12. maj 2008 - 21:23 #8
Jeg har valgt den løsning som _carsten foreslog, og det fungerer faktisk udmærket. Smider du ikke lige et svar, så du kan få pointene...
Avatar billede _carsten Nybegynder
12. maj 2008 - 21:59 #9
Svar
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