2014-04-05 1 views
0

WebSphere 7 클러스터 환경 (각각 1 개의 서버가있는 2 개의 상자) 내에서 30 초마다 Java 메소드를 실행해야합니다. 동시성 문제를 피하면서이를 수행하기위한 최선의 방법은 무엇입니까?WebSphere 7에서주기적인 Java 태스크를 스케줄하는 방법은 무엇입니까?

몇 가지 추가 정보 : 오라클 데이터베이스에 정확히 한 번 트위스트 될 레코드가 있습니다. 두 배나 번쩍 거리면 나쁜 일이 일어날 것입니다.

public synchronized void BatchTwiddle() { 

    List myList = findRecordsToBeTwiddled(); 
    twiddleRecords(myList); 
} 


public void twiddleRecords(myRecords myList) { 

    ListIterator<myRecord> myRecordsIterator = myList.listIterator(); 

    while (myRecordsIterator.hasNext()) { 
     myRecordsIterator.next().twiddleRecord(); 
    } 
} 

어떻게 (2 총)이 여러 서버에게이 연루 때 BatchTwiddle()는 30 초마다 호출받을 수 있나요 :

그래서 나는 이런 식으로 뭔가를 상상 해요? 하나의 서버에서 실행하는 것이 가장 좋습니다.

지금까지 WebSphere Scheduler 개념을 사용하거나 ScheduledExecutorService를 사용하거나 EJB 타이머를 사용해 보았지만 아직 확실한 것은 없습니다.

+0

'ScheduledExecutorService'의 문제점은 무엇입니까? – fge

+0

@fge - 솔직히 모르겠습니다. 저는 Java에 충분히 익숙합니다. ScheduledExecutorService가 내 문제를 해결하는 것처럼 보이지만, 문제를 해결할 수있는 최선의 방법인지 아니면 큰 아키텍처 문제가 있을지는 알 수 없습니다. – john3103

+0

'ScheduledExecutorService' Just Works (tm)에서 아키텍처 문제가 발생하는 이유는 없습니다. 다른 솔루션과 달리 OS 시간 변경에 민감하지 않습니다. – fge

답변

0

노드 구성을 사용하여 어떤 노드가 태스크를 실행해야하는지 알 수 있습니까? 그러면 다음과 같은 구조를 만듭니다.

if(shouldRun(THIS_NODE_NAME)) { 
    //do job... 
}