Мне предоставлено приложение Java для контейнеризации.ehcache не работает в Tomcat Docker image
Приложение в настоящее время работает на экземпляре Tomcat8 JRE8 AWS Elasticbeanstalk.
Однако приложение не удается развернуть в моем изображении Docker, которое построено из базового образа Amazon Linux с OpenJDK8 и Tomcat8, установленным через RPM.
Ошибка развертывания относится к 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".
Я понимаю, что эта ошибка обычно возникает, когда существует несоответствие конфигурации между Ehcache и версией Ehcache используется, а именно, что maxEntriesLocalHeap была введена в версии 2.10, и если версия 2.10 недоступна, эта ошибка произойдет.
Я проверил в полезной нагрузке приложения, и правильная баночка имеется:
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
Разработчик сказал мне, что приложение набирает более старую версию Ehcache, но я не могу видеть как это возможно в ванильном изображении Докера. Я думаю, что это ложная ошибка, создаваемая чем-то связанным с разрешениями или доступом к файловой системе в контейнере 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>
Любая помощь будет оценена.
Ответ правильный. Как побочная заметка, я бы превратил 'updateCheck' в false, если бы я был вами. – Henri
Имеет смысл, но мне любопытно, почему это не проблема в экземпляре ElasticBeanstalk, но проблема в контейнере Docker. –