Spring Commonj.Workmanager в веб-сфере - PullRequest
3 голосов
/ 19 января 2012

Получение исключения при запуске исполнителя задач 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());
    }

Теперь, когда я выполняю свой код, он дает исключение stackoverflow в методе workmanager.schedule (work)

исключение stackoverflow

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 Ответ

6 голосов
/ 12 января 2014

Как установить и работать с Spring WorkManagerTaskExecutor на сервере приложений IBM Websphere (WS)

(Йоси Лев)

При разработке приложений под WS-AS и при запуске потоков,Вам следует создать и использовать специальный внутренний ресурс WS под названием «Work-Manager».Это подход к запуску управляемых потоков на сервере приложений IBM Websphere.

Придерживайтесь следующих этапов: сначала определите ресурс Work-Manager в Websphere, а затем подключите и используйте его в Spring:
1. Войдите в административную консоль WS
2. Выберите: Ресурсы -> Асинхронные компоненты -> Менеджеры работы.
3. Выберите сервер области + ячейка
4. Нажмите кнопку [new]
5. определите Work-manager
также определите ваше имя JNDI Work-manager,
например: wm / taskex11
6. В spring-config-file.xml добавьте a следующим образом:

    <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) инфра-компонент, определенный в Spring, вы можете внедрить его в
другие компоненты приложения, как вы вводите любой другой компонент или ресурс:

@Autowired
private WorkManagerTaskExecutor workManagerTaskExecutor;


8. Создайте объект Runnable и передайте его методу execute ()
метода workManagerTaskExecutor:

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);


Удачи,
Йоси Лев

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...