Bonjour à tous !

J'ai récemment créer des web services qui ont pour mission de retourner des fichiers générés au niveau du serveur (fichier générés par l'appel au web service).

Ces Web services sont déployés sur un serveur TOMCAT 5.5 avec AXIS 1.3

mes web services sont du style:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
public DataHandler generateFile(){
MyConfig myConf = new MyConfig(); //classe perso créant un dossier temporaire sur le serveur ou les fichiers temporaires sont générés
...
DataHandler ret = new DataHandlern(new FileDataSource(myConf.monfichier));
return ret; // retourne les fichiers générés
}
le problème est que je voudrais que les fichiers générés au niveau du serveur soient supprimés après l'appel du Web service, c'est à dire après l'envoi du fichier.

J'ai alors tenté d'utiliser un bloc: try ... finally a la fin de la méthode du Web service, comme ce qui suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
try{
return ret;
}finally{
myConf.cleanUpFolders(); // méthode détruisant le dossier temporaire avec tout les fichiers qu'il contient
}
Mais ça ne fonctionne pas (FileNotFoundException) au niveau du serveur -> il semble que le fichier devant être envoyé a été supprimé (j'imagine un certain problème de synchro, ou alors c ptet que je n'ai pas tout compris au try ... finally)

Donc deuxième solution, j'ai rajouté un destructeur dans ma classe MyConfig:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
public void finalize(){
cleanUpFolders();
}
Le problème ici est que l'appel au destructeur ne se fait QUE lorsque je redémarre le serveur (et un serveur n'est pas fait pour être redémarrer toutes les heures )

Connaitriez vous une solution pour que mes web services envoient les fichiers (ce qu'ils font actuellement) ET détruisent les fichiers temporaires ?

Merci pour votre aide !