Je dois fermer certains flux lorsque mon application Java EE n'est pas déployée pour éviter des pages d'exceptions dans le fichier server.log chaque fois que je ne les déploie pas. Les exceptions disent: "Le flux d'entrée a été finalisé ou forcé fermé sans être explicitement fermé". Je sais comment fermer (avec la méthode close()), mais je ne sais pas quand. Finallize() arrive trop tard, @PreDestroy est appelé non seulement avant le déploiement, mais aussi en mode de fonctionnement normal. Comment l'application sait-elle quand elle n'est pas déployée?Comment puis-je savoir quand une application Java EE n'est pas déployée?
Edit: J'appelle cela lors de la création:
decisionLogger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(
ksession,
config.getString("rules.logfilename"),
config.getInt("rules.loginterval"));
decisionLogger est de type KnowledgeRuntimeLogger qui n'a que la méthode close(). Pas de getter pour le fil qui fonctionne sous le capot. Pour l'éteindre doucement, je dois appeler la méthode proche, mais quand?
pouvez-vous vous connecter à la fonctionnalité de déploiement du serveur d'applications que vous utilisez d'une manière ou d'une autre? Je ne suis pas sûr qu'une application peut savoir si elle n'a pas été déployée. Vous pouvez également essayer d'avaler les exceptions que les flux lancent lorsque vous utilisez les flux dans le code. –
J'utilise Glassfish 2.1. Comment pouvez-vous accrocher dans la fonctionnalité undeploy là? Avaler les exceptions n'est pas une option, parce que je n'ai pas accès au thread qui les lance. Il est caché dans l'implémentation de Drools. – Arne