我想在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数据源?
答案 0 :(得分:3)
您可以将 HikariDataSource
包裹在 JTADataSourceWrapperFactory
中以获得 JTA 支持 (see mail archives)。
然后,您可以通过 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>
在您的 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>