使 J2EE 应用程序避免更新数据库
Make a J2EE application avoid updating the DB
我有一个 JBoss 6 应用程序 运行 EJB 和 Spring 代码(此决定涉及一些遗留问题)。它应该按需与 Oracle 和 PostgreSQL 数据库通信。
JPA 是完成数据库操作的方式,不涉及直接 JDBC。
我想做以下事情:在不改变业务逻辑的情况下,能够从我的应用程序 "silence" 数据库 updates/deletes 中,而不中断任何异常的流程。
我目前的想法是:
- 从部署描述符中将 JDBC 驱动程序设置为只读 - 这仅适用于 PostgreSQL(Oracle 驱动程序不支持此功能)
- 在 RDBMS 级别创建一个只读用户 - 这可能会让我充满错误
- 使所有事务回滚而不是提交 - 这可能吗?
- 使实体管理器永远不会保留任何内容 - 将 FlushMode 设置为 MANUAL 并确保永远不会调用 flush() - 但 commit() 仍然会刷新所有内容。
还有其他简洁的方法吗?
如果要确保应用程序在生产环境中正常工作,请处理数据库的副本。每晚使用覆盖副本数据库的调度程序。
我的请求还包括需要在运行时激活或停用此行为。
我找到的解决方案(目前用于概念验证)是:
- 创建一个新用户,授予他对默认架构表的权限;
- 与此用户一起为每个表创建视图,名称相同(没有模式前缀);
- 使用
INSTEAD OF
; 为每个不执行插入、更新或删除操作的视图创建触发器
- 为此用户创建数据源和持久性单元;
- 在运行时注入两个实体管理器,使用需要的那个;
感谢您的帮助!
我有一个 JBoss 6 应用程序 运行 EJB 和 Spring 代码(此决定涉及一些遗留问题)。它应该按需与 Oracle 和 PostgreSQL 数据库通信。 JPA 是完成数据库操作的方式,不涉及直接 JDBC。
我想做以下事情:在不改变业务逻辑的情况下,能够从我的应用程序 "silence" 数据库 updates/deletes 中,而不中断任何异常的流程。
我目前的想法是:
- 从部署描述符中将 JDBC 驱动程序设置为只读 - 这仅适用于 PostgreSQL(Oracle 驱动程序不支持此功能)
- 在 RDBMS 级别创建一个只读用户 - 这可能会让我充满错误
- 使所有事务回滚而不是提交 - 这可能吗?
- 使实体管理器永远不会保留任何内容 - 将 FlushMode 设置为 MANUAL 并确保永远不会调用 flush() - 但 commit() 仍然会刷新所有内容。
还有其他简洁的方法吗?
如果要确保应用程序在生产环境中正常工作,请处理数据库的副本。每晚使用覆盖副本数据库的调度程序。
我的请求还包括需要在运行时激活或停用此行为。
我找到的解决方案(目前用于概念验证)是:
- 创建一个新用户,授予他对默认架构表的权限;
- 与此用户一起为每个表创建视图,名称相同(没有模式前缀);
- 使用
INSTEAD OF
; 为每个不执行插入、更新或删除操作的视图创建触发器
- 为此用户创建数据源和持久性单元;
- 在运行时注入两个实体管理器,使用需要的那个;
感谢您的帮助!