使J2EE应用程序避免更新数据库

时间:2015-11-20 11:44:15

标签: oracle postgresql jpa jdbc jta

我有一个运行EJB和Spring代码的JBoss 6应用程序(这个决定涉及一些遗留问题)。它应该按需与Oracle和PostgreSQL数据库通信。 JPA是数据库操作的完成方式,不涉及直接的JDBC。

我想做以下事情:不改变业务逻辑,能够“静音”我的应用程序中的数据库更新/删除,而不会破坏任何例外的流程。

我目前的想法是:

  • 从部署描述符中将JDBC驱动程序设置为只读 - 这仅适用于PostgreSQL(Oracle驱动程序不支持此操作)
  • 在RDBMS级别上创建一个只读用户 - 它可能会填满我的错误
  • 让所有交易回滚而不是提交 - 这可能吗?
  • 让实体管理器永远不会持久化 - 将FlushMode设置为MANUAL并确保flush()永远不会被调用 - 但commit()仍会刷新所有内容。

还有其他简明的方法吗?

2 个答案:

答案 0 :(得分:1)

如果要确保应用程序在生产中工作,请使用数据库的副本。每晚使用调度程序覆盖副本数据库。

答案 1 :(得分:0)

我的请求还包括在运行时激活或停用此行为的必要性。

我找到的解决方案(目前用于概念验证)是:

  • 创建新用户,授予他对默认架构表的权限;
  • 使用此用户为每个表创建视图,使用相同的名称(不带模式前缀);
  • 使用INSTEAD OF;
  • 为每个在插入,更新或删除时不执行任何操作的视图创建触发器
  • 为此用户创建数据源和持久性单元;
  • 在运行时注入两个实体管理器,使用所需的实体管理器;

感谢您的帮助!