2017-01-26 16 views
1

У нас есть база данных Oracle, которые содержать данные о некоторых городах и местах и ​​т.д.Singleton модели производятся некоторые проблемы, когда есть некоторые обновления

У нас есть веб-система, которые мы можем управлять этими ДАННЫЕ.

У нас также есть настольное клиентское приложение, которое работает с данными .

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

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

Мы знаем, что проблема есть те Singleton классы, но мы не хотим, чтобы изменить их, потому что это будет огромный накладные расходы в нашей системе, когда они не там. Для решения этой проблемы мы думали о нескольких решениях:

  1. Создание таблицы в базе данных с именами числа столбцов, похожими на наши столбцы данных (города, места и т.д.) и значением автоматического приращения, когда есть обновление для отслеживания (с легким весом)
  2. Использование функциональных возможностей базы данных
  3. a Уведомлять систему, которая уведомляет клиентское приложение всякий раз, когда происходит обновление.
  4. механизм кэширования в базе данных, кэшировать эти в последнее время изменение таблицы и обслуживания наших пользователей, когда они имеют аналогичный запрос

Вот наши стеки:

  • наше настольное приложение является свинг применение
  • Наше веб-приложение JSF
  • Наш бизнес-уровень для JSF и качелей - EJB
  • Наш слой Dao для JSF и качелей Eclipse-Link

Как вы думаете, что лучше всего подходит для решения этой проблемы?

+0

Ваше решение # 3 кажется лучшим вариантом для меня, если данные не меняются слишком часто. – Michael

+0

@Michael проблема заключается в том, что у нас есть отдельные системы, и мы не знаем, как это реализовать. мы также не хотим ставить таймер – Mehdi

+0

«мы понятия не имеем, как реализовать это» не по теме для StackOverflow – Michael

ответ

0

У Oracle есть функция под названием «Уведомление об изменении базы данных», которая может быть использована для уведомления при изменении таблиц с чтением. Похоже, эта функция может быть подходящей для удовлетворения ваших требований. Ссылка на документ - here.

Вкратце, как это работает, тонкий драйвер JDBC в вашем настольном приложении откроет порт, и Oracle Database подключится к этому порту и будет использовать это соединение для push-уведомлений при изменении данных.Затем вы получаете обратный вызов через API-интерфейс event/listener и можете обновлять кеш.

Этот механизм уведомления предназначен для данных, которые читаются главным образом, другими словами, данные, которые не изменяются постоянно, в противном случае было бы нецелесообразно кэшировать данные.

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

  • Нет связанных вопросов^_^