Распределенный кеш Eclipselink устанавливает блокировку. Проблема хорошо известна: https://www.eclipse.org/forums/index.php/t/1097290/.
Следующая строка кода блокирует мои потоки через некоторое время. (Фрагмент кода ниже написан в зависимости Eclipselink)
public class ConcurrencyManager implements Serializable {
/**
* Release the deferred lock.
* This uses a deadlock detection and resolution algorithm to avoid cache deadlocks.
* The deferred lock manager keeps track of the lock for a thread, so that other
* thread know when a deadlock has occurred and can resolve it.
*/
public void releaseDeferredLock() throws ConcurrencyException {
...
while(true)
...
}
}
Я хотел бы иметь локальный (нераспределенный) кэш второго уровня, предназначенный только для чтения, для некоторых таблиц, содержащих переводы, которые никогда не меняются.
Я попытался изменить persistence.xml со следующими атрибутами:
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<validation-mode>CALLBACK</validation-mode>
<properties>
<property name="eclipselink.cache.shared.default" value="true"/>
<property name="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE"/>
<property name="eclipselink.weaving" value="static" />
Я бы хотел иметь кеш запросов второго уровня, но не для общего доступа. Если я отключаю этот кеш, я также отключаю локально.