首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >websphere中的Spring commonj.Workmanager

websphere中的Spring commonj.Workmanager
EN

Stack Overflow用户
提问于 2012-01-20 00:59:50
回答 1查看 11.4K关注 0票数 4

在websphere中运行spring的workmanager任务执行器时收到异常。以下是我的代码

代码语言:javascript
复制
<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中的代码

代码语言:javascript
复制
@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());
    }

现在,当我执行我的代码时,它在workmanager.schedule(work)方法上给出了stackoverflow异常

stackoverflow异常

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 19:17:55

如何在IBM Websphere (WS)应用服务器上设置和使用Spring WorkManagerTaskExecutor

(作者: Yosi Lev)

当在WS-AS下开发应用程序时,您必须运行线程,您应该创建并使用名为“Work-Manager”的特殊WS内部资源。这是在IBM Websphere应用服务器下运行托管线程的方法。

遵循以下步骤:首先,在Websphere上定义一个工作管理器资源,然后在Spring中连接并使用它:

登录到WS管理console

  • Select:资源定义异步beans工作范围managers.

  • Select server+cell

  • Press
  1. -> ->
  2. ->a Work-manager

还要定义您的工作管理器JNDI名称,

例如: wm/taskex11

  • In spring-config-file.xml添加一个如下所示:

代码语言:javascript
复制
    <bean id="myTaskExecutor" 
       class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
      <property name="workManagerName" value="wm/taskex11" />
    </bean> 

注意!

代码语言:javascript
复制
   See the "workManagerName" property value.
代码语言:javascript
复制
   The most important thing here, is to define the same Work-manager JNDI name you 
代码语言:javascript
复制
   specified in the Websphere admin console on stage 5 (above).
代码语言:javascript
复制
   This is how Spring work-manager knows which WS JNDI it should locate 
代码语言:javascript
复制
   to exploit WS defined resource.

这似乎是在IBM WS AS下运行托管线程的唯一方法。

  1. 由于您在Spring中定义了这个(阶段6)基础bean,因此可以将其注入到您的

注入任何其他bean或资源时使用的其他应用程序bean:

代码语言:javascript
复制
@Autowired
private WorkManagerTaskExecutor workManagerTaskExecutor;

  1. 创建一个Runnable对象并将其提供给workManagerTaskExecutor的execute()

方法:

代码语言:javascript
复制
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);

祝好运,

Yosi Lev

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8930098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档