Поток закрыт до завершения программы

Я использую причальный сервер для приема звонков от http-клиентов.

Я использую объект BufferedWriter для записи файла журнала для отладки.

Сервер всегда работает, чтобы принимать звонки.

Как я могу сказать программе, что она закрывает поток (log_file.close) только при остановке сервера?

Я не должен останавливать сервер, но до того, как программа завершится (например, когда я коснусь кнопки завершения), как я могу закрыть файл потока в этой точке?


person Michael A    schedule 19.02.2012    source источник
comment
Где вы используете объект BufferedWriter? Внутри какого-нибудь веб-приложения на Jetty?   -  person hakyer    schedule 19.02.2012
comment
Я использую его в своем классе Startup как объект класса (Startup содержит мой основной метод, и я инициализирую его в этом main: _logWriter = new BufferedWriter (new FileWriter (log_file.txt));   -  person Michael A    schedule 19.02.2012
comment
Итак, если я вас правильно понял - вы хотите послушать, не завершился ли какой-то другой процесс?   -  person hakyer    schedule 19.02.2012
comment
Когда серверный процесс завершается, но вопрос в том, будет ли он иметь отношение к объекту Bufferedstream, который создается и используется в основном процессе (а не в составе сервера)   -  person Michael A    schedule 19.02.2012


Ответы (2)


Если ваш код выполняется внутри веб-приложения (также известного как война), вы можете (и на самом деле это лучшая практика) реализовать ServletContextListener и зарегистрировать его в своем web.xml.

В contextInitialized вы можете выполнять необходимые операции инициализации.

В contextDestroyed можно закрыть поток.

person Tarlog    schedule 19.02.2012

Если вы используете встроенный Jetty, у вас есть несколько вариантов.

Вы не указали версию Jetty, поэтому я не могу дать вам точный код, но у вас есть следующие варианты:

  • Зарегистрируйте объект «LifeCycle» на сервере и реализуйте stop метод в этом объекте жизненного цикла, который закрывает ваш файл журнала. (Используя что-то вроде addLifeCycle или addBean, в зависимости от версии Jetty)

  • Добавить поток завершения работы в JVM (Runtime.addShutdownHook)

person Tim    schedule 20.02.2012