2012-01-19 49 views
2

在websphere中运行spring的workmanager任务执行程序时收到异常。 下面是我的代码Spring commonj.Workmanager in 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()); 
    } 

现在,当我执行我的代码是在workmanager.schedule给计算器异常(工作)法

计算器例外

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) 

回答

5

如何设置与在IBM的Websphere春WorkManagerTaskExecutor(WS)应用服务器

(由Yosi列弗)d工作

在开发下WS-AS应用程序,你必须运行的线程,应该创建并使用一个特殊的WS内部资源称为“工作经理”。 这是在IBM Websphere应用程序服务器下运行托管线程的方法。

坚持以下几个步骤:第一,确定在WebSphere和后一个工作管理资源,连接和使用它的春天:
1.登录到WS管理控制台
2.选择:资源 - >异步bean - >工作管理器。
3.选择范围服务器+细胞
4.按[新]按钮
5.定义工作管理器
还定义工作管理器JNDI名称,
例如:WM/taskex11
6.在弹簧配置-file.xml添加如下:

<bean id="myTaskExecutor" 
     class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor"> 
     <property name="workManagerName" value="wm/taskex11" /> 
    </bean> 

注意!
请参阅“workManagerName”属性值。
这里最重要的是定义与您在阶段5(上面)的Websphere管理控制台中指定的
相同的工作管理器JNDI名称。
这就是Spring工作管理器如何知道应该使用哪个WS JNDI来定位
以利用WS定义的资源。

似乎这是在IBM WS AS下运行托管线程的唯一方法。
7.你有这样的(阶段6)在春文所定义的豆,你可以注入到你的
其他应用豆你注入任何其他Bean或资源:

@Autowired 
private WorkManagerTaskExecutor workManagerTaskExecutor; 


8。创建一个Runnable对象,并把它提供给workManagerTaskExecutor的execute()
方法:

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利

+0

很好的解释。谢谢 !! –

+0

这是一个很好的解释。我能够解决这个很长的回来,但没有检查这个论坛。谢谢 。 – Fryder