我想要的只是使用 JPA 2.0 访问 Websphere V8 中的 H2 mem 数据库
Posted
技术标签:
【中文标题】我想要的只是使用 JPA 2.0 访问 Websphere V8 中的 H2 mem 数据库【英文标题】:All I want is to access a H2 mem database in Websphere V8 using JPA 2.0 【发布时间】:2015-06-17 14:26:26 【问题描述】:我已经为此苦苦挣扎了好几天,我在 *** 和其他开发网站上搜索了数十篇文章。
我使用 Deployment Manager 界面配置了一个带有 H2 JDBC 提供程序的 Websphere Application Server 8.0.0.3,并使用我找到的教程 here 为我的应用程序提供了一个数据源。
JDBC 数据源:
Name: H2 JDBC Provider
Classpath: $(H2_JDBC_DRIVER_PATH)/h2-1.3.161.jar
Implementation class name: org.h2.jdbcx.JdbcDataSource
数据来源:
Provider: H2 JDBC Provider
Name: SGO_datasource
JNDI name: jdbc/sgodb
Use this data source in container managed persistence (CMP): true
Data store helper class name: com.ibm.websphere.rsadapter.ConnectJDBCDataStoreHelper (user-defined)
(default values for all the rest)
Custom properties:
URL: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
user: sa
password: sa
我使用 DM 中的测试连接按钮测试了这个数据源,它运行良好。
当我尝试从我的应用程序访问此数据源时,我在首次访问时收到此错误:
Caused by: <openjpa-2.1.2-SNAPSHOT-r422266:1227818 fatal user error> org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.
阅读此issue 后,我检查了我的 persistence.xml 文件在生成的 WAR 中的位置,它似乎位于正确的位置:WEB-INF/classes/META-INF/persistence.xml。
Persistence.xml:
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="sgo">
<jta-data-source>java:comp/env/jdbc/sgodb</jta-data-source>
</persistence-unit>
</persistence>
有什么想法吗?提前致谢。
【问题讨论】:
“Caused by”错误消息是无法查找数据源时的一般消息。更早地在日志中查看 CWWJPxxxxxE 错误消息(其中 xxxxx 是数字),以查看是否有更多关于无法查找数据源的详细信息。很可能jdbc/sgodb
资源引用未定义或未正确绑定到jdbc/sgodb
数据源。
请在您使用持久化上下文的地方添加代码。
【参考方案1】:
找到了!
这些完整的 JNDI 名称似乎在 Websphere 中不起作用。我使用了一个普通的“jdbc/sgodb”,它可以找到上下文。
<jta-data-source>jdbc/sgodb</jta-data-source>
而不是
<jta-data-source>java:comp/env/jdbc/sgodb</jta-data-source>
【讨论】:
以上是关于我想要的只是使用 JPA 2.0 访问 Websphere V8 中的 H2 mem 数据库的主要内容,如果未能解决你的问题,请参考以下文章
JPA 2.0:在JPA 2.0中使用javax.validation。*包的例外
使用 JPA 2.1、EclipseLink、JSF 2.0 的日志表