gpt4 book ai didi

java - 使用 Java 断言是否适合验证 JPA 实现

转载 作者:行者123 更新时间:2023-12-02 07:54:24 25 4
gpt4 key购买 nike

我正在开发一个使用(几乎)普通 Java EE 6 堆栈(EJB、JPA、JSF 等)的应用程序。我们在 Glassfish 3 上托管我们的应用程序,目前与持久性相关的代码是 100% 纯 JPA。

不幸的是,我们的应用程序的一部分必须使用 Oracle 10g 数据库中的存储过程。为了调用这个存储过程,我们决定使用 EclipseLink(与 Glassfish 捆绑在一起的 JPA 实现)。

由于我们代码的(一小部分)现在依赖于 EclipseLink,我想知道如何验证这种依赖关系。该依赖项未与应用程序打包在一起,但假定它在我们的部署平台(即 Glassfish)上可用。

在我看来,我们的选择是:

  1. 什么都不做,让它失败。我认为这个解决方案不是最优的,因为它从未明确表示我们的代码假设存在 EclipseLink。
  2. 在 if 语句中检查 EclipseLink 并抛出特定异常。

    if (!JpaHelper.isEclipseLink(entityManager)) {
    throw new InvalidJpaImplementationException();
    }
  3. 添加一个断言来检查 EclipseLink,并在失败时抛出异常。

    assert JpaHelper.isEclipseLink(entityManager)) : "Blah!";

断言(选项 3)是有效的解决方案吗?您更喜欢其他解决方案吗?哪一个,为什么?

最佳答案

由于您使用的是 JPA,因此我不会指定 EclipseLink 的具体实现(因为它必须符合 JPA 规范)。人们不应该关心他们正在使用什么 JPA 提供程序。

如果您决定迁移到(比方说)Hibernate(如果您实现依赖项验证),您的代码可能会中断。 JPA 规范的全部目的是开发人员根本不应该担心实现供应商的产品。

<小时/>

如果您想使用 Eclipse Link 的存储过程,那么我建议您创建一个可以调用存储过程的引擎,而不管 EntityManager 是什么。这样,它仍然不用担心 JPA 实现提供者的依赖性。可以找到如何使用 Hibernate JPA 调用 StoredProcedure 的示例 here .

关于java - 使用 Java 断言是否适合验证 JPA 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9836221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com