2012-02-06 4 views
1

Учитывая приложение на основе JDBC, которое не предназначено для распространения изменений в реальном времени с одного экземпляра приложения, запущенного на компьютере A, на другой запуск экземпляра на компьютере B в схеме двусторонней синхронизации. Как вы можете сделать это элегантно, не используя Symmetric DS?Как хранить и воспроизводить заявления JDBC?

Мы, хотя и используем XMPP и XStream, преобразуем POJO в XML или JSON, отправляя их через XMPP, Smack API в предварительно сконфигурированную «чат-комнату», где другие боты, прослушивающие, будут воспроизводить полученные данные. Таким образом, даже автономные клиентские приложения получат «DiscussionHistory», отправив свои последние «с момента времени».

Я искал повсюду «распространение в режиме реального времени в режиме реального времени» в Java или даже в H2, но там, где изменения распространяются между каждым зарегистрированным узлом, но единственным решением, которое я мог бы подумать, является использование XMPP-протокол, создайте «ботовую» чат-комнату вокруг него, узлы отправят свои данные там, а другие послушают изменения.

Так называемые «боты» - это экземпляры приложений на разных компьютерах, приложения учета, которые должны обеспечивать совместную работу в режиме реального времени в одной базе данных, но допускать автономные изменения (поэтому для хранения изменений не требуется централизованный сервер).

+0

Я не могу сказать, подходит ли XMPP для этого или нет, но если вы собираетесь его использовать, то я думаю, что pubsub лучше подходит для общения в чате. – Robin

+0

Должно быть доступно что-то вроде «DiscussionHistory», которое находится в API Smack для MUC (многопользовательский чат). Причина, по которой узлы могут находиться в автономном режиме более одного дня. Даже неделю. И лучше всего, если они смогут получить «до скорости», переиграв историю с момента последнего входа в систему. Таким образом, все еще глядя на XMPP как реализацию MUC между этими нечастыми узлами для соединения друг с другом и совместного использования изменений в в режиме реального времени. Не видел такой поддержки в PubSub. 10x. –

ответ

0

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

+0

Английский был бы уместным ... Идея - это то, что я хочу хранить «вставки, обновления и удаления для всех запросов, которые проходят через приложение». Для каждого запроса я хочу, чтобы он был передан через XMPP, например, для прослушивания других «ботов», которые нужно воспроизвести. –

+0

Кажется, что DebuggableStatement является PreparedStatement, откуда я могу сохранить «подготовленный SQL» после его подготовки. Это означает, что было бы легко поймать «SQL-выражения», где они хранятся где-то и в режиме онлайн, пусть приложение отправит эти инструкции в «многопользовательскую комнату чата» для этих ботов, где они будут реплицироваться на другие узлы, которые получат обновления , Удивление, если это хороший подход или нет. И да, все наши запросы проходят «один-единственный запрос-метод», который делает этот сценарий выполнимым. –

+0

Итак, я правильно понял, что вы не синхронизируете фактические данные, а каждый экземпляр имеет собственную базу данных, и вы хотите распространять каждую операцию базы данных между всеми экземплярами, чтобы база данных была идентичной, а не только данные в реальном времени в памяти , Я правильно понимаю это? – pap