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