Spring Commonj.Workmanager в веб-сфере
Получение исключения во время работы исполнителя задач workmanager из Spring в Websphere. Ниже мой код
<bean id="workManager" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/MyWorkManager"/>
<property name="resourceRef" value="false"/>
</bean>
<bean name="myWorkManager" class="com.spring.test.services.concurrent.ConcurrentWorkManager" />
<bean name="myWorkListener" class="com.spring.test.services.concurrent.ConcurrentWorkListener" />
Код в моем ConcurrentWorkManager
@Autowired
private WorkManagerTaskExecutor workManager;
@Autowired
private WorkListener myWorkListener;
if(workList==null){
throw new WorkException("There are no works present in worklist to do work");
}
ArrayList<WorkItem> workItems = new ArrayList<WorkItem>();
for(Work work : workList){
workItems.add(workManager.schedule(work,myWorkListener));
}
workManager.waitForAll(workItems,WorkManager.INDEFINITE);
for(WorkItem work:workItems){
ConcurrentWorker worker=(ConcurrentWorker)work.getResult();
resultString.add(worker.getResult());
}
Теперь, когда я выполняю свой код, он дает исключение stackru в методе workmanager.schedule(work)
исключение stackru
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:202)
1 ответ
Как установить и работать с Spring WorkManagerTaskExecutor на сервере приложений IBM Websphere (WS)
(Йоси Лев)
Когда вы разрабатываете приложения под WS-AS и вам нужно запускать потоки, вы должны создать и использовать специальный внутренний ресурс WS под названием "Work-Manager". Это подход для запуска управляемых потоков на сервере приложений IBM Websphere.
Придерживайтесь следующих этапов: сначала определите ресурс Work-Manager в Websphere, а затем подключите и используйте его в Spring:
1. Войдите в административную консоль WS.
2. Выберите: Ресурсы -> Асинхронные компоненты -> Менеджеры работ.
3. Выберите сервер области + ячейка
4. Нажмите кнопку [новый]
5. определить работу менеджера
также определите ваше имя JNDI менеджера по работе,
например: wm / taskex11
6. В spring-config-file.xml добавьте следующее:
<bean id="myTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/taskex11" />
</bean>
НОТА!
Смотрите значение свойства "workManagerName".
Самое важное здесь, это определить то же имя JNDI менеджера работ, которое вы
указано в административной консоли Websphere на этапе 5 (выше).
Вот как Spring Work-Manager знает, какой WS JNDI он должен найти
использовать WS определенный ресурс.
Кажется, это единственный способ запустить управляемые потоки в IBM WS AS.
7. Поскольку у вас есть этот (этап 6) инфра-бин, определенный весной, вы можете добавить его в свой
другие компоненты приложения при добавлении любого другого компонента или ресурса:
@Autowired
private WorkManagerTaskExecutor workManagerTaskExecutor;
8. Создайте объект Runnable и предоставьте его для метода executeManagerTaskExecutor.
метод:
Runnable r1 = new Runnable(){
@Override
public void run() {
for(int i = 0 ; i < 100;i++){
logger.info("run() method of Runnable. i=["+i+"], thread:["
+ Thread.currentThread().getName()+"]");
try {
Thread.sleep(500L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}//run
};//anonymous
workManagerTaskExecutor.execute(r1);
workManagerTaskExecutor.execute(r1);
Удачи,
Йоси Лев