2015-11-12 2 views
2

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

Панель приборов будет выглядеть ниже. Всего студентов: 120.

Последние регистрации:

UserA [TimeStamp]

UserB [TimeStamp]

... ..

мне потребуется следующее для обеспечения моя система работает нормально.

  1. Обязательно убедитесь, что пользователь привязан к базе данных. Я не уверен, что метод 0SonSave() гарантирует фиксацию базы данных.
  2. afterTransactionCompletion звучит как вызванное после транзакции совершенной/откатанной, но не дает мне объект , который я бы использовал для обновления кеша.
+0

В чем вопрос? –

+0

Вопрос в том, какой из параметров onSave() или afterTrasactionCompletion подходит для моей работы? Или есть лучший подход. –

ответ

0

Так вместо того, чтобы найти место, где студенты будут сохранены в большой базе кода, я думал, что ввести перехватчик или слушателей (так как все приложение использует спящий режим).

Я думаю, это довольно странно. В любой большой базе кода у вас должно быть только одно место, где ученики будут сохранены в БД: StudentRepository. Этот репозиторий можно ввести с помощью вашего экземпляра UnitOfWork и что UnitOfWork должен иметь метод addAfterTransactionHandler(). Я считаю, что это решает вашу проблему.

+0

Ну, моя большая база кода (по существу разные системы, таким образом, jvms) следуют различным методам кодирования (не обязательно ориентированным на домен дизайна). И странно? Да, это старый код, и я не хочу прикасаться к ним. Также addAfterTransactionCommit() (я думаю, вы имели в виду, что) имеет Transaction, переданную ему. а не сущность, которую я мог бы использовать. Как мне это получить? Будучи перехватчиком, это будет вызвано многими другими коммитами. –

+0

@ TheNeoNoirDeveloper я вижу. Итак, вы находитесь в трудном положении;) BTW, я не уверен, что шаблон репозитория принадлежит только DDD. Обычно используется [ISP] (https://en.wikipedia.org/wiki/Interface_segregation_principle) (отдельные запросы к базе данных от остальной части кода). –

Смежные вопросы