2017-02-09 4 views
0

컨테이너화할 Java 응용 프로그램이 제공되었습니다.Tomcat Docker 이미지에서 ehcache가 작동하지 않습니다.

응용 프로그램은 현재 Tomcat8 JRE8 AWS Elasticbeanstalk 인스턴스에서 실행 중입니다.

그러나 OpenJDK8 및 Tomcat8이 설치된 Amazon Linux 기본 이미지에서 RPM을 통해 설치된 Docker 이미지에 응용 프로그램을 배포 할 수 없습니다.

전개 에러으로 Ehcache에 관한 것이다 :

Error creating bean with name 'getEhcache' defined in *****: Invocation of init method failed; nested exception is net.sf.ehcache.CacheException: Error configuring from input stream. Initial cause was null:16: Element <cache> does not allow attribute "maxEntriesLocalHeap". 

I 이해 사용되고으로 Ehcache하고으로 Ehcache 버전 간의 구성 불일치가있는 경우 오류가 일반적으로 발생하는 것을 maxEntriesLocalHeap 버전 2.10에 도입 된, 즉 것을 버전 2.10을 사용할 수없는 경우이 오류가 발생합니다.

내가 응용 프로그램 페이로드에 확인했습니다, 그리고 올바른 항아리로 볼 수 있습니다 :

개발자는 응용 프로그램으로 Ehcache의 이전 버전을 따기 내게 말했지만, 한
bash-4.2# pwd 
/var/lib/tomcat8/webapps/ROOT/WEB-INF/lib 
bash-4.2# ls -la ehcache-* 
-rw-rw-r-- 1 root root 8914463 Jan 24 12:27 ehcache-2.10.2.jar 
-rw-rw-r-- 1 root root 1006074 Jan 24 12:27 ehcache-core-2.4.5.jar 
-rw-rw-r-- 1 root root 124522 Jan 24 12:27 ehcache-spring-annotations-1.2.0.jar 

나는 볼 수 없습니다 바닐라 도커 이미지에서 이것이 가능한 방법. 나는 그것이 실행될 때 Docker 컨테이너에서 권한이나 파일 시스템 액세스와 관련이있는 것으로 만들어지는 가짜 오류라고 생각합니다. 응용 프로그램과 함께 제공

ehcache.xml 파일은 다음과 같습니다

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="ehcache.xsd" 
    updateCheck="true" 
    monitoring="autodetect" 
    dynamicConfig="true"> 

<diskStore path="java.io.tmpdir"/> 

<cache name="messageCache" 
     maxEntriesLocalHeap="10000" 
     maxEntriesLocalDisk="1000" 
     eternal="false" 
     diskSpoolBufferSizeMB="20" 
     timeToIdleSeconds="43200" timeToLiveSeconds="43200" 
     memoryStoreEvictionPolicy="LFU" 
     transactionalMode="off"> 
    <persistence strategy="localTempSwap"/> 
</cache> 

어떤 도움을 주시면 감사하겠습니다.

답변

1

Ehcache는 역사의 과정에서 항아리의 이름을 변경했습니다. 귀하의 클래스 경로에 ehcache-core-2.4.5.jarehcache-2.10.2.jar이 모두 충돌하는 것입니다.

첫 번째 가능성이 가장 높기 때문에 먼저이 잘못된 속성 오류가 발생합니다. 대부분의 경우 ehcache-core-2.4.5.jar을 제거해야하지만 Ehcache는 항상 2.x 줄에서 이전 버전과의 호환성을 유지하려고 시도했지만 다른 종속성이 필요할 수도 있습니다.

+0

답변이 정확합니다. 부수적으로, 나는 당신이라면'updateCheck'을 false로 바꿀 것입니다. – Henri

+0

의미가 있지만, 이것이 ElasticBeanstalk 인스턴스의 문제는 아니지만 Docker 컨테이너의 문제 인 이유에 대해 궁금합니다. –