2014-06-23 2 views
1

우리는 다음과 같은 주석에 의해 생성 된 타임 아웃 방법 타이머 실행하는 @Singleton의 EJB 있습니다 : 그것은 단지 클러스터 된 서버의 단일 인스턴스에서 실행됩니다EJB3,1 타이머가 두 서버 인스턴스에서 모두 실행되는 이유는 무엇입니까?

@Schedule(hour = "*", minute = "*/5", second = "0") 
public void processCodes() { 

오랫동안,하지만 지금 두 인스턴스를 모두 실행해야하므로 중복 작업이 발생합니다.

우리는과 같이, '지속'추가 : 그가 기본해야하는데에도 불구하고

@Schedule(hour = "*", minute = "*/5", second = "0", persistent = true) 
public void processCodes() { 

합니다. 두 서버에서 계속 실행됩니다. 클러스터가 제대로 생성되었는지 확인해야하는 서버 설정이 있습니까?

무엇을 시도해야할지 또는 다음에 어디에서 볼지에 대한 제안은 크게 감사하겠습니다. 감사합니다. Peter

+0

Application Server의 * 공급 업체 * (IBM Websphere, Oracle Glassfish 등)는 무엇입니까? –

+0

죄송합니다. WebSphere 8.0.0.6. – Risser

답변

1

기본적으로 EJB 컨테이너는 서버 관련 데이터베이스를 사용하여 영구 타이머를 보관합니다. 클러스터 된 (네트워크가 배치 된) 환경에서는 공통 데이터베이스를 가리키는 데이터 소스를 사용하도록 EJB 컨테이너를 구성해야합니다. 이를 수행하는 가장 쉬운 방법은 사용자 정의 데이터 소스를 사용하도록 EJB 타이머 서비스를 구성하는 것이지만 사용자 정의 데이터 소스와 함께 사용자 정의 스케줄러를 사용하도록 EJB 타이머 서비스를 구성 할 수도 있습니다. 지식 센터의 Configuring a timer service for network deployment 주제에 자세한 정보가 있습니다.

+0

그래서 기본적으로 대답은 몇 가지 구성 없이는 할 수 없다는 것입니다. 그것은 이전에 일하는 것이 우연 이었다는 것을 의미합니다. 정보를 가져 주셔서 감사합니다. 감사! – Risser