Как узнать, когда приложение Java EE не развернуто? - PullRequest
2 голосов
/ 23 июля 2010

Мне нужно закрыть некоторые потоки, когда мое приложение Java EE не развернуто, чтобы избежать страниц исключений в server.log каждый раз, когда я отменяю развертывание. Исключения говорят: «Входной поток был завершен или принудительно закрыт без явного закрытия». Я знаю, как закрыть (с помощью метода close ()), но я не знаю когда.

finallize () приходит слишком поздно, @PreDestroy вызывается не только перед удалением, но и в обычном режиме работы. Как приложение узнает, когда оно не развернуто?

Edit: Я называю это при создании:

    decisionLogger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(
    ksession, 
    config.getString("rules.logfilename"), 
    config.getInt("rules.loginterval"));

SolutionLogger имеет тип KnowledgeRuntimeLogger, который имеет только метод close (). Нет добытчика для нити, которая работает под капотом. Чтобы аккуратно закрыть его, мне нужно вызвать метод close, но когда?

Ответы [ 2 ]

3 голосов
/ 23 июля 2010

Трудных и быстрых ответов нет, потому что Java EE включает в себя множество технологий с различными жизненными циклами.

Но я собираюсь сделать удар в темноте и предложить вам взглянуть на ServletContextListener .Это сообщит вам, когда ваше веб-приложение будет остановлено, а это, вероятно, время, когда вы хотите освободить ресурсы, а не при удалении приложения.

2 голосов
/ 23 июля 2010

Добавьте метод finalize () в регистратор или любой другой класс, вызывающий проблемы.Закройте потоки от этого.Если вы не выйдете с System.exit (), он запустится.Если вызывается System.exit, вы можете использовать Runtime.addShutdownHook

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...