Как EHCache реализует свои транзакции? - PullRequest
2 голосов
/ 19 октября 2010

Вопрос может показаться расплывчатым, но я пытаюсь понять общую концепцию способности транзакции EHCache.
Предполагается, что я настраиваю EHCache как кэш-память, а также настраиваю его для кэширования MyObject.
Клонирует ли EHCache экземпляр MyObject, который я получаю, если это сделано как часть транзакции?

Я в основном спрашиваю, потому что мне посоветовали (в ответ на мой вопрос ) использовать EHCache, и я беспокоюсь о его влиянии на производительность.MyObject - это объект среднего веса, и я бы предпочел не дублировать его без необходимости.
Кроме того, просто для проверки, EHCache только блокирует запись в объект во время транзакции, верно?

Спасибо,
Итай

1 Ответ

2 голосов
/ 19 октября 2010

Я думаю, что следующая часть документации о поддержке JTA отвечает на большинство ваших вопросов:

Использование JTA Cache

Все или ничего

Если для JTA включен кеш, все операции над ним должны происходить в течение контекст транзакции, в противном случае TransactionRequiredException будет выброшены.

Изменить видимость

Уровень изоляции, предлагаемый в Ehcache. JTA составляет READ_COMMITTED. Ehcache это XAResource. Полная двухфазная фиксация поддерживается.

В частности:

  • Все изменяющие изменения в кэше являются транзакционными , включая put, remove, putWithWriter, removeWithWriter и removeAll.
  • Мутирующие изменения не видны в локальной JVM или в кластере пока COMMIT не был вызван.
  • До этого читайте, например, cache.get(...) другими транзакциями вернет старую копию. читает не блок .

С обратной записью и с записью

Если используется кеш с поддержкой XA с писателем, операции записи будут быть в очереди до фиксации транзакции время. Исключительно сквозной подход будет иметь свой потенциал XAResource участвовать в той же транзакции. Оставленная запись, хотя и поддерживается, должна вероятно, не будет использоваться с XA Кэш транзакций, как операции никогда не будет частью того же сделка. Ваш писатель также будет ответственность за получение нового сделка ...

Использование сквозной записи с не XA ресурс тоже будет работать, но есть нет гарантии, что сделка будет успешно после операции записи есть был успешно выполнен. На С другой стороны, любое выброшенное исключение во время этих операций записи будет вызвать транзакцию назад, имея UserTransaction.commit() бросить RollbackException.

Что касается производительности, я бы не стал сильно беспокоиться, если бы ваш объект весил сотни МБ. Но если это действительно проблема, измерьте вещи (как всегда).

...