我们可以在同一个应用程序(drools-spring)集成应用程序中并行运行drools 5和drool 6吗
我有基于drools 5规则引擎的现有应用程序,需要迁移到drools 6,但我们不能一次性完成,即我们必须分多个阶段完成。 所以我的要求是我想在同一个应用程序中支持Drool5和Drool6并行执行我们可以在同一个应用程序(drools-spring)集成应用程序中并行运行drools 5和drool 6吗,spring,drools-guvnor,Spring,Drools Guvnor,我有基于drools 5规则引擎的现有应用程序,需要迁移到drools 6,但我们不能一次性完成,即我们必须分多个阶段完成。 所以我的要求是我想在同一个应用程序中支持Drool5和Drool6并行执行 For that i have created sample poc 1) Created drools spring integration application having both drools 5 and drool 6 spring integration configurati
For that i have created sample poc
1) Created drools spring integration application having both drools 5 and drool 6 spring integration configuration files .
For Drools 5 :
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:drools="http://drools.org/schema/drools-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.1.xsd
http://www.springframework.org/schema/oxm
http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd
http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<drools:grid-node id="node" />
<drools:kbase id="drools5Kbase" node="node">
<drools:resources >
<!-- <drools:resource type="DRF" source="classpath:rules/distribution/regulatory/Test.rf" /> -->
<drools:resource type="DRL" source="classpath:rules/Sample.drl" />
</drools:resources>
</drools:kbase>
</beans>
****Drools 6 :****
<kie:kmodule id="Drools6POC">
<kie:kbase name="rules-two" packages="rules.two" />
<kie:kbase name="drools6KieBase" packages="rules, process" includes="rules-two">
<!--<kie:ksession name="ksessionRules">
<kie:fileLogger file="drools.log" threaded="true" interval="10" />
<kie:listeners>
<kie:ruleRuntimeEventListener ref="org.kie.api.event.rule.DebugRuleRuntimeEventListener" />
<kie:agendaEventListener ref="org.kie.api.event.rule.DebugAgendaEventListener" />
<kie:processEventListener ref="org.drools.core.event.DebugProcessEventListener" />
</kie:listeners>
</kie:ksession>
-->
</kie:kbase>
</kie:kmodule>
2) Added maven depencies for both drools 5 and drools 6 by changing drools 5 standard jar's group id and arctifact id in order to avoid version overwite
3) With above configuration drools 6 working fine but while loading drools 5 spring configuration file getting error
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@70c44470: defining beans [node,drools5Kbase,drools5RuleSet]; root of factory hierarchy
Apr 20, 2015 12:11:33 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@70c44470: defining beans [node,drools5Kbase,drools5RuleSet]; root of factory hierarchy
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'drools5Kbase': Invocation of init method failed; nested exception is org.drools.RuntimeDroolsException: Unable to load dialect 'org.drools.compiler.rule.builder.dialect.mvel.MVELDialectConfiguration:mvel:org.drools.compiler.rule.builder.dialect.mvel.MVELDialectConfiguration'
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.sample.service.ProcessAndRuleService.main(ProcessAndRuleService.java:55)
Caused by: org.drools.RuntimeDroolsException: Unable to load dialect 'org.drools.compiler.rule.builder.dialect.mvel.MVELDialectConfiguration:mvel:org.drools.compiler.rule.builder.dialect.mvel.MVELDialectConfiguration'
at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:310)
at org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurationMap(PackageBuilderConfiguration.java:295)
at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:184)
at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:162)
at org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilderConfiguration(KnowledgeBuilderFactoryServiceImpl.java:22)
at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(KnowledgeBuilderFactory.java:74)
at org.drools.container.spring.beans.KnowledgeBaseBeanFactory.afterPropertiesSet(KnowledgeBaseBeanFactory.java:80)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 12 more
Caused by: java.lang.ClassCastException: org.drools.compiler.rule.builder.dialect.mvel.MVELDialectConfiguration cannot be cast to org.drools.compiler.DialectConfiguration
at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:305)
... 20 more
4) Pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TestDroolsVersion</groupId>
<artifactId>TestDroolsVersion</artifactId>
<version>1.0.0</version>
<name>TestDroolsVersion</name>
<description>TestDroolsVersion</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<drools6.version>6.1.0.Final</drools6.version>
<spring.framework.version>3.1.0.RELEASE</spring.framework.version>
<mvel2.version>2.1.0.drools4</mvel2.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.kie</groupId>
<artifactId>kie-maven-plugin</artifactId>
<version>${drools6.version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-ci</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-spring</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-bpmn2</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.0.2</version>
</dependency>
<!-- START : Drools 5 -->
<dependency>
<groupId>org.drools.custom</groupId>
<artifactId>drools-core-custom</artifactId>
<version>5.3.1.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.drools.custom</groupId>
<artifactId>drools-compiler-custom</artifactId>
<version>5.3.1.Final</version>
<exclusions>
<exclusion>
<groupId>org.mvel</groupId>
<artifactId>mvel2</artifactId>
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-spring</artifactId>
<version>5.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.framework.version}</version>
</dependency>
</dependencies>
</project>
Your help will be appriciated .
1) Can we support drools 5 and drool 6 in parallel in same classpath
2) If yes is there any way or any one have any sample
Thanks and regards
Sri
为此,我创建了示例poc
1) 创建了drools spring集成应用程序,该应用程序具有drools 5和drool 6 spring集成配置文件。
对于口水5:
****口水6:**
2) 通过更改drools 5 standard jar的组id和arctifact id,为drools 5和drools 6添加了maven依赖性,以避免版本过度使用
3) 以上配置drools 6工作正常,但加载drools 5时,弹簧配置文件出错
信息:在org.springframework.beans.factory.support中预实例化单例。DefaultListableBeanFactory@70c44470:定义bean[节点,drools5Kbase,drools5RuleSet];工厂层次结构的根
2015年4月20日下午12:11:33 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry销毁单例
信息:在org.springframework.beans.factory.support中销毁单例。DefaultListableBeanFactory@70c44470:定义bean[节点,drools5Kbase,drools5RuleSet];工厂层次结构的根
org.springframework.beans.factory.BeanCreationException:创建名为“drools5Kbase”的bean时出错:调用init方法失败;嵌套异常为org.drools.RuntimeDroolsException:无法加载方言“org.drools.compiler.rule.builder.dialen.mvel.MVELDialectConfiguration:mvel:org.drools.compiler.rule.builder.dialen.mvel.MVELDialectConfiguration”
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:567)
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)
位于com.sample.service.ProcessAndRuleService.main(ProcessAndRuleService.java:55)
原因:org.drools.RuntimeDroolsException:无法加载方言“org.drools.compiler.rule.builder.dialent.mvel.MVELDialectConfiguration:mvel:org.drools.compiler.rule.builder.dialent.mvel.MVELDialectConfiguration”
位于org.drools.compiler.PackageBuilderConfiguration.adddialent(PackageBuilderConfiguration.java:310)
在org.drools.compiler.PackageBuilderConfiguration.build方言配置图(PackageBuilderConfiguration.java:295)上
位于org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:184)
位于org.drools.compiler.PackageBuilderConfiguration.(PackageBuilderConfiguration.java:162)
位于org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilderConfiguration(KnowledgeBuilderFactoryServiceImpl.java:22)
在org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(KnowledgeBuilderFactory.java:74)上
位于org.drools.container.spring.beans.KnowledgeBaseBeanFactory.AfterPropertieSet(KnowledgeBaseBeanFactory.java:80)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 还有12个
原因:java.lang.ClassCastException:org.drools.compiler.rule.builder.dial.mvel.MVELDialectConfiguration无法强制转换为org.drools.compiler.DialectConfiguration
位于org.drools.compiler.PackageBuilderConfiguration.adddialent(PackageBuilderConfiguration.java:305)
... 20多
4) Pom.xml
4.0.0
TestDroolsVersion
TestDroolsVersion
1.0.0
TestDroolsVersion
TestDroolsVersion
UTF-8
6.1.0.1最终版本
3.1.0.1发布
2.1.0.4
org.kie
kie maven插件
${drools6.version}
真的
org.drools
drools编译器
6.1.0.1最终版本
org.kie
基亚皮
6.1.0.1最终版本
org.kie
基茨
6.1.0.1最终版本
org.kie
基斯普林
6.1.0.1最终版本
org.jbpm
jbpm-bpmn2
6.1.0.1最终版本
朱尼特
朱尼特
4.11
测试
org.apache.logging.log4j
log4j型芯