2
我有基於drools 5規則引擎的現有應用程序並需要遷移到drools 6,但我們無法一次完成,即我們必須在多個階段做。 所以我的要求是我想在同一個應用程序中並行支持droosl 5和drool 6。我們可以在同一個應用程序(drools-spring)集成應用程序中並行運行drools 5和drool 6
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.s[email protected]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.s[email protected]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