2012-01-19 3 views
2

websphere에서 봄의 workmanager 태스크 실행 프로그램을 실행하는 중 예외 수신. 다음 내 코드 내 ConcurrentWorkManager에서websphere의 Spring commonj.Workmanager

<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" /> 

코드 이제

@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

(Yosi 레로) IBM 웹 스피어에서 봄 WorkManagerTaskExecutor (WS) 응용 프로그램 서버

와 D 작업

WS-AS에서 응용 프로그램을 개발하고 스레드를 실행해야 할 때, 생성 및 특별 WS 내부 리소스를 사용한다

'Work-Manager'라고 불렀습니다. IBM Websphere 응용 프로그램 서버에서 관리되는 스레드를 실행하는 방법입니다.

부착합니다 다음 단계에 : 첫째, 웹 스피어에 그 후 작업 관리자 자원을 정의, 봄에 연결하여 사용 :
1. 로그인 WS 관리 콘솔
2. 현황 : 자원 -> 비동기 bean -> 작업 관리자.
3. 예를 들어
의 [새] 버튼을
5. 또한 워크 관리자 JNDI 이름을 정의
업무와 관리자를 정의 범위 서버 + 세포
4. 선택 : WM/taskex11
봄 - 설정 - file.xml 6. 다음과 같은 추가 :

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

참고!
"workManagerName"속성 값을 참조하십시오.
여기에서 가장 중요한 것은 5 단계 (위)에서 Websphere 관리 콘솔에 지정된 동일한 작업 관리자 JNDI 이름
을 정의하는 것입니다.
이것은 스프링 워크 매니저가 WS 정의 된 리소스를 이용하기 위해
을 찾아야하는 WS JNDI를 알고있는 방법이다.

IBM WS AS에서 관리되는 스레드를 실행할 수있는 유일한 방법입니다.

@Autowired 
private WorkManagerTaskExecutor workManagerTaskExecutor; 


: 당신은 봄에 정의 된이 (단계-6) 적외선 콩이 당신이 다른 콩이나 자원을 주입으로
7. 당신은 당신의
다른 응용 콩에 주입 할 수 있습니다 8.의 Runnable 객체를 생성하고 그것을 제공하는 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); 


행운을 빕니다,
Yosi 레프

+0

좋은 설명. 감사 !! –

+0

이것은 좋은 설명입니다. 이 긴 문제를 해결할 수 있었지만이 포럼을 확인하지 않았습니다. 고맙습니다 . – Fryder

관련 문제