persistence.xml 数据源与 web.xml / ibm-web-bnd.xml 资源参考之间的关系

Relationship between persistence.xml datasource and web.xml / ibm-web-bnd.xml resource-ref

我正在尝试遵循 this 教程,同时在 Websphere 8.5.5 上使用默认的 Websphere JPA ( OpenJPA ) 实现使其适应 运行。

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

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

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

但是现在,我有以下问题

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

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

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

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

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

我会推荐 IBM redbooks,例如WebSphere 应用服务器 V8.5 完整配置文件的管理和配置指南

Mapping between resource reference from web.xml and JNDI name from Application server can be stored in 2 places. You can define this mapping during development in the 'binding file' - in case of the web module it is stored in WEB-INF/ibm-web-bnd.xml file. If you use RAD, you can create binding file via right click on web project JEE -> generate Bindings deployment descriptor. And then in the descriptor you put something like this: Then it is used during installation. If you didnt specify bindig via file, you can do this during application installation eg. via console. Then binding file is created and it is stored in: PROFILE_ROOT\installedApps\cellName\Application.ear\WebModule.war\WEB-INF\ibm-web-bnd.xml and in PROFILE_ROOT\config\cells\cellName\applications\Application.ear\deployments\Application\WebModule.war\WEB-INF\ibm-web-bnd.xml

developerworks forum

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

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

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

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

如果您使用资源引用,它会为您提供更好的灵活性,因为它不必匹配服务器中定义的 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 项目 - 如果您想使用引用,则必须将它们定义为将访问 EntityManager 的任何给定 bean 的资源引用。再次通过注释或部署描述符。