我只想使用 JPA 2.0 访问 Websphere V8 中的 H2 mem 数据库

All I want is to access a H2 mem database in Websphere V8 using JPA 2.0

几天来我一直在为此苦苦挣扎,我在 Whosebug 和其他开发网站上搜索了数十篇文章。

我使用 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 后,我在生成的 WAR 中检查了我的 persistence.xml 文件的位置,它似乎在正确的位置: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>

有什么想法吗?提前致谢。

找到了!

这些完整的 JNDI 名称似乎在 Websphere 中不起作用。我改用了普通的 "jdbc/sgodb",它可以找到上下文。

<jta-data-source>jdbc/sgodb</jta-data-source>

而不是

<jta-data-source>java:comp/env/jdbc/sgodb</jta-data-source>