Постоянно извлекать данные из базы данных, используя Java - PullRequest
7 голосов
/ 26 мая 2010

У меня есть сценарий, когда моя Java-программа должна постоянно взаимодействовать с таблицей базы данных, например, моя Java-программа должна получать данные моей таблицы, когда в нее добавляются новые строки во время выполнения. Должна быть постоянная связь между моей программой и базой данных.

Если в таблице изначально есть 10 строк и пользователь добавил 2 строки, он должен обнаружить это и вернуть строки.

Моя программа не должна использовать AJAX и таймеры.

Ответы [ 7 ]

3 голосов
/ 26 мая 2010

Если используемой вами базой данных является Oracle, рассмотрите возможность использования триггеров , которые вызывают хранимую процедуру Java , которая уведомляет вашего клиента об изменениях в БД (с использованием JMS , RMI или что угодно).

2 голосов
/ 26 мая 2010

без Ajax и таймеров, похоже, не справится с этой задачей.

Я также столкнулся с той же проблемой, когда мне нужно передать некоторые данные с сервера на клиент при изменении.

Для этого вы можете использовать сервер Push AKA "Комета" программирования.

В комментариях

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

Кроме того, для отслеживания изменений БД у вас может быть две вещи,

  1. Некоторые триггеры / таймеры (Выезд Quartz Scheduler)
  2. Механизм базы событий, который помещает данные в канал о конкретных событиях.

По сути, клиент не может знать, что происходит на стороне сервера, поэтому вы должны отправить некоторые данные или событие, чтобы сообщить клиенту, i have some new data, please call some method. Своего рода уведомление. Поэтому, пожалуйста, проверьте кометы / серверы с уведомлением о событии.

надеюсь, это поможет.

спасибо.

0 голосов
/ 25 июня 2011

Портативный способ сделать это - добавить метку времени столбца (дата создания), которая указывает, когда строка была добавлена ​​в таблицу.После начальной загрузки контента вы просто опрашиваете новый контент, который в предложении where current_time> = create_date.В случае, если строки могут иметь одинаковые временные метки, вам необходимо отфильтровать дубликаты перед их добавлением.

0 голосов
/ 27 мая 2010

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

0 голосов
/ 26 мая 2010

уведомляющий сервер клиент не очень хорошая идея (рассмотрим сценарий с 1000 клиентов). Используете ли вы какой-то постоянный слой или вам нужно придерживаться чистого JDBC?

0 голосов
/ 26 мая 2010

Если у вас есть база данных с низким трафиком, вы можете реализовать поток, который быстро проверяет наличие обновлений в БД (опрос).

Если у вас БД с большим трафиком, я бы этого не рекомендовал, потому что опрос создает много дополнительного трафика.

0 голосов
/ 26 мая 2010

Не самая простая проблема, правда.

Давайте разделим это на 2 меньшие задачи:

1) как включить перезагрузку без таймеров и ajax

2) как реализовать серверную часть

  1. Нет способа уведомить клиентов с сервера. Таким образом, вам нужно использовать flash или silverlight или JavaFX или Applets для создания толстого клиента. Если проблема с Ajax заключается в том, что вы не знаете, как использовать его для этой проблемы, вы можете исследовать некоторые готовые библиотеки тегов jsp или компонентов jsf с поддержкой ajax.

  2. Если у вас только 1 сервер, просто добавьте кеш. Если существует несколько серверов, рассмотрите возможность использования распределенных кэшей.

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