如何通过 Tomee.xml 配置 HikariCP?

Run*_*lse 5 apache-tomee hikaricp

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

<Resource id="myJtaDs" type="DataSource" class-name="com.zaxxer.hikari.HikariJNDIFactory" factory-name="getObjectInstance">
....
</Resource>
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)

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

rzo*_*rzo 4

您可以将 包裹HikariDataSource在 a 中JTADataSourceWrapperFactory以获得 JTA 支持(请参阅邮件档案)。

然后,您可以通过tomee.xml或定义它resource.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>
Run Code Online (Sandbox Code Playgroud)

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

<jta-data-source>java:openejb/Resource/demo</jta-data-source>
Run Code Online (Sandbox Code Playgroud)

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

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