我正在尝试遵循Drools Flow中的Human Task documentation示例代码,并且具有以下代码:
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.drools.task.service.TaskService;
// ...
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("org.drools.task");
TaskService taskService = new TaskService(emf, null);
我已将
persistence.xml
文件放在指定的
here中的
META-INF
中(肯定会被拾取,因为如果我处理它会收到XML解析错误),但是会引发以下异常:
Exception in thread "main" java.lang.IllegalArgumentException:
Named query not found: UnescalatedDeadlines
at org.hibernate.ejb.AbstractEntityManagerImpl.createNamedQuery(
AbstractEntityManagerImpl.java:108)
at org.drools.task.service.TaskService.<init>(TaskService.java:65)
at org.drools.task.service.TaskService.<init>(TaskService.java:48)
at com.sample.RuleFlowTest.main(RuleFlowTest.java:32)`
请注意,
TaskService
的第二个参数是必需的,但
the documentation中未提及。对我来说似乎不太可能,但是可能是因为我将其设置为
null
导致了此问题?
解决方案如下:
我通过将persistence.xml
和orm.xml
从drools-process-task-5.0.1.jar/META-INF
(在orm.xml
中指定了UnescalatedDeadlines命名查询)复制到我构建的META-INF
目录中来防止此异常。
但是,我现在又收到另一个异常(来自Hibernate的java.lang.NoClassDefFoundError: antlr/ANTLRException
)...
为了解决antlr/ANTLRException
问题,我下载了最新的Hibernate发行版(hibernate-distribution-3.3.2.GA-dist.zip
),并将antlr-2.7.6.jar
从lib
目录添加到类路径中。
它需要这么复杂吗?