ОК, я думаю, что нашел решение всех этих проблем.Надеюсь, это может помочь кому-то еще.
Сначала вам нужно обновить ehCache и добавить терракотовые банки в ваш путь к классам, чтобы иметь возможность работать с терракотой.Это означает, что вам нужно удалить ehcache.jar, поставляемый с Railo, так как это старая версия, которая не работает с терракотой.Банки:
- ehcache-core - ##. ##. ##. Jar (##. ##. ## - версия)
- ehcache-terracotta-##. ##. ##. jar
- slf4j-api - ##. ##. ##. jar
- slf4j-jdk14 - ##. ##. ##. jar
- slf4j-log4j12 - ##. ##. ##. Jar
- terracotta-toolkit-1.3-runtime - ##. ##. ##. Jar
- УДАЛИТЕ «ehcache.jar» из библиотеки Railo lib, иначе Terracotta не будет загружаться.
Далее вам нужно добавитьа такжестроки вашего ehcache.xml, который должен быть в вашем пути к классам.Это хорошо задокументировано на веб-сайте Terracotta.
ehCache использует ContextClassLoader () для загрузки всех классов, в случае сбоя, в случае сбоя на ClassLoaderUtil.Railo contextClassLoader () по умолчанию имеет значение «org.apache.catalina.loader.WebappClassLoader» (Tomcat ClassLoader).Этот загрузчик классов не смог правильно найти объекты railo, поэтому вам нужно изменить его на «railo.loader.classloader.RailoClassLoader».Поскольку это загрузчик класса контекста для каждого потока (т. Е. Для запроса), вам нужно вызвать следующую команду в начале вашего метода onRequestStart ():
<cfset getPageContext().getThread().currentThread().setContextClassLoader( getPageContext().getClass().getClassLoader() ) />
Это должно исправить ehcache и hibernate.Следующие сессии, использующие клапан Tomcat с Terracotta, кажутся проблемой, потому что клапан, кажется, вызывается до того, как Railo обработает запрос.Поэтому используется «org.apache.catalina.loader.WebappClassLoader» и создается исключение не найденный класс.Обходным путем для этого является сохранение самого сеанса в ehcache и Terracotta с его распределением по кластеру.Проблема состоит в том, что объекты, хранящиеся в терракоте, должны быть сериализуемыми, а сеанс J2EE основан на «org.apache.catalina.connector.SessionFacade», который не сериализуем.Поэтому, чтобы обойти это ограничение, я просто преобразовал сеанс J2EE в простую структуру, которая сериализуема, используя команду structCopy (session), и поместил полученную структуру в ehcache.
Это должно быть в состояниичтобы поехать с Терракотой и Рейло.