如何通过Tomee.xml配置HikariCP?

时间:2018-03-19 15:08:18

标签: tomee hikaricp

我想在TomEE中测试hikaricp。我已经将jar文件添加到我的lib文件夹中,并尝试定义这样的资源:

<Resource id="myJtaDs" type="DataSource" class-name="com.zaxxer.hikari.HikariJNDIFactory" factory-name="getObjectInstance">
....
</Resource>

当我这样做时,我在启动时收到以下错误:

org.apache.xbean.recipe.MissingFactoryMethodException: Instance factory method has signature public com.zaxxer.hikari.HikariJNDIFactory.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable) but expected signature public com.zaxxer.hikari.HikariJNDIFactory.getObjectInstance()

如何在tomee.xml中定义HikariCP数据源?

2 个答案:

答案 0 :(得分:3)

您可以将 HikariDataSource 包裹在 JTADataSourceWrapperFactory 中以获得 JTA 支持 (see mail archives)。

然后,您可以通过 tomee.xmlresource.xml 定义它,如下所示:

<Resource id="hikariCP" class-name="com.zaxxer.hikari.HikariDataSource">
    driverClassName  org.hsqldb.jdbcDriver
    jdbcUrl     jdbc:hsqldb:mem:demo
    username    sa
    password
    <!-- other properties as required -->
</Resource>

<Resource id="demo" type="DataSource" class-name="org.apache.openejb.resource.jdbc.managed.JTADataSourceWrapperFactory" factory-name="create">
    Delegate = hikariCP
</Resource>

在您的 persistence.xml 中添加数据源通过

<jta-data-source>java:openejb/Resource/demo</jta-data-source>

只需确保 HikariCP 库在您的类路径中可用。

旁注:设置 hibernate.connection.provider_class 将在 Hibernate 中创建一个连接池,它不受容器管理。

答案 1 :(得分:2)

我还没有完成tomee.xml,但是尝试使用HsqlDB在JPA上进行尝试。以下是JPA persistence.xml属性。祝您好运。

<properties>
    <property name="hibernate.connection.provider_class" value="org.hibernate.hikaricp.internal.HikariCPConnectionProvider"/>
    <property name="hibernate.hikari.dataSourceClassName" value="org.hsqldb.jdbc.JDBCDataSource"/>
    <property name="hibernate.hikari.dataSource.url" value="jdbc:hsqldb:mem:test"/>
    <property name="hibernate.hikari.dataSource.user" value="sa"/>
    <property name="hibernate.hikari.dataSource.password" value=""/>
    <property name="hibernate.hikari.connectionTimeout" value="1200"/>
    <property name="hibernate.hikari.connectionTestQuery" value="select 1 from INFORMATION_SCHEMA.SYSTEM_USERS"/>

    <property name="hibernate.show_sql" value="true"/>
    <property name="hibernate.format_sql" value="true"/>
    <property name="hibernate.hbm2ddl.auto" value="create-drop" />
    <property name="hibernate.enable_lazy_load_no_trans" value="true"/>


</properties>