/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problem med servlet sender sider til forke~
Fra : Sørensen


Dato : 07-07-05 22:02

Hej

Systemet, som bruges intenst af 6 personer består af servletter, sender
sommetider en side til en forkert bruger - man oplever det som om man
pludselig "får en andens data på skærmen".

Systemet afvikles på linux under Apache Tomcat/5.0.27, java version 1.3.06.

Det er måske lidt specielt, men når man er logget på, anvendes der kun én
sessions-variabel (via metoderne getAttribute og setAttribute), - Denne
variabel er en instans af en klasse indeholden en masse data.

Jeg har ikke før hørt om problemet, - men jeg håber på at der er nogen som
har en idé om hvad jeg kunne kigge efter

pft. Sørensen



 
 
Frederik Hansen (08-07-2005)
Kommentar
Fra : Frederik Hansen


Dato : 08-07-05 06:38

Hejsa

> pludselig "får en andens data på skærmen".

Det lyder som om der er en race-condition.. Har du nogle
static-variable? Eller member/class-variable, altså variabler uden for
methoden?

> Det er måske lidt specielt, men når man er logget på, anvendes der kun én
> sessions-variabel (via metoderne getAttribute og setAttribute), - Denne
> variabel er en instans af en klasse indeholden en masse data.

Mmh, nu har jeg ikke den store erfaring i servlets, men hvis du gør
noget ligende som dette:

private SessionInformation sessionInfo;

void doPost(...)
{
sessionInfo = getAttribute("theData");

doIt();
}

void doIt()
{
response.write(sessionInfo.getName());
}

Så vil jeg tro at det vil være problemet (at du gemmer SessionInfo i en
member variable imellem to metoder.. Det kan jo være at der er to bruger
der nøjagtigt samtidigt trykker på et link, for hvilken sessionInfo er
så den "aktive"? nummer 1 eller 2? Hvis du ikke kender til en løsning,
kunne en nem være at argument overfører SessionInformation til doIt, i
stedet for at bruge member variable..

Håber det hjælper.

Venlig hilsen
Hansen

kimtiede@gmail.com (08-07-2005)
Kommentar
Fra : kimtiede@gmail.com


Dato : 08-07-05 09:42

Sørensen wrote:
> Hej
>
> Systemet, som bruges intenst af 6 personer består af servletter, sender
> sommetider en side til en forkert bruger - man oplever det som om man
> pludselig "får en andens data på skærmen".
>
> Systemet afvikles på linux under Apache Tomcat/5.0.27, java version 1.3.06.
>
> Det er måske lidt specielt, men når man er logget på, anvendes der kun én
> sessions-variabel (via metoderne getAttribute og setAttribute), - Denne
> variabel er en instans af en klasse indeholden en masse data.
>
> Jeg har ikke før hørt om problemet, - men jeg håber på at der er nogen som
> har en idé om hvad jeg kunne kigge efter
>
> pft. Sørensen
>
>

Det lyder som om, at dine servlets ikke er trådsikre...

Prøv at se på denne artikel:
http://www.javaworld.com/javaworld/jw-07-2004/jw-0712-threadsafe.html

Bedste hilsener

Kim Tiedemann

Sørensen (14-07-2005)
Kommentar
Fra : Sørensen


Dato : 14-07-05 22:55

Tak til Frederik og Kim for jeres bud på problemet med at en bruger
pludselig får en anden brugers data på skærmen.
Jeg har finkæmmet servletsne og fandt ingen instansvariable, men en "public
static final String" variable i en Servlet, og denne bruges i en anden
Servlet. Jeg kan godt se at det ligner noget rod - Mon det kan have været
årsagen?
Jeg retter det i al fald nu, og ser så hvad brugerne så oplever.
vh Sørensen



Michael Rasmussen (14-07-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 14-07-05 23:53

On Thu, 14 Jul 2005 23:54:49 +0200, Sørensen wrote:

> Tak til Frederik og Kim for jeres bud på problemet med at en bruger
> pludselig får en anden brugers data på skærmen. Jeg har finkæmmet
> servletsne og fandt ingen instansvariable, men en "public static final
> String" variable i en Servlet, og denne bruges i en anden Servlet. Jeg kan
> godt se at det ligner noget rod - Mon det kan have været årsagen?
> Jeg retter det i al fald nu, og ser så hvad brugerne så oplever. vh
> Sørensen
Et godt råd: Hav aldrig public variable i servlets! Brug altid get-ere og
set'ere i dine klasser, når der skal læses/skrives til variable.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Søg
Reklame
Statistik
Spørgsmål : 177449
Tips : 31962
Nyheder : 719565
Indlæg : 6408120
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste