Реальная проблема заключается в том, что документация Ehcache не верна - даже не близка - к тому, как она на самом деле реализована. Благодаря регистрации и просмотру кода в модуле jmsreplication я смог заставить его работать.
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory"
properties="initialContextFactoryName=com.InitialContextFactory;
userName=uname;password=passwd;
replicationTopicConnectionFactoryBindingName=TCF;
replicationTopicBindingName=CACHE;
providerURL=tcp://server1:7222,tcp://server2:7222;
getQueueConnectionFactoryBindingName=QCF;
getQueueBindingName=CACHE_LOAD
"
propertySeparator=";"
/>
Еще одна вещь, которая поразила меня, была проста, как только я это понял - вам нужно реализовать свой собственный генератор ключей, чтобы гарантировать, что Ehcache сохраняет объекты с одинаковыми ключами на каждой JVM. Это имеет смысл, когда вы думаете об этом.
Да, вы должны поместить информацию об очереди загрузчика в cacheManagerPeerProviderFactory. Это связано с тем, что, если вы запускаете процесс после его запуска, новый процесс может предварительно загрузить кэш из существующего процесса.
Вы настраиваете запросчик загрузчика (cacheLoaderFactory) с точно такими же настройками:
<cacheLoaderFactory
class="net.sf.ehcache.distribution.jms.JMSCacheLoaderFactory"
properties="initialContextFactoryName=com.InitialContextFactory;
userName=uname;password=passwd;
replicationTopicConnectionFactoryBindingName=TCF;
replicationTopicBindingName=CACHE;
providerURL=tcp://server1:7222,tcp://server2:7222;
getQueueConnectionFactoryBindingName=QCF;
getQueueBindingName=CACHE_LOAD
"
propertySeparator=";"
/>