У AFAIK нет универсального решения этой проблемы, в основном из-за различных требований к синхронизации.
В одном из наших более ранних проектов мы реализовали механизм синхронизации на основе Spring * , основанный на последнем обновленном поле отметки времени в каждой из таблиц (которые участвуют в синхронизации).
Я слышал о SyncML , но не имею большого опыта с этим.
Если у вас один сервер и несколько клиентов, вы можете подумать о подходе на основе JMS.
Данные объединяются и помещаются в очереди (или разделы), и их будут получать клиенты.
В вашем случае, поскольку обновления носят двунаправленный характер, вам также необходимо учитывать обнаружение конфликтов. Это приносит дополнительные сложности.