我正在尝试关注this教程,同时将其调整为在具有默认 Websphere JPA (OpenJPA) 实现的 Websphere 8.5.5 上运行。
我在 Eclipse 中创建了该项目并使用 WAS for Developers。
最初,在运行应用程序时,我收到有关资源引用不可用的错误(不记得确切的错误消息)
经过一些研究和大量的试错方法,我让应用程序运行起来。我必须在 web.xml 和 ibm-web-bnd.xml 中进行(或进行)更改,以将资源引用添加到 persistence.xml 中定义的数据源(不记得,如果我在试验中更改了其他任何内容)错误尝试)。
但是现在我有以下问题
为了实现这一目标,实际需要做出哪些改变? 申请工作?
persistence.xml中的datasource和 web.xml/ibm-web-bnd.xml 中的资源引用?
目前这是在动态 Web 项目中完成的。还有什么变化 如果我想在 EJB 项目中创建 JPA 或 JPA项目?
在本教程中,JPA 位于动态 Web 项目中。有何改变 如果我创建一个 ejb 项目/JPA 项目并且想要 以这种方式执行应用程序,而不是在 Web 中定义 JPA 项目?
有任何技术说明或其他文档可以解释这一点吗?
最佳答案
我会尽力澄清您的一些问题。
Datasource
通常在服务器配置文件中定义和配置。它可以在应用程序中定义(通过 web.xml
或 annotations
),但我会避免这样做,因为它不太灵活,并且在应用程序本身中硬编码数据库详细信息。
数据源可通过 JNDI 名称提供给应用程序,例如 jdbc/myDS
.
在 persistence.xml
您可以提供 JPA 应用程序将使用的数据源 JNDI 名称。 JNDI 名称可以是全局名称(在这种情况下,它必须与服务器中定义的 JNDI 名称匹配 - 在我们的例子中是 jdbc/myDS),也可以是资源引用名称(例如 java:comp/env/jdbc/myDSReference) .
如果您使用资源引用,它会为您提供更好的灵活性,因为它不必与服务器中定义的 JNDI 名称匹配,但是您必须在应用程序中定义该引用并为其提供绑定(bind)。
定义引用和绑定(bind)有多种方法:
注释
使用@Resource
Servlet 中的注释用于定义引用名称并通过查找属性进行绑定(bind):@Resource(type=DataSource.class, name="jdbc/myDSReference", lookup="jdbc/myDS")
部署描述符
使用web.xml
通过<resource-ref>
定义资源引用
ibm-mmm-bnd.xml
文件(其中 mmm 对于 Web 模块可以是 web
,对于 ejb 模块可以是 ejb-jar
)是一个绑定(bind)文件,它可以提供引用和服务器上定义的全局 JNDI 名称之间的映射。您可以使用它代替 lookup
属性(您必须在 Java EE 6 之前的应用程序中使用它,因为当时没有查找属性)。
还可以在应用程序安装期间或之后通过 WebSphere Web 管理控制台或通过 wsadmin
定义和更改该绑定(bind)。脚本编写。
对于 EJB 项目 - 如果您想使用引用,则必须将它们定义为任何将访问 EntityManager
的给定 bean 的资源引用。 。再次通过注释或部署描述符。
关于jpa - persistence.xml 数据源和 web.xml/ibm-web-bnd.xml 资源引用之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31632219/