gpt4 book ai didi

spring - drools-6 (kie) 自动扫描(来自 spring)来自 kie 工作台部署工件的模块和 session

转载 作者:行者123 更新时间:2023-12-02 08:14:42 26 4
gpt4 key购买 nike

我正在尝试构建一个通过注入(inject)集成 kie (drools 6) 的 Web (spring-mvc) 应用程序。我使用 kie workbench 创建工作流程,进行编译和部署。我已在项目的 pom.xml 中添加了对此工件的引用,并按照 this blog post 添加了本地 kie-workbench 存储库并且它工作正常(将工件作为我的 maven/spring 项目中的依赖项拉入)。我想做的是将 kiesession 作为依赖项注入(inject)到我的一项服务中,并带有以下代码片段 -

@Service
public class TniServiceImpl implements TniService {

@Inject
@KSession("tniSession")
private KieSession tniSession;
...
}

在我的 root-context.xml 中,我还添加了 kie 命名空间以及对 xsd 的引用。我添加了 org.kie.spring.KModuleBeanFactoryPostProcessor 以及每个 drools 文档。我正在尝试使 CDI 注入(inject)适用于 KSession 扫描和注入(inject)(它已经适用于同一项目中的其他组件,使用 @Inject)。到目前为止,我总是收到“找不到依赖关系的 [org.kie.api.runtime.KieSession] 类型的合格 bean”错误。看起来 spring 无法扫描其中可用的 kie 模块和 session 。需要以下帮助 -

  1. Spring 真的支持 CDI 注入(inject)吗?我是否必须显式配置 kmodules 和 kession as mentioned here
  2. 我是否遗漏了一些可以让扫描和注入(inject)工作的东西?

我的环境如下 -

  1. spring 3.2.6-RELEASE(包括webmvc等组件)
  2. kie-api-6.0.1.FINAL
  3. kie-spring-6.0.1.FINAL
  4. kie-internal-6.0.1.FINAL

我已经浏览了以下链接,但没有运气(大多数情况下他们并没有尝试做我所做的事情) -

  1. Loading Drools/KIE Workbench artifacts directly from the repository
  2. why does loading Drools 6 KIE JAR into code fail?

如果有人能指导我了解这里可能缺少的部分,或者除了在 spring 配置文件中显式定义所有 kmodules/ksessions 之外别无选择,我将不胜感激。

最佳答案

我遇到了同样的问题,并在这里找到了解决方案:http://drools.46999.n3.nabble.com/Spring-4-0-amp-Drools-6-0-1-Integration-issue-td4028052.html

基本上,您需要注入(inject) 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");
}
...
}

根上下文.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" />

希望这有帮助。

更新:

实现此目的的另一种方法是保持 xml 相同,而不是尝试注入(inject) KieSession,而是注入(inject) 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();
...
}
}

关于spring - drools-6 (kie) 自动扫描(来自 spring)来自 kie 工作台部署工件的模块和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21303349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com