配置Liberty Profile以使用H2数据库

时间:2014-06-22 16:07:44

标签: java jpa h2 websphere-liberty

我有一个运行的嵌入式H2数据库,我一直在这样连接: Browser H2 interface

这完全符合要求。我使用JPA / EJB / JSF构建将在Liberty Profile上运行的EAR。我已经将Liberty Profile配置为过去使用过几个不同的数据库,但我对H2没有运气。我的server.xml看起来像这样:

<!-- Enable features -->

<featureManager>
    <feature>ejbLite-3.1</feature>
    <feature>servlet-3.0</feature>
    <feature>localConnector-1.0</feature>
    <feature>managedBeans-1.0</feature>
    <feature>cdi-1.0</feature>
    <feature>jpa-2.0</feature>
    <feature>jaxrs-1.1</feature>
    <feature>jsf-2.0</feature>
    <feature>jaxws-2.2</feature>
</featureManager>
<httpEndpoint host="*" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>

<library description="XXXX" id="XXXX" name="XXXX">
    <fileset dir="${shared.resource.dir}/XXXX" includes="*.jar"/>
</library>



<dataSource type="javax.sql.DataSource" id="XXXX" jndiName="jdbc/XXXX">
        <jdbcDriver javax.sql.DataSource="org.h2.jdbcx.JdbcDataSource">
            <library>
                <fileset caseSensitive="false" dir="${shared.resource.dir}/XXXX"/>
            </library>
        </jdbcDriver>

     <properties password="gg" URL="jdbc:h2:~/XXXX" user="SA" databaseName="XXXXDB"/>
</dataSource>

                     

<applicationMonitor updateTrigger="mbean"/>

此方法永远不会找到数据库。我也尝试过使用192.168.2.13:8087,但这会给出

 org.apache.openjpa.persistence.PersistenceException: No suitable driver found for http://192.168.2.13:8087 DSRA0010E: SQL State = 08001, Error Code = 8,001
    at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603). 

我花了相当多的时间在google上搜索正确的配置,但一直没有成功。任何指导将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:4)

这是我在wlp:

的server.xml中运行的h2配置
<dataSource
    id="mydb"
    jndiName="jdbc/mydb"
    type="javax.sql.ConnectionPoolDataSource">
    <jdbcDriver
        javax.sql.ConnectionPoolDataSource="org.h2.jdbcx.JdbcDataSource"
        javax.sql.DataSource="org.h2.jdbcx.JdbcDataSource"
        javax.sql.XADataSource="org.h2.jdbcx.JdbcDataSource"
        libraryRef="SharedLibrary_H2"/>
    <properties
        URL="jdbc:h2:C:/Apps/db/h2/mydb.db;MV_STORE=FALSE;AUTO_SERVER=TRUE"
        databaseName="MY_DB"
        user="sa"
        password="sa" />
   </dataSource>

<library id="SharedLibrary_H2">
    <fileset dir="${shared.resource.dir}/h2" id="Fileset_H2"/>
</library>

h2.jar必须位于:

C:\path\to\wlp\usr\shared\resources\h2\h2-1.4.187.jar

在peristence.xml的持久性单元中:

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

答案 1 :(得分:0)

您收到的错误似乎表明OpenJPA无法确定要使用的DBDictionary。首次启动数据库连接时,OpenJPA会尝试根据连接的元数据确定要使用的正确字典。在这种情况下,无法建立与数据库的连接(您应该能够使用给定的数据库URL信息进行验证),或者OpenJPA无法根据元数据确定数据库类型。我的猜测是你遇到的后一种情况。

您可以通过在persistence.xml文件中指定字典来绕过此自动字典检测。尝试指定此属性并查看结果。

<property name="openjpa.jdbc.DBDictionary" value="h2"/>

更多详细信息可在此处找到: http://ci.apache.org/projects/openjpa/trunk/docbook/manual.html#ref_guide_dbsetup_dbsupport