java - 多个 DAO 实例 = 不好?

标签 java hibernate soa rmi dao

两个应用程序(A 和 B)使用 hibernate 从数据库中检索相同的实体。是否应该在每个应用程序中实例化 DAO,还是应该有一个单独的应用程序 (C),其中包含 DAO 的唯一实例并公开服务(例如 RMI)供 A 和 B 使用?

如果后一种情况属实,那么防止加载异常的常见做法是什么?我认为我目前的计划是使用 RMI 并为每个域对象创建一个 DTO。我唯一的保留意见是 A 和 B 中的实体将无法引用 C 中的实体。这是常见策略吗?

可能值得一提的是,有 4 个不同的服务器分别运行 A 和 B。目前每个服务器上也都有数据库 - 这个问题的出现是因为我试图集中一些东西 - 要么所有项目都有一个指向单个数据库服务器的 DAO 或所有应用程序都指向由 C 托管的服务,该服务具有指向单个数据库的 DAO。

最佳答案

DAO 通常是一个无状态的单例,用于从数据库中加载、搜索、修改和删除实体。为什么要使用 RMI 与另一个 JVM 进行通信才能做到这一点?您将严重降低性能,实体永远不会附加到 session ,并且您无法在单个实体上使用跨越多个操作(加载、存储)的事务。这根本没有意义。

每个应用程序中都有一个 DAO 实例。

关于java - 多个 DAO 实例 = 不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994609/

相关文章:

JavaFX + Hibernate(JPA) 持久化 + Derby DB

java - 当我在同一个对象/表上使用 HQL 进行读取时,hibernate 为什么执行更新 sql 语句?

java - 基于 SOA 的应用程序/网站快吗?如何提高性能和速度

python - 如何在两个项目中使用一个 Django 应用程序(带有一个数据库)? (使用我的应用程序作为服务)

java - 编译和运行时类

java - Jpa - 两个具有相同 'mappedBy' 的 @OneToOne 关系

hibernate - 不使用 HQL 检索表的所有行?

oop - 在非服务代码中使用 SOA 原则而不是 OOD

java - 无法解析符号 '@xml/device_admin'

java - 将实体传递到 JSP 页面,以及如何从中制作表单?