Я пытаюсь сделать JPAKnowledgeService
в течение 3 дней, и я довольно близко к тому, чтобы сдаваться, это просто кажется слишком сложным для настройки и детализации работы есть/делает. Тем не менее,Не могу заставить Bitronix управлять моими источниками данных/транзакциями в проекте Spring Boot
я имел this problem первоначально, который ушел после того, как я добавил
в мой jndi.properties
файл, как подсказывает ответ. Я смог наконец создать StatefulKnowledgeSession
и подумал, что работа окончена. Но в чате с drools тот же парень предположил, что мои транзакции, возможно, обрабатывались Hibernate вместо Bitronix, что могло бы сделать мою персистентность не транзакционной вообще.
И я думаю, что он прав, так как всякий раз, когда я пытался вставить 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
и дал имя JNDI к моему источнику данным для встраиваемого кота следуя these instructions.
и ошибка вернулась:
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
выглядит как null. Что я делаю не так? Я расстроен и невежествен.
@ Akshay Это шутка? –
Я только что заметил ошибку, поэтому прокомментировал .. – Akshay
Вы понимаете, что это не вопрос NPE, а вопрос о том, как настроить Hibernate для использования Bitronix? Вы отмечаете мой вопрос как дубликат вопроса, который не помогает (и никакого отношения к моему), и блокирует потенциальный интерес. Это грубо и не оценено. –