2012-01-19 47 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