2014-02-28 1 views
1

jboss 7에서 호스팅되는 infinispan의 명명 된 캐시에 대한 구성 설정을 테스트하고 있습니다. 어디서나 캐시에 액세스 할 수 있도록 REST 서버 API 구현을 사용하고 있습니다. 다음은 구성 파일입니다.Infinispan namedCache 만료일

<infinispan> 
    <namedCache name="keydata"> 
     <!-- http://infinispan.org/docs/5.2.x/user_guide/user_guide.html#_expiration_2 --> 
     <expiration lifespan="1000" reaperEnabled="true" /> 
    </namedCache> 
</infinispan> 

이제 모든 항목이 정상적으로 작동하고 인스턴스가 시작되고 캐시가 만들어집니다. REST API를 사용하여이 항목의 캐시에 새 항목을 푸시 할 수 있습니다. 내 문제는 그들이 절대로 만료되지 않는 것입니다. 그것이 일어날 때 내 로그에서 볼로 사신은 기본적으로 60 초마다 깨어 나면처럼 보이는 :

09:15:05,920 TRACE [EvictionManagerImpl] (Scheduled-eviction-thread-0) 
    Purging data container of expired entries 
09:15:05,920 TRACE [EvictionManagerImpl] (Scheduled-eviction-thread-0) 
    Purging data container completed in 0 milliseconds 

나는 다음 GET으로 서버를 공격하는 경우, 캐시 된 값이 돌아옵니다. 내가 그 일을 할 때 흔적이있다.

09:17:10,451 TRACE [InvocationContextInterceptor] (http-localhost/127.0.0.1:8280-1) 
    Invoked with command GetKeyValueCommand {key=user123, flags=null} and 
    InvocationContext [[email protected]2b77b3f2] 
09:17:10,451 TRACE [EntryFactoryImpl] (http-localhost/127.0.0.1:8280-1) 
    Exists in context? null 
09:17:10,451 TRACE [EntryFactoryImpl] (http-localhost/127.0.0.1:8280-1) 
    Retrieved from container ImmortalCacheEntry{key=user123, value=ImmortalCacheValue 
    {[email protected]}} 
09:17:10,451 TRACE [CallInterceptor] (http-localhost/127.0.0.1:8280-1) 
    Executing command: GetKeyValueCommand {key=user123, flags=null}. 
09:17:10,451 TRACE [GetKeyValueCommand] (http-localhost/127.0.0.1:8280-1) 
    Found value [email protected] 

나는 계속 파고 들겠지만, 나는 호기심이 많다. 누구도 전에 이것을 보았습니까? 정의 된 수명을 가진 명명 된 캐시에 ImmortalCacheEntry 항목을 삽입하는 이유는 무엇입니까?

위의 XML 설정 파일에서 언급 한 문서를 보면 누구나 제안하기 전에 맞춤법 오류가 있습니다. XML 태그에서 속성의 실제 철자를 알 수있는 유일한 방법은 org.infinispan.configuration.parsing.Parser52 클래스의 소스를 직접 살펴 보는 것입니다.

감사합니다.

편집 :

내가 infinispan 소스 코드를 파고와 org.infinispan.container.InternalEntryFactoryImpl에서 볼 오전 :

@Override 
public InternalCacheEntry create(Object key, Object value, EntryVersion ignored, long lifespan, long maxIdle) { 
    if (lifespan < 0 && maxIdle < 0) return new ImmortalCacheEntry(key, value); 
    if (lifespan > -1 && maxIdle < 0) return new MortalCacheEntry(key, value, lifespan); 
    if (lifespan < 0 && maxIdle > -1) return new TransientCacheEntry(key, value, maxIdle); 

    return new TransientMortalCacheEntry(key, value, maxIdle, lifespan); 
} 

VersionedInternalEntryFactoryImpl 같은 보인다. 내 평생 가치를 얻고 있다는 것을 알고 있습니다.

난 그냥 뭔가 흥미로운 것을 발견 : 뇌 ...

편집이 아파 .... 내가 항목을 만들 때,이 참조 : 그것은 결국 내 수명 값을받지처럼

09:46:49,639 TRACE [EntryFactoryImpl] (http-localhost/127.0.0.1:8280-1) 
    Creating new entry. 
09:46:49,639 TRACE [CallInterceptor] (http-localhost/127.0.0.1:8280-1) 
    Executing command: PutKeyValueCommand{key=user123, 
    [email protected], flags=null, 
    putIfAbsent=false, lifespanMillis=-1000, maxIdleTimeMillis=-1000, successful=true}. 

가 보이는 ...

편집 3 :

내가 이전에 확장하려는 편집하다. 코드를 자세히 살펴보면 REST API 서비스 요청의 추적 값과 비슷하게 보입니다. 특정 헤더를 PUT/POST 요청에 추가하여 명명 된 캐시의 lifespan 및 maxIdle 값을 무시할 수 있습니다. 이러한 선택적 매개 변수를 사용하지 않으므로 추적에 기본값 -1 초가 표시되어 나중에 밀리 초로 변환됩니다. 나는 PUT 요청에 옵션 재정에 전달하면

http://infinispan.org/docs/5.2.x/user_guide/user_guide.html#_headers

아마도 더 실망스럽게도, 그것은 작동한다! 이 설정이 무시되는 이유를 추적 할 수 없습니다. 내가 잘못 입력하면 캐시 구성 빌더가 나에게 소리를 지르기 때문에 제대로 파싱된다는 것을 알고 있습니다.

확실히이 동작을 설정하기 위해 선택적 override를 사용할 수 있지만 REST 서버를 사용하여 신비하게 작동하지 않는 다른 것들이 있습니까?

그리고 ... 나는 아직도 붙어 있습니다.

+0

는 - 내가 말할 수있는 최선 오히려 내가 만든 명명 된 캐시에 구성된 값을 사용하는 것보다 수명 및 maxIdle의 기본 값으로 다시 하락하고 있다는 점이다. – jgitter

+0

가능한 [infinispan 캐시 서버 만료 실패] 중복 (http://stackoverflow.com/questions/14760367/infinispan-cache-server-expiration-failure) – jgitter

답변