2012-01-19 4 views
2

websphereのworkmanagerタスク実行プログラムをSpringの実行中に例外を受け取りました。 次は、今、私は私のコードを実行していたときに、それは方法websphereのSpring commonj.Workmanager

stackoverflowの例外workmanager.scheduleで(仕事を)stackoverflowの例外を与えている私のコード

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

内のコードです

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

WS-ASの下でアプリケーションを開発し、あなたがスレッドを実行する必要がある場合のIBM WebSphereの下で春WorkManagerTaskExecutorとDの仕事(Yosiレフによる)(WS)アプリケーションサーバ

、あなたは特別なWS内部リソースを作成して使用する必要があります「ワークマネージャー」と呼ばれています。 これは、IBM Websphereアプリケーションサーバーで管理対象スレッドを実行する方法です。

に次のステージに従ってください。最初、WebSphere上およびそれ以降の作業マネージャーのリソースを定義し、春にそれを接続して使用します。
1.ログインWS管理コンソールに
2.選択:リソース - >非同期bean - >ワークマネージャー。
3.また、例えば
をあなたのワーク・マネージャのJNDI名を定義するワークマネージャを定義

5. [新]ボタンを押し
4.スコープ・サーバ+セルを選択:WM/taskex11

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

注:春-CONFIG-file.xml 6.次のように追加します!
「workManagerName」プロパティ値を参照してください。
ここで重要なのは、ステージ5(上記)のWebsphere管理コンソールで指定されている同じWork-manager JNDI名
を定義することです。
これは、WSの定義済みリソースを利用するために、どのWS JNDIを
に配置するかをSpringの作業マネージャが知る方法です。

これは、IBM WS ASで管理対象スレッドを実行する唯一の方法です。

@Autowired 
private WorkManagerTaskExecutor workManagerTaskExecutor; 


:あなたは春に定義されているこの(ステージ6)赤外線Beanを持っているとして、あなたは、他のBeanまたはリソースを注入として
7.あなたの
他のアプリケーション豆に注入することができます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

関連する問題