Пользовательская тема на Weblogic Server 11g

Мне нужен пользовательский threda на моем сервере weblogic; Я не могу использовать TimerEJB или Delayed MDB, поскольку мне нужно использовать 3d-библиотеку.

Я знаю, что пользовательские потоки на сервере приложений не приветствуются; вот соответствующий пост (4 года): Почему не рекомендуется создавать потоки в контейнере Java EE?

Это все еще не рекомендуется? Могу ли я использовать ExecutorService или кварц? Или я должен рассмотреть только commonj и рабочий менеджер?

1 ответ

Решение

В Weblogic 11g (EJB3.0) рекомендуется создавать "собственного исполнителя потоков" (см. Также спецификацию Java EE и многопоточность), которые вы должны использовать:

  • TimerService

пример:

MyEjb {
   @Stateless
   public class TimerBean implements TimerRemote {

    @Resource
    TimerService service;

    @Override
    public void startTimer() {
        Timer timer = service.createTimer(1000,  1000, null);
        System.out.println("Timers set");
    }

    @Timeout
    public void handleTimeout(Timer timer) {
        System.out.println("Handle timeout event here...");
    }
}

** Если вы не можете использовать Deleyed MDB или TimerService, вам нужно работать с Work Manager **.

Weblogic и Websphere совместимы с CommonJ ( JSR 237 Timer & WorkManager); другими словами, они используют общий интерфейс для работы с менеджером работы; в weblogic рабочие менеджеры регулируют жизненный цикл потоков (Servlet, EJB, MDB,..., пользовательские потоки).

ИМХО не использовать ExecutorService поскольку weblogic не находится под контролем: если вы остановите приложение (не сервер), то потоки, находящиеся под контролем weblogic, остановятся, остальные потоки не должны завершаться; Я испытал эту проблему.

Руководитель работ

Функция WorkManager в WebLogic Server по своей природе является динамической и основана на количестве входящих запросов, размер пула потоков автоматически изменяет размеры для максимизации пропускной способности. Для работы с WorkManager вы можете получить доступ через интерфейс commonj или MBean.

пример:

InitialContext ic = new InitialContext();
commonj.work.WorkManager wm = (WorkManager);
ic.lookup(‘java:comp/env/wm/default’); // default work manager

весна

Например, у Spring есть простой способ прикрепить свой собственный TaskExecutor к comonj worker manager:

<bean id="workManager" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
        <property name="workManagerName" value="java:comp/env/wm/default" />
    </bean>

кварцевый

Кварц работает на серверах приложений, а с весны они могут использовать менеджер работ

JAVA EE 7

JEE7 представляет пакет ( JSR 352). Пакетные приложения для Java Platform API (Batch) предоставляют модель программирования для пакетных приложений и среду выполнения для планирования и выполнения заданий.

Исполнитель Сервис

Из спецификации Java:

Также новым в платформе Java EE 7 является пакетный API, который предоставляет модель программирования для пакетных приложений и среду выполнения для планирования и выполнения заданий, а также API-интерфейс Concurrency Utilities, который предоставляет асинхронные возможности с помощью службы управляемого исполнителя, управляемого запланированного исполнителя,

В JEE7 Executor Service был расширен с ManagedExecutorService а также ManagedThreadFactory,

пример:

   javax.naming.InitialContext ctx = new InitialContext();
   ManagedExecutorService mes = (ManagedExecutorService)
       ctx.lookup("java:comp/env/concurrent/ThreadPool");

   // Create a set of tasks to perform the account retrieval.
   ArrayList<Callable<MyObject>> retrieverTasks = new ArrayList<Callable<MyObject>>();
   retrieverTasks.add(new MyCallable());

Заключение: Weblogic

См. http://www.oracle.com/technetwork/java/restrictions-142267.html

Другие вопросы по тегам