我目前在使用 JPA 实体管理器时遇到了一些问题(使用 Eclipselink)。每当实体管理器出现问题时,我就无法再对它做任何事情。我每次都得重新开始。这真的很烦人,当考虑在生产中使用它时,我对此并不感到舒服。
是否有一些无需重新启动整个应用程序即可重置实体管理器?是否有一些配置选项允许我使实体管理器对失败的 jpa 操作更加健壮一点?
克里斯
我目前在使用 JPA 实体管理器时遇到了一些问题(使用 Eclipselink)。每当实体管理器出现问题时,我就无法再对它做任何事情。我每次都得重新开始。这真的很烦人,当考虑在生产中使用它时,我对此并不感到舒服。
是否有一些无需重新启动整个应用程序即可重置实体管理器?是否有一些配置选项允许我使实体管理器对失败的 jpa 操作更加健壮一点?
克里斯
请提供更多细节,
“每当出现问题时” - 出了什么问题?你得到什么错误,包括堆栈。
“我不再能够做任何事情” - 你得到什么错误?
通常,当 EntityManager 的操作失败时,您只需将其关闭并从工厂创建一个新的。EntityManagers 应该在每个请求或每个事务中使用,因此获取一个新的应该不是问题,除非您的应用程序设计不佳。
您还可以调用 clear() 来重置特定的 EntityManager 以继续使用它。
据我所知,当 EntityManager 抛出任何异常时,它必须被丢弃,因为它变得不可用(通常在除了任何操作上抛出 IllegalStateException close()
)。
我从来没有尝试过 JMelnik 的建议,因为我总是使用容器管理的上下文,但它可能会起作用。