2015-02-19 3 views
0

Мне нужно написать код, который использует SymmetricDS и синхронизирует две БД при нажатии кнопки. То есть Мне нужно нажать кнопку, это показывает, что она синхронизируется, а затем, когда нет никаких изменений, она говорит «Все в порядке» и позволяет мне продолжать работу.Как определить, что синхронизация завершена SymmetricDS

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

Двигатели SymmetricDS развернуты в Tomcat 8, мое приложение также развернуто, и я использую JMX MBeans для подключения к SymmetricDS для запуска/остановки синхронизации.

+0

Хм, я не думаю, что вам нужно вообще начать/остановить синхронизацию. Пусть он работает в фоновом режиме. Чтобы увидеть, были ли все данные отправлены в проблему с целевой базой данных, выберите «count» (*) из sym_outgoing_batch sob, где sob.status = «ОК», и дождитесь, пока он не упадет до 0 .. –

+0

Для входящей информации о выпуске тот же запрос заменяет 'sym_outgoing_batch' с' sym_incoming_batch'. –

+0

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

ответ

0

Я обнаружил, что эти четыре запросов

String serv_outgoing = "select * from sym_outgoing_batch where node_id = '" + node_id + "' and channel_id != 'config' and status != 'OK';"; 
String serv_data = "select d.* from sym_data d where d.data_id not in (select e.data_id from sym_data_event e);"; 

String client_outgoing = "select * from sym_outgoing_batch where node_id = '000' and channel_id != 'config' and status != 'OK';"; 
String client_data = "select d.* from sym_data d where d.data_id not in (select e.data_id from sym_data_event e);"; 

должны возвращать пустые результаты. Первые два исполняются на базе сервера, второй на клиенте.

Это не похоже на хорошее решение, так как клиент должен иметь доступ к базе данных сервера, но вы можете, например, создать сервлет на своем сервере, который прослушивает какой-либо HTTP-запрос, например «делает сервер подумайте, что синхронизация завершена "и запросите его перед проверкой базы данных на стороне клиента

Кроме того, это старый фрагмент кода, вы не должны использовать простые запросы для совместной работы над JDBC и использовать Hibernate или другие ORM, чтобы они избегайте ваших параметров правильно, и вы не склонны к инъекциям SQL (здесь, конечно, вы, вероятно, генерируете node_id внутренне, но кто знает, может быть, вы позволите пользователям каким-то образом ввести его, например, логин или что-то еще)

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