Avn*_*ish 8 spring drools jbpm kie
我正在尝试使用注入集成的kie(drools 6)构建一个web(spring-mvc)应用程序.我使用kie workbench创建了一个工作流程,编译和部署.我已经在我的项目的pom.xml中添加了这个工件的引用,并根据这篇博客文章添加了本地kie-workbench存储库,并且它工作正常(在我的maven/spring项目中将工件作为依赖项拉入).我想要做的是在我的一个服务中注入kiesession作为依赖与下面的片段 -
@Service
public class TniServiceImpl implements TniService {
@Inject
@KSession("tniSession")
private KieSession tniSession;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的root-context.xml中,我添加了kie名称空间以及对xsd的引用.我添加了org.kie.spring.KModuleBeanFactoryPostProcessor以及每个drools文档.我正在尝试为KSession扫描和注入进行CDI注入工作(它已经在同一个项目中使用@Inject工作了我的其他组件).到目前为止,我总是得到"没有找到类型[org.kie.api.runtime.KieSession]的限定bean依赖"错误.看起来spring无法扫描其中可用的kie模块和会话.需要以下帮助 -
我的环境如下 -
我已经通过以下链接,但没有运气(大多数情况下他们没有尝试做我的意思) -
我很感激,如果有人可以指导我在这里可能缺少什么,或者如果没有选择,只能在spring配置文件中明确定义所有kmodules/ksessions.
我遇到了同样的问题,并在这里找到了解决方案:http://drools.46999.n3.nabble.com/Spring-4-0-amp-Drools-6-0-1-Integration-issue-td4028052.html
基本上,您需要注入 ApplicationContext 而不是 kieSession 并手动获取 xml bean。
TniServiceImpl.java
@Service
public class TniServiceImpl implements TniService {
@Inject
ApplicationContext context;
KieSession kieSession;
@PostConstruct
public void postConstruct(){
kieSession = (KieSession) context.getBean("ksession1");
}
...
}
Run Code Online (Sandbox Code Playgroud)
根上下文.xml
<kie:kmodule id="kmodule1">
<kie:kbase name="kbase1">
<kie:ksession name="ksession1" />
</kie:kbase>
</kie:kmodule>
<bean id="kiePostProcessor" class="org.kie.spring.KModuleBeanFactoryPostProcessor" />
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
更新:
实现此目的的另一种方法是保持 xml 相同,而不是尝试注入 KieSession,而是注入 KieBase。然后,使用 KieBase 的实例创建新的 KieSession。
@Service
public class TniServiceImpl implements TniService {
@Autowired
private KieBase kbase;
/* inside some method */
@RequestMapping(method=RequestMethod.GET)
public @ResponseBody Data getData() {
KieSession ksession = kbase.newKieSession();
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6455 次 |
| 最近记录: |