2012-04-16 2 views
7

OSB를 실행하는 다수의 웹 로직 노드에서 실행되는 복제 캐시가 있습니다. 캐시는 서버와 함께 시작 클래스로 시작됩니다. 부울 애트리뷰트 "available"를 사용하여 단순히 사용 중인지 여부를 추적하는 매우 간단한 캐시 개체를 가지고 있습니다.Oracle Coherence : 복제 된 캐시의 호출 호출에 대한 시간 초과를 설정하는 방법은 무엇입니까?

OSB에서 나는 객체를 사용할 수없는 것으로 표시하고 Thread.sleep (31000)을 실행하는 프로세서로 캐시에서 "호출"을 호출하는 동일한 클래스로 Java 콜 아웃을 만들고 있습니다. 나중에 추가하고 싶은 오랜 처리를위한 자리 표시 자입니다.

invoke() 호출에 너무 오래 걸리면 프로세스가 시간 초과되어 반환되거나 예외가 throw됩니다. 그래서 나는 이것을 테스트하기 위해 30000 밀리 초의 요청 타임 아웃을 설정하려고 시도해 왔습니다. 불행히도 나는이 타임 아웃을 어떻게 만드는지 알 수 없다.

나는 시도했다 :

  • 가 캐시에>는 <replicated-scheme/에 요소> 30000 </request-timeout<request-timeout>를 추가하기 PriorityProcessor에 프로세서를 포장하고 호출하기 전에 setRequestTimeout (30000)()를 호출 구성

  • <tasktimeout> 30000 </tasktimeout>을 <replicated-scheme/> e 캐시 설정에 lement

  • <replicated-scheme/에> 30000 </guardian-timeout<guardian-timeout을> 추가>를 <service에 캐시 설정

  • 또한 Tangosol-일관성-override.xml 만들기 및 추가 보호자-시간 제한 <init-param>의 요소 > 요소의 "type"이 캐시의 서비스 "name"과 일치하는지 확인합니다.

  • sleep.sleep (310000)에 대한 sleep() 호출을 변경하여 5시 이후에 기본값이 실행되는지 확인합니다. 의사록.

아무런 결과가 없기 때문에 프로세서가 잠시 기다렸다가 아무런 오류없이 반환됩니다.

이전에 비슷한 일을 한 사람이 있습니까? 어떤 조언을 해 줄 수 있습니까? 대단히 감사하겠습니다.

감사

제임스

답변

2

확인, 그래서 나는 Tim Middleton의 도움으로 답을 가지고있다.

기본적으로 복제 된 캐시는 시간 초과를 지원하지 않으며 어쨌든 내 시스템에 적합한 선택이 아니라는 사실이 밝혀졌습니다!

해결 방법은하십시오 <distributed-cache

  1. 스위치> 캐시 설정에서 계획.
  2. 번호가 1보다 큰 구성표에 <thread-count> 요소를 추가하십시오 (10을 선택했지만 지원하려는 동시 인스턴스가 많습니다).
  3. EntryProcessor를 랩핑하고 invoke()를 호출하기 전에 setRequestTimeoutMillis()를 사용하여 시간 초과를 설정하려면 PriorityProcessor을 사용하십시오. (이것이 내가 시도한 첫 번째 문제이지만, 잘못된 종류의 캐시로 밝혀졌습니다.)
관련 문제