Drools Flow Human Task示例:如何防止引发“找不到命名查询”异常?

2020年6月27日 33点热度 0条评论

我正在尝试遵循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.xmlorm.xmldrools-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.jarlib目录添加到类路径中。

它需要这么复杂吗?