【问题标题】:Relationship between persistence.xml datasource and web.xml / ibm-web-bnd.xml resource-refpersistence.xml 数据源与 web.xml / ibm-web-bnd.xml 资源引用之间的关系
【发布时间】:2015-07-25 23:48:22
【问题描述】:

我正在尝试遵循 this 教程并同时调整它以在具有默认 Websphere JPA ( OpenJPA ) 实现的 Websphere 8.5.5 上运行。

我在 Eclipse 中创建了项目并使用 WAS for Developers。

最初,在运行应用程序时,我收到有关资源引用不可用的错误(不记得确切的错误消息)

经过一些研究和大量的反复试验,我得到了应用程序的工作。我必须在 web.xml 和 ibm-web-bnd.xml 中进行(或进行)更改,以将 resource-ref 添加到 persistence.xml 中定义的数据源(不记得了,如果我在试用版中更改了任何其他内容并且错误尝试)。

但是现在,我有以下问题

  • 实际需要进行哪些更改才能使 申请工作?

  • persistence.xml中的datasource和 web.xml / ibm-web-bnd.xml 中的资源引用?

  • 目前这是在动态 Web 项目中完成的。还有哪些变化 如果我想在 EJB 项目中创建 JPA 或 JPA 项目?

  • 在本教程中,JPA 位于动态 Web 项目中。有什么变化 如果我创建一个 ejb 项目/JPA 项目并且想要 以这种方式执行应用程序,而不是在 web 中定义 JPA 项目?

  • 是否有任何技术说明或其他文档可以解释这一点?

【问题讨论】:

    标签: jpa web.xml websphere-8 persistence.xml


    【解决方案1】:

    我会尽量澄清你的一些问题。

    Datasource 通常在服务器配置文件中定义和配置。它可以在应用程序中定义(通过web.xmlannotations),但我会避免这样做,因为它不太灵活并且在应用程序本身中硬编码数据库细节。

    数据源通过 JNDI 名称提供给应用程序,比如jdbc/myDS

    persistence.xml 中,您可以提供JPA 应用程序将使用的数据源JNDI 名称。 JNDI 名称可以是全局名称(在这种情况下,它必须与服务器中定义的 JNDI 名称匹配 - 因此在我们的例子中为 jdbc/myDS)或资源引用名称(例如 java:comp/env/jdbc/myDSReference) .

    如果您使用资源引用,它会为您提供更好的灵活性,因为它不必匹配服务器中定义的 JNDI 名称,但是您必须在应用程序中定义该引用并为其提供绑定。

    有几种方法可以定义引用和绑定:

    • 注释
      在 servlet 中使用 @Resource 注解通过查找属性定义引用名称和绑定:

      @Resource(type=DataSource.class, name="jdbc/myDSReference", lookup="jdbc/myDS")
      
    • 部署描述符
      使用web.xml通过<resource-ref>定义资源引用

    ibm-mmm-bnd.xml 文件(其中 mmm 在 web 模块的情况下可以是 web,在 ejb 模块的情况下可以是 ejb-jar)是一个绑定文件,它可以提供您的引用和定义的全局 JNDI 名称之间的映射服务器。您可以使用它来代替 lookup 属性(您必须在 Java EE 6 之前的应用程序中使用它,因为那时没有查找属性)。

    也可以在应用程序安装期间或之后通过 WebSphere Web 管理控制台或通过wsadmin 脚本定义和更改该绑定。

    对于 EJB 项目 - 如果您想使用引用,您必须将它们定义为任何给定 bean 的资源引用,该 bean 将访问EntityManager。再次通过注释或部署描述符。

    【讨论】:

    • 感谢 Gas 的解释。
    【解决方案2】:

    我建议使用 Websphere Liberty Profile,8.5.5.6(当前版本)。

    一些说明(您可能已经知道):

    web.xml 包含您的 servlet、映射、初始化参数、侦听器、安全性、数据源等。

    persistence.xml 处理持久性单元时需要。它定义了配置(JPA 访问意图、隔离级别、锁定级别等)。 它包含实体类和应用的数据源。

    ibm-web-bnd.xml 它包含逻辑资源的映射。数据源、Jms 绑定、Ejb 绑定...

    我会推荐 IBM redbooks,例如WebSphere Application Server V8.5 Administration and Configuration Guide for the Full Profile

    来自 web.xml 的资源引用和来自应用程序服务器的 JNDI 名称之间的映射可以存储在 2 个位置。 您可以在开发期间在“绑定文件”中定义此映射 - 如果是 Web 模块,它存储在 WEB-INF/ibm-web-bnd.xml 文件中。 如果您使用 RAD,您可以通过右键单击 Web 项目 JEE -> 生成绑定部署描述符来创建绑定文件。 然后在描述符中输入如下内容: 然后在安装过程中使用它。 如果您没有通过文件指定 bindig,您可以在应用程序安装期间执行此操作,例如。通过控制台。然后创建绑定文件并将其存储在: PROFILE_ROOT\installedApps\cellName\Application.ear\WebModule.war\WEB-INF\ibm-web-bnd.xml 并在 PROFILE_ROOT\config\cells\cellName\applications\Application.ear\deployments\Application\WebModule.war\WEB-INF\ibm-web-bnd.xml

    developerworks forum

    【讨论】:

    • 谢谢。我的问题更多是关于在 web.xml 和 ibm-web-bnd.xml 中定义资源引用的行,用于在这两个文件中定义 jta-datasource 和 resource-ref 的persistence.xml 之间的数据源映射,以及定义是否必须存在JPA 在所有三个 xml 文件中都可以在动态 Web 应用程序中工作吗?
    • 我很确定您不需要 web.xml 中的数据源,查找将直接针对应用服务器完成。我在 3 天前设置了一个动态 Web 应用程序。没有 web.xml 中的数据源,它工作正常。数据源是为 WLP 配置设置的。如果您没有在管理控制台中设置绑定文件,那么绑定文件很重要,因此该部分实际上也可以省略。在您的情况下,唯一需要设置的是persistence.xml
    猜你喜欢
    • 1970-01-01
    • 2013-08-03
    • 2014-01-03
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2019-07-25
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多