Разработвам уеб приложение на Java. Приложението се свързва с индекс на Lucene. Създавам единичен екземпляр на IndexSearcher. Този екземпляр отваря някои файлове. Когато преразпределя уеб приложението, файловете, отворени от по-ранния екземпляр на IndexSearcher, продължават да остават отворени и друг екземпляр се създава от преразпределеното приложение. След няколко преразпределения системата започва да хвърля изключение „твърде много отворени файлове“. Бих искал да затворя стария екземпляр преди повторно разполагане, така че старите файлове да бъдат затворени, но не мога да разбера как да направя това? Има ли директива в web.xml, която се извиква при un-deploy, подобно на load-on-startup? Изпълнявам уеб приложението на jboss сървър.
Извикване на метод при премахване на разгръщането от уеб приложение на Java
Отговори (2)
Внедрете ServletContextListener
.
@WebListener
public class LuceneConfig implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Do your job here during webapp startup.
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// Do your job here during webapp shutdown.
}
}
Ако все още не сте на Servlet 3.0 (който обаче вече е излязъл от 2 години), тогава трябва да премахнете анотацията @WebListener
и да я регистрирате ръчно в web.xml
, както следва:
<listener>
<listener-class>com.example.LuceneConfig</listener-class>
</listener>
person
BalusC
schedule
18.11.2011
Тук работи без да го регистрирате. Използване на Mojarra 2.3.3 на Payara 4.1 (173 компилация).
- person Roland; 05.11.2017
Разбира се, че ще работи добре. Payara 4.x е базиран на Servlet 3.1. Тогава
@WebListener
ще работи добре. Както беше отговорено, няма да работи, когато все още не сте на Servlet 3.0. JSF impl/version е без значение, тъй като не играе роля тук. Уместна е само версията на Servlet.
- person BalusC; 05.11.2017
Ако внедрите javax.servlet.ServletContextListener
и регистрирате този клас в web.xml
като <listener>
, тогава методът contextDestroyed()
ще бъде извикан, преди контекстът да бъде разтоварен.
person
Ramon
schedule
18.11.2011