Два разных Java-приложения, использующих одну и ту же базу данных - PullRequest
3 голосов
/ 16 апреля 2011

В моем веб-приложении есть часть, которая должна непрерывно сканировать Интернет, обрабатывать эти данные и представлять их пользователю.Поэтому мне было интересно, если это хороший подход, чтобы разделить его на два отдельных приложения, где одно будет выполнять сканирование, обработку данных и хранить данные в базе данных.А другое приложение будет веб-приложением (смонтированным на каком-либо веб-сервере), которое будет предоставлять пользователю данные из базы данных и обеспечивать ему определенное взаимодействие с данными.

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

Мой стек приложений - Tapestry (веб-слой), Spring, Hibernate (поверх MySQL) и моя собственная реализация сканера, независимая от других.

Хорошо ли, чтобы интеграция выполнялась толькоиспользуя ту же базу данных?Это может вызвать проблемы с одновременным доступом к базе данных из обоих приложений.Или можно выполнить интеграцию на уровне Hibernate, чтобы оба приложения могли использовать один и тот же сеанс Hibernate?Но может ли приложение из одного экземпляра JVM получить доступ к объекту из другого экземпляра JVM?

Буду признателен за любые предложения по этому вопросу.

ОБНОВЛЕНИЕ

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

Спасибо, Никола

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Вы правы, разделение приложения на две части может быть разумным в вашем случае.

Недостатки разделения на два приложения -

  • Вы не можете кэшировать в Hibernate или любых других кэшируемых изменяемых объектах, которые можно изменять из обоих приложений ни в одном из них. Оптимистическая блокировка должна хорошо работать с двумя приложениями гибернации. Других проблем не вижу.

Преимущества, которые вы уже указали в своем коде.

1 голос
/ 16 апреля 2011

Я бы определенно держал их отдельно, как вы планируете.Сканирование в Интернете - это скорее «пакетный» процесс, чем веб-приложение, управляемое запросами.Приложение для веб-сканирования будет работать в собственной JVM, а ваше веб-приложение будет работать в контейнере сервлетов / Java EE.

Как часто будет работать сканер или это непрерывно работающий процесс?Вы можете рассмотреть частоту на основе ваших требований.

Будут ли пользователи веб-приложения обновлять те же таблицы, в которые сканер будет публиковать данные?В этом случае вам нужно будет принять меры предосторожности, иначе может возникнуть потенциальная тупиковая ситуация.Если вы хотите, чтобы ваше веб-приложение автоматически обновляло данные на основе новых вставок в таблицы, вы можете создать управляемый сообщениями компонент (используя JMS ) для асинхронного уведомления веб-приложения из приложения-обходчика.При получении нового сообщения о вставке данных вы можете либо отправить форму на свою страницу, либо использовать ajax для обновления данных на самой странице.

Веб-приложение должно использовать пул соединений, а пакетное приложение может использовать DBCP или C3P0 .Я не уверен, что вы получите большую выгоду, если попытаетесь поделиться сеансами базы данных в этом сценарии.

Таким образом, у вас будет интеграция между двумя приложениями, не замедляя друг друга, ожидая обработки другим.

НТН!

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