В Weblogic 11g (EJB3.0) рекомендуется создать «собственный исполнитель потока» (см. Также Спецификация Java EE и многопоточность) следует использовать:
пример:
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