【发布时间】:2017-02-15 10:35:21
【问题描述】:
我已经尝试制作JPAKnowledgeService 大约 3 天了,我几乎要放弃了,这似乎是太多的配置和细节工作。然而,
我最初有this problem,添加后它消失了
java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
如答案所示,进入我的jndi.properties 文件。我终于能够创建一个StatefulKnowledgeSession,并认为工作已经结束。但是在流口水聊天中,同一个人暗示我的事务可能是由 Hibernate 而不是 Bitronix 处理的,这可能会使我的持久性完全非事务性。
我猜他是对的,因为每当我尝试在 Knowledge 会话中插入 Object 并调用 fireAllRules 时,我都被困在:
executing transaction with 0 enlisted resource
接着是:
transaction timed out: a Bitronix Transaction with GTRID [3132372E302E312E310000000000AFB9D800000006], status=MARKED_ROLLBACK, 0 resource(s) enlisted (started Thu Jan 01 05:11:56 EET 1970)
在那之后我改变的是;我更新了我的persistence.xml 如下:
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:comp/env/jdbc/jbpm</jta-data-source>
<class>org.drools.persistence.info.SessionInfo</class>
<properties>
<property name="hibernate.jndi.class" value="bitronix.tm.jndi.BitronixInitialContextFactory"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
</properties>
</persistence-unit>
</persistence>
将此行添加到我的application.properties:
spring.datasource.jndi-name=java:comp/env/jdbc/jbpm
并通过关注these instructions 为我的嵌入式 tomcat 数据源提供 jndi 名称。
然后错误又回来了:
Caused by: java.lang.NullPointerException: null
at org.drools.persistence.jta.JtaTransactionManager.getStatus(JtaTransactionManager.java:273) ~[drools-persistence-jpa-6.5.0.Final.jar:6.5.0.Final]
at org.drools.persistence.jpa.AbstractPersistenceContextManager.getApplicationScopedEntityManager(AbstractPersistenceContextManager.java:78) ~[drools-persistence-jpa-6.5.0.Final.jar:6.5.0.Final]
at org.drools.persistence.jpa.JpaPersistenceContextManager.getApplicationScopedPersistenceContext(JpaPersistenceContextManager.java:55) ~[drools-persistence-jpa-6.5.0.Final.jar:6.5.0.Final]
at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:103) ~[drools-persistence-jpa-6.5.0.Final.jar:6.5.0.Final]
... 43 common frames omitted
与JPAKnowledgeService 相关的表是在数据库中创建的,所以我猜我的JNDI 注册是成功的,但是我似乎无法找到Bitronix 作为我的事务管理器,因为JtaTransactionManager 似乎为空。我究竟做错了什么?我感到沮丧和无能为力。
【问题讨论】:
-
@Akshay 这是在开玩笑吗?
-
我刚刚看到这样评论的错误..
-
你是否意识到这不是一个 NPE 问题,而是一个关于如何配置 Hibernate 以使用 Bitronix 的问题?您将我的问题标记为一个没有帮助(与我无关)的问题的重复,并阻止了潜在的兴趣。这是粗鲁的,不受欢迎。
-
我说看到晚了……我才看到NPE
标签: java hibernate jpa drools bitronix