如何通过 Tomee.xml 配置 HikariCP?

How to configure HikariCP via Tomee.xml?

我想在 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 数据源?

我还没有完成 tomee.xml,但尝试使用 HsqlDB 的 JPA。以下是 JPA persistence.xml properties.Good 运气。

<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>

您可以将 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 中创建一个连接池,该连接池不受容器管理。