Пользовательский поток на сервере Weblogic 11g

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

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

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


person giusy    schedule 02.02.2014    source источник
comment
Наверное, никто не порекомендует использовать нерекомендуемые вещи, но у меня это работает без проблем на WAS, Tomcat и JBoss. Я никогда не использовал WebLogic, но я не думаю, что он делает что-то особенное с вашими потоками, ваши потоки просто не управляются сервером приложений.   -  person jbaliuka    schedule 08.02.2014
comment
по-прежнему не рекомендуется создавать собственные потоки приложений, но есть и другие способы. Если вы предоставите более подробную информацию о варианте использования, мы сможем предложить альтернативу. Можете ли вы сказать нам, для чего используется специальный поток, зачем он нужен? и какой стек технологий вы используете (Spring / Hibernate, EJB3 ...)?   -  person Angular University    schedule 08.02.2014


Ответы (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 менеджеры работы регулируют жизненный цикл потоков (сервлет, EJB, MDB, ..., настраиваемый поток).

IMHO не используйте 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>

Кварцевый

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

JAVA EE 7

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

Служба исполнителя

Из спецификаций java:

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

В 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

person venergiac    schedule 08.02.2014