[Java/Webservices] resources worden niet vrijgegeven

Pagina: 1
Acties:

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Momenteel heb ik een zelfgemaakte, zeer eenvoudige webservice draaien. Deze service heeft 1 method die iets naar een locale file schrijft. Deze webservice wordt op 'Systinet Server voor Java' gedeployed.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class BillingService {

    private static final float PRICE_TIMEUNIT = 0.01f; 
    
    public BillingService() {}
    
    public void calculatePrice(float time) {
        
        float t = time * PRICE_TIMEUNIT;
        
        try {
            FileWriter _billing = new FileWriter("h:\\billing.txt", false);
        
            _billing.write(Float.toString(t));
            _billing.flush();
            _billing.close();
        }
        catch(IOException ex) {
            ex.printStackTrace();
        }
    }
}


Deze service runt perfect, ware het niet dat mijn file nog steeds gelocked is nadat de webservice afgelopen is. Met als resultaat dat ik zelfs deze file niet kan openen (behalve door eerst eens te kopieren).

Zoals jullie zien wordt mijn file wel degelijk geclosed.

Weet soms iemand hoe ik resources terug kan vrijgeven die door webservices gebruikt worden. Waarschijnlijk zal deze file enkel terug vrijgegeven worden op het moment dat mijn webservice instance opgeruimd wordt. Maar daar heb ik zelf geen controle over dacht ik.

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:39

gorgi_19

Kruimeltjes zijn weer op :9

.

[ Voor 97% gewijzigd door gorgi_19 op 23-11-2006 16:49 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Zowiezo zou ik de close in een finally clause zetten, zodanig dat die file ook gesloten wordt als er een exceptie gegooid wordt.
Waarschijnlijk zal deze file enkel terug vrijgegeven worden op het moment dat mijn webservice instance opgeruimd wordt.
Ik hoop maar dat dit niet waar is... Dat zou eigenlijk ook maar gezever zijn.
Je sluit je file zelf, dus die close moet er dan voor zorgen dat de resources vrijgegeven worden.

[ Voor 54% gewijzigd door whoami op 23-11-2006 17:25 ]

https://fgheysels.github.io/


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
In ieder geval, als ik mijn server (die als een service draait in windows) stop, dan wordt mijn file wel gereleased.

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Ben je zeker dat er geen exceptie gegooid wordt, maar dat je ze niet ziet ?

https://fgheysels.github.io/


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Het zou mij erg verwonderen dat op zo een simpele operatie al een exceptie gegooid zou worden, maar ik ga het eens onderzoeken.

Als ik de file gewoon eens copy/paste, dan kan ik die kopie wel openen en zie ik dat de juiste gegevens weggeschreven zijn. Dus waarschijnlijk zal er wel geen exceptie gegooid zijn.

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Het ziet ernaar uit dat het opgelost is. Ik heb nu eens mijn file.close() in de finally gezet en nu werkt het goed.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void calculatePrice(float time) {
        
        float t = time * PRICE_TIMEUNIT;
        FileWriter billing = null;
        try {
            billing = new FileWriter("h:\\billing.txt", false);
            billing.write(Float.toString(t));
            billing.flush();
        }
        catch(IOException ex) {
            ex.printStackTrace();
        }
        finally {
            try {
                billing.close();
            }
            catch(IOException ex) {
                ex.printStackTrace();
            }
        }
    }

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.

Pagina: 1