Создание потока в WebLogic

#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, и это волшебным образом работает. Спасибо!