web-dev-qa-db-fra.com

Meilleure pratique pour stocker des données temporaires pour une webApp

Mon nouveau projet est capable de générer des documents avec des informations d'une base de données.

Je copie donc le modèle de document à la demande d'un dossier temporaire pour un utilisateur et de le modifier. Je fais cela parce que chaque modèle doit être disponible pendant la modification.

Ensuite, l'utilisateur est attribué avec son document via un lien de téléchargement de My WebApp.

Ma question: Y a-t-il une meilleure pratique pour stocker des données WebApp? Je pensais que Temp serait gentil pour ça. Mais puisque je dois supprimer les données moi-même, je pensais placer à part mon dossier de guerre dans le dossier WebApp Tomcat.

J'utilise Windows 2003 comme système hôte avec Tomcat. J'utilise Grails, Java et Maven pour mon projet ... Je ne sais pas si cette information est nécessaire.

Edit :
La principale raison pour laquelle je demande à cette question triviale est ... Si je prends soin de créer/supprimer mes données temporaires ... Est-ce toujours une bonne pratique d'utiliser le dossier Temp sur le système? Je ne suis pas certain de cela...

28
bastianneu
  • Stockage des informations dans le dossier d'applications Web ne fonctionne pas toujours. Certains serveurs d'applications n'élargissent pas le fichier de guerre déployé et il n'y a donc pas de "répertoire de travail" pour une application Web. Certains administrateurs SYS empêchent également les applications Web Accès au système de fichiers (qui dépend des politiques du gestionnaire de sécurité).
  • Les fichiers temporaires doivent être utilisés pour, bien, données temporaires. Données qui peuvent être reconstruites à la demande. N'utilisez pas de fichiers temporaires qui doivent être téléchargés par les utilisateurs. Par exemple. Lorsque votre système pense qu'il doit nettoyer les fichiers temporaires ou lorsque vous redémarrez le serveur d'applications, l'utilisateur souhaite toujours télécharger ces fichiers bien qu'ils puissent être supprimés dans la période moyenne.
  • Le bon endroit pour stocker de telles données est la base de données. Vos documents ne sont pas vraiment temporaires dans les moyens de fichiers temporaires. Utilisez une base de données pour stocker les documents et utiliser la base de données comme cache pour les documents. Vous pouvez ensuite implémenter votre propre stratégie de nettoyage. Il sert également de stockage persistant, vous n'avez donc pas à vous soucier des redémarrages du serveur. De plus, vous pouvez avoir des méta-données supplémentaires à cet endroit, telles que le dernier temps d'accès ou un compteur d'accès et fournir facilement à l'utilisateur une liste de documents qu'il a créés. Si votre bibliothèque de traitement de documents nécessite un Java.io.File Pour la manipulation, alors que vous stockez uniquement le document de la base de données dans un fichier Temp, démarrez le traitement et lisez-le dans la base de données.
13
mhaller

Un conteneur Web fournit un attribut de contexte qui pointe vers un répertoire temporaire:

Servlet Spec SRV.3.7.1 Annuaires de travail temporaires

Un répertoire de stockage temporaire est requis pour chaque contexte de servlet. Les conteneurs de servlet doivent fournir un répertoire temporaire privé par contexte de servlet et la rendre disponible via - servleContext.tempdir (javax.servlet.context.tempdir) Attribut de contexte. Les objets associés à l'attribut doivent être de type java.io.file.

Exemple :

File appTempDir = getServletContext().getAttribute(ServletContext.TEMPDIR);
File tempFile = File.createTempFile("process1", ".txt", appTempDir);
tempFile.deleteOnExit();
try {
    ...
} finally {
    tempFile.delete();
}
7
weberjn

Je crois que les fichiers temporaires appartiennent à un dossier temporaire. Dans votre cas, vous supprimez les fichiers vous-même, mais de quoi s'il existe un bogue dans l'opération de suppression de fichier? Ou de quoi s'il y a une fermeture de serveur avant que les fichiers soient supprimés? Si vous écrivez dans un dossier temporaire, vous espérez au moins que les fichiers seront nettoyés ultérieurement (manuellement ou par un processus).

Même lorsqu'une application souhaite stocker des données persistantes (non temporaires), je pense qu'il ne devrait toujours pas être stocké dans le répertoire Tomcat, car ces répertoires ont tendance à être supprimés ou écrasés chaque fois que vous déployez une nouvelle version de votre application (ou même Installez une nouvelle version de Tomcat).

Méthodes utiles:

5
Eli Acherkan