我正在尝试遵循this教程,同时使用默认的Websphere JPA(OpenJPA)实现来调整它以在Websphere 8.5.5上运行。
我在Eclipse中创建了项目并使用WAS for Developers。
最初,在运行应用程序时,我收到有关resource-ref不可用的错误(不记得确切的错误消息)
经过一些研究和大量的试错法,我得到了应用程序的工作。我必须在web.xml和ibm-web-bnd.xml中进行(或进行)更改,以将resource-ref添加到persistence.xml中定义的数据源中(不记得,如果我在试验中更改了其他任何内容,错误尝试)。
但是现在,我有以下问题
实际需要进行哪些更改 申请工作?
persistence.xml和datasource之间的关系是什么? web.xml / ibm-web-bnd.xml中的resource-ref?
目前,这是在动态网络项目中完成的。还有什么变化 如果我想在EJB项目中创建JPA,我需要制作 JPA项目?
在本教程中,JPA位于动态Web项目中。做了什么改变 如果我创建一个ejb项目/ JPA项目并且想要,我需要做 以这种方式执行应用程序,而不是在Web中定义JPA 项目
是否有任何技术说明或其他文档可以解释这一点?
答案 0 :(得分:1)
我建议使用Websphere Liberty Profile 8.5.5.6(当前版本)。
一些澄清(您可能已经知道):
<强>的web.xml 强> 包含你的servlet,映射,init参数,监听器,安全性,数据源等。
<强>的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创建绑定文件 - &gt;生成Bindings部署描述符。 然后在描述符中你输入这样的东西: 然后在安装过程中使用它。 如果你没有通过文件指定bindig,你可以在应用程序安装期间执行此操作,例如。通过控制台。然后创建绑定文件并将其存储在: PROFILE_ROOT \ installedApps \ cellName \ Application.ear \ WebModule.war \ WEB-INF \ ibm-web-bnd.xml in PROFILE_ROOT \配置\细胞\单元名\应用程序\ Application.ear \部署\应用程序\ WebModule.war \ WEB-INF \ IBM的Web-bnd.xml
答案 1 :(得分:1)
我会尝试澄清你的一些问题。
通常在服务器配置文件中定义和配置 Datasource
。它可以在应用程序中定义(通过web.xml
或annotations
),但我要避免这种情况,因为它在应用程序本身中的数据库细节不够灵活和硬编码。
数据源通过JNDI名称提供给应用程序,让我们说jdbc/myDS
。
在persistence.xml
中,您可以提供将由JPA应用程序使用的数据源JNDI名称。 JNDI名称可以是全局名称(在这种情况下,它必须与服务器中定义的JNDI名称匹配 - 在我们的例子中是jdbc / myDS)或者作为资源引用名称(例如java:comp / env / jdbc / myDSReference)
如果使用资源引用,它可以提供更好的灵活性,因为它不必匹配服务器中定义的JNDI名称,但是您必须在应用程序中定义该引用并为其提供绑定。
有几种方法可以定义引用和绑定:
注解
在servlet中使用@Resource
注释通过lookup属性定义引用名称和绑定:
@Resource(type=DataSource.class, name="jdbc/myDSReference", lookup="jdbc/myDS")
部署描述符
使用web.xml
通过<resource-ref>
ibm-mmm-bnd.xml
文件(对于web模块,其中mmm可以是web
,如果是ejb模块,则为ejb-jar
)是一个绑定文件,可以提供引用之间的映射和服务器上定义的全局JNDI名称。您可以使用它而不是lookup
属性(您必须在Java EE 6之前的应用程序中使用它,因为那时没有查找属性)。
在应用程序安装期间或之后或通过wsadmin
脚本编写,也可以通过WebSphere Web管理控制台定义和更改绑定。
对于EJB项目 - 如果要使用引用,则必须将它们定义为将访问EntityManager
的任何给定bean的资源引用。再次通过注释或部署描述符。