Использование спящего грязного объекта - PullRequest
1 голос
/ 22 мая 2011

У меня есть Hibernate Entity в моем коде.я выбрал бы это и на основании значения одного из свойств, скажем «isProcessed», продолжил и:

  1. изменил значение «isProcessed» на «Yes» (свойство, которое я проверял)
  2. добавление некоторой задачи в DelayedExecutor.

в моем тесте производительности, я обнаружил, что если я вбиваю функцию, происходит классический сценарий грязного чтения, и я добавляю слишком много задач вИсполнитель, что все они будут выполнены.я не могу использовать проверку равенства объектов в очереди, основываясь на чем-либо, я имею в виду, что java просто выполнит все из них, которые добавлены.

как я могу использовать грязные объекты hibernate, чтобы иметь возможность проверять«isProcessed» перед добавлением задачи исполнителю?это сработает?

надеюсь, что я достаточно выразителен.

1 Ответ

1 голос
/ 23 мая 2011

Если вы можете выполнить все свои запросы для отправки своих задач с использованием одного сеанса, вы, вероятно, можете что-то исправить. Предостережение заключается в том, что вы должны понимать, как работают механизмы кэширования hibernate (да, это множественное число). Кеш первого уровня, связанный с сессией, будет здесь ключевым. Кроме того, важно знать, что выполнение запроса и гидратирование объектов не будут проверять и возвращать объекты из кэша первого уровня ... правая рука не разговаривает с левой рукой.

Итак, чтобы выполнить то, что вы пытаетесь сделать (при условии, что вы можете продолжать использовать одну и ту же сессию ... если вы не можете сделать это, тогда я думаю, что вам не повезло), вы можете сделать следующее:

  1. выполнить ваш запрос
  2. для каждого возвращаемого объекта, перезагрузите его с помощью метода get Session
  3. проверьте флаг isProcessed и отправьте при необходимости

При вызове get вы обязательно получите объект из кэша первого уровня ... где хранятся все грязные объекты, ожидающие сброса.

Для справки, это - чрезвычайно хорошо написанный и полезный документ о кэшировании в спящем режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...