Несколько экземпляров DAO = плохо? - PullRequest
0 голосов
/ 03 ноября 2011

Два приложения (A и B) используют hibernate для извлечения одних и тех же объектов из базы данных. Следует ли создавать экземпляр DAO в каждом приложении или должно существовать отдельное приложение (C), которое содержит единственный экземпляр DAO и предоставляет службу (например, RMI) для использования A и B?

Если последний случай верен, то какова общая практика предотвращения исключений при загрузке? Я думаю, что в настоящее время я планирую использовать RMI и создать DTO для каждого объекта домена. Моя единственная оговорка в том, что сущности в A и B не смогут ссылаться на сущности в C. Является ли это общей стратегией?

Что-то, о чем стоит упомянуть, это то, что на каждом из 4 и 4 серверов A и B работают 4 разных сервера. В настоящее время на каждом сервере тоже есть БД - этот вопрос возник из-за того, что я пытаюсь что-то централизовать - либо у всех проектов есть DAO, указывающая на один сервер БД, или все приложения указывают на службу, размещенную на C, которая имеет DAO для одной БД.

Ответы [ 3 ]

1 голос
/ 03 ноября 2011

DAO - это, как правило, одноэлемент без сохранения состояния, используемый для загрузки, поиска, изменения и удаления объектов из базы данных.Почему вы хотите использовать RMI для связи с другой JVM просто для этого?Вы серьезно снизите производительность, сущности никогда не будут присоединены к сеансу, и вы не сможете использовать транзакции, охватывающие более одной операции (загрузка, сохранение) в одной сущности.Это просто не имеет смысла.

Имейте экземпляр DAO в каждом приложении.

0 голосов
/ 03 ноября 2011

Это зависит от вашей архитектуры.Оба подхода возможны и имеют свои преимущества и недостатки.
Если у вас есть один DAO и подключение к нему через RMI / REST, вы отсоединились, используя проекты из hibernate, но ввели некоторую задержку, навязали сериализуемость для объектов и получили единую точку отказа.(может быть решено с помощью кластеризации)

Если у каждого проекта есть собственный DAO, вы получили сложность из конфигурации гибернации, но избежали задержки и единой точки отказа.

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

0 голосов
/ 03 ноября 2011

Вы можете использовать spring и добавить этот экземпляр компонента DAO в контекст родительского приложения для обоих проектов.

...