Мне нужно закрыть некоторые потоки, когда мое приложение Java EE не развернуто, чтобы избежать страниц исключений в server.log при каждом разворачивании. Исключения говорят: «Входной поток был завершен или принудительно закрыт без явного закрытия». Я знаю, как закрыть (с методом close()), но я не знаю, когда.Как узнать, когда приложение Java EE не развернуто?
finallize() приходит слишком поздно, @PreDestroy вызывается не только перед развёртыванием, но и в нормальном режиме работы. Как приложение знает, когда оно не развернуто?
Edit: Я называю это во время создания:
decisionLogger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(
ksession,
config.getString("rules.logfilename"),
config.getInt("rules.loginterval"));
decisionLogger имеет тип KnowledgeRuntimeLogger, который имеет метод только близко(). Отсутствует геттер для потока, который работает под капотом. Чтобы закрыть его мягко, мне нужно вызвать метод close, но когда?
можете ли вы подключиться к функции undeploy сервера приложений, который вы каким-то образом используете? Я не уверен, что приложение может узнать, было ли оно незанято. Вы также можете попытаться проглотить исключения, которые бросают потоки, когда вы используете потоки в коде. –
Я использую Glassfish 2.1. Как вы можете подключиться к функции undeploy? Проглатывание Исключения не является вариантом, потому что у меня нет доступа к потоку, который их бросает. Он скрыт в реализации Drools. – Arne