#multithreading #weblogic12c
#многопоточность #weblogic12c
Вопрос:
У меня есть приложение, работающее на WebLogic 12.2.1. Это приложение состоит из веб-сервисов JAX-RS. Мне нужно создать фоновый поток для периодической очистки файлов, созданных веб-службами. Каков был бы правильный способ сделать это? Я знаю, как создавать потоки в автономных Java-программах, но никогда не делал этого в приложениях J2EE.
Ответ №1:
Взгляните на службу таймера JEE http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html
Пример реализации:
import javax.ejb.Schedule;
import javax.ejb.Singleton;
@Singleton
public class Timer {
// Triggers every 30 seconds from 6PM till 6AM
@Schedule(second = "*/30", minute = "*", hour = "18-6", dayOfWeek = "*", dayOfMonth = "*", month = "*", year = "*", info = "Timer", persistent = false)
public void produce() {
LOGGER.info("Sending Signal");
// Do Stuff
}
}
Комментарии:
1. Привет, спасибо за ответ. Как создать экземпляр класса Timer в веб-приложении? Указано ли это в web.xml ?
2. Я не создаю его экземпляр сам, это то, что сервер приложений делает автоматически. Это хорошая часть аннотаций, вам не нужна конфигурация xml.
3. Но как сервер приложений вообще узнает о существовании этого класса? Конечно, вам пришлось бы где-то указать этот класс, чтобы сервер приложений знал об этом.
4. Сервер приложений сканирует все классы на наличие аннотаций типа @Schedule, это происходит во время запуска / развертывания приложения. Это одна из причин, по которой развертывание приложения занимает некоторое время. Попробуйте создать веб-приложение (war-файл) только с этим классом и посмотрите вывод на консоль, это действительно так просто
5. ХОРОШО, я поместил это в файл WAR, и это волшебным образом работает. Спасибо!