Using chtijbug framework

This commit is contained in:
nheron 2014-02-14 14:46:26 +01:00
commit 61795cfb43
9 changed files with 300 additions and 162 deletions

12
pom.xml
View file

@ -85,6 +85,18 @@
<scope>test</scope>
</dependency>
<!--chtijbug-->
<dependency>
<groupId>org.chtijbug.drools</groupId>
<artifactId>drools-framework-runtime-base</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.chtijbug.drools</groupId>
<artifactId>drools-framework-runtime-entity</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>

View file

@ -39,18 +39,14 @@
</build>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-bpmn2</artifactId>
</dependency>
<dependency>
<groupId>org.chtijbug.drools</groupId>
<artifactId>drools-framework-runtime-base</artifactId>
</dependency>
<dependency>
<groupId>org.chtijbug.drools</groupId>
<artifactId>drools-framework-runtime-entity</artifactId>
</dependency>
<!-- Apache CXF dependencies -->
<dependency>
<groupId>org.apache.cxf</groupId>

View file

@ -30,24 +30,35 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.chtijbug.drools:drools-framework-runtime-base:2.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.chtijbug.drools:drools-framework-common:2.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.5" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-io:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.drools:drools-compiler:5.6.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.drools:drools-core:5.6.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.mvel:mvel2:2.1.8.Final" level="project" />
<orderEntry type="library" name="Maven: org.drools:knowledge-api:5.6.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.6.4" level="project" />
<orderEntry type="library" name="Maven: org.drools:knowledge-internal-api:5.6.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.antlr:antlr-runtime:3.3" level="project" />
<orderEntry type="library" name="Maven: org.antlr:antlr:3.3" level="project" />
<orderEntry type="library" name="Maven: org.antlr:stringtemplate:3.2.1" level="project" />
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
<orderEntry type="library" name="Maven: org.eclipse.jdt.core.compiler:ecj:3.5.1" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.1" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.3" level="project" />
<orderEntry type="library" name="Maven: xmlpull:xmlpull:1.1.3.1" level="project" />
<orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
<orderEntry type="library" name="Maven: org.jbpm:jbpm-bpmn2:5.5.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.jbpm:jbpm-flow-builder:5.5.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.jbpm:jbpm-flow:5.5.0.Final" level="project" />
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:2.5.0" level="project" />
<orderEntry type="library" name="Maven: org.chtijbug.drools:drools-framework-runtime-entity:2.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.3" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:15.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-jaxws:2.2.6" level="project" />
<orderEntry type="library" name="Maven: xml-resolver:xml-resolver:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.geronimo.specs:geronimo-jaxws_2.1_spec:1.0" level="project" />
@ -58,7 +69,6 @@
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-common-utilities:2.2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:3.0.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-asm:3.0.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:3.0.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:3.0.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />
@ -86,7 +96,6 @@
<orderEntry type="library" name="Maven: org.springframework:spring-web:3.0.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:3.0.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:3.0.1.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.5" level="project" />
</component>
</module>

View file

@ -1,32 +1,54 @@
package droolscours.loyalty;
import droolscours.loyalty.domains.Ticket;
import org.drools.runtime.StatefulKnowledgeSession;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.RuleBaseSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.MyKnowledgeSessionHelper;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(endpointInterface = "droolscours.loyalty.IServiceCalculate")
public class ServiceCalculate implements IServiceCalculate{
public class ServiceCalculate implements IServiceCalculate {
/*
* (non-Javadoc)
* (non-Javadoc)
*
* @see
* droolscours.loyalty.IServiceCalculate#calculate(droolscours.loyalty.domains
* .Ticket)
*/
private StatefulKnowledgeSession sessionStatefull = null;
/**
* Class Logger
*/
private static Logger logger = LoggerFactory.getLogger(ServiceCalculate.class);
private RuleBasePackage ruleBasePackage = null;
@Override
public Ticket calculate( @WebParam(name = "ticket") Ticket ticket) {
sessionStatefull = MyKnowledgeSessionHelper
.getStatefulKnowledgeSession("File1.drl");
sessionStatefull.insert(ticket);
sessionStatefull.fireAllRules();
System.out.println("Works");
return ticket;
}
public Ticket calculate(@WebParam(name = "ticket") Ticket ticket) {
if (ruleBasePackage == null) {
try {
ruleBasePackage = MyKnowledgeSessionHelper.getRuleBasePackage("File1.drl");
} catch (DroolsChtijbugException e) {
logger.error("Could not create RuleBase", e);
}
}
RuleBaseSession sessionStatefull = null;
try {
sessionStatefull = ruleBasePackage.createRuleBaseSession();
sessionStatefull.insertByReflection(ticket);
sessionStatefull.fireAllRules();
// System.out.println(sessionStatefull.getHistoryContainer().getListHistoryEvent().toString());
} catch (DroolsChtijbugException e) {
logger.error("Error in fireallrules", e);
}
return ticket;
}
}

View file

@ -7,7 +7,7 @@ import java.util.List;
public class Ticket {
private String Id;
private Date date;
private Date dateTicket;
private Float amount;
private Card loyaltyCard;
private Customer customer;
@ -36,12 +36,12 @@ public class Ticket {
Id = id;
}
public Date getDate() {
return date;
public Date getDateTicket() {
return dateTicket;
}
public void setDate(Date date) {
this.date = date;
public void setDateTicket(Date date) {
this.dateTicket = date;
}
private List<TicketLine> ticketLines = new ArrayList<TicketLine>();

View file

@ -0,0 +1,26 @@
package util;
import org.chtijbug.drools.entity.history.HistoryEvent;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.listener.HistoryListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by IntelliJ IDEA.
* Date: 14/02/14
* Time: 11:47
* To change this template use File | Settings | File Templates.
*/
public class CoursHistoryContainer implements HistoryListener {
/**
* Class Logger
*/
private static Logger logger = LoggerFactory.getLogger(MyKnowledgeSessionHelper.class);
@Override
public void fireEvent(HistoryEvent historyEvent) throws DroolsChtijbugException {
logger.info(historyEvent.toString());
}
}

View file

@ -0,0 +1,30 @@
package util;
import droolscours.loyalty.ServiceCalculate;
import droolscours.loyalty.domains.Product;
import droolscours.loyalty.domains.Ticket;
import droolscours.loyalty.domains.TicketLine;
/**
* Created by IntelliJ IDEA.
* Date: 14/02/14
* Time: 13:12
* To change this template use File | Settings | File Templates.
*/
public class Main {
public static void main(String args[]) throws Exception{
ServiceCalculate serviceCalculate= new ServiceCalculate();
Ticket ticket = new Ticket();
ticket.setDateTicket(DateHelper.getDate("2012-01-01"));
TicketLine ticketLine = new TicketLine();
ticket.getTicketLines().add(ticketLine);
ticketLine.setLineTotal(new Float("2.0"));
Product product = new Product();
product.setName("pampers");
ticketLine.setProduct(product);
serviceCalculate.calculate(ticket);
}
}

View file

@ -1,132 +1,174 @@
package util;
import org.chtijbug.drools.runtime.DroolsChtijbugException;
import org.chtijbug.drools.runtime.RuleBasePackage;
import org.chtijbug.drools.runtime.impl.RuleBaseSingleton;
import org.chtijbug.drools.runtime.resource.Bpmn2DroolsRessource;
import org.chtijbug.drools.runtime.resource.DrlDroolsRessource;
import org.chtijbug.drools.runtime.resource.DroolsResource;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.builder.*;
import org.drools.event.rule.*;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyKnowledgeSessionHelper {
private static KnowledgeBase ruleBase = null;
private static KnowledgeBase ruleBase = null;
/**
* Class Logger
*/
private static Logger logger = LoggerFactory.getLogger(MyKnowledgeSessionHelper.class);
private static KnowledgeBase createRuleBase(String drlFile) {
public static RuleBasePackage getRuleBasePackage(String... filenames) throws DroolsChtijbugException {
logger.debug(">>createPackageBasePackage");
CoursHistoryContainer coursHistoryContainer = new CoursHistoryContainer();
RuleBasePackage ruleBasePackage = new RuleBaseSingleton(RuleBaseSingleton.DEFAULT_RULE_THRESHOLD, coursHistoryContainer);
try {
for (String filename : filenames) {
String extensionName = MyKnowledgeSessionHelper.getFileExtension(filename);
DroolsResource resource = null;
if ("DRL".equals(extensionName)) {
resource = DrlDroolsRessource.createClassPathResource(filename);
} else if ("BPMN2".equals(extensionName)) {
resource = Bpmn2DroolsRessource.createClassPathResource(filename);
}
if (resource != null) {
ruleBasePackage.addDroolsResouce(resource);
} else {
throw new DroolsChtijbugException(DroolsChtijbugException.UnknowFileExtension, filename, null);
}
}
ruleBasePackage.createKBase();
// this.ruleBasePackage = ruleBasePackage;
//_____ Returning the result
return ruleBasePackage;
} finally {
logger.debug("<<createPackageBasePackage", ruleBasePackage);
}
}
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(drlFile),
ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors) {
System.err.println(error);
}
throw new IllegalArgumentException(
"Probleme a la lecture du fichier.");
}
ruleBase = KnowledgeBaseFactory.newKnowledgeBase();
ruleBase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return ruleBase;
}
private static String getFileExtension(String ressourceName) {
int mid = ressourceName.lastIndexOf(".");
String ext = ressourceName.substring(mid + 1, ressourceName.length()).toUpperCase();
return ext;
}
public static StatelessKnowledgeSession getStatelessKnowledgeSession(
String drlFile) {
if (ruleBase == null) {
ruleBase = createRuleBase(drlFile);
}
return ruleBase.newStatelessKnowledgeSession();
}
private static KnowledgeBase createRuleBase(String drlFile) {
public static StatefulKnowledgeSession getStatefulKnowledgeSession(
String drlFile) {
if (ruleBase == null) {
ruleBase = createRuleBase(drlFile);
}
return ruleBase.newStatefulKnowledgeSession();
}
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(drlFile),
ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors) {
System.err.println(error);
}
throw new IllegalArgumentException(
"Probleme a la lecture du fichier.");
}
ruleBase = KnowledgeBaseFactory.newKnowledgeBase();
ruleBase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return ruleBase;
}
public static StatefulKnowledgeSession getStatefulKnowledgeSessionWithCallback(
String drlFile) {
StatefulKnowledgeSession session = getStatefulKnowledgeSession(drlFile);
session.addEventListener(new WorkingMemoryEventListener() {
@Override
public void objectUpdated(ObjectUpdatedEvent arg0) {
System.out.println("Object mise à jour \n"
+ "Nouvelles valeurs \n" + arg0.getObject().toString());
}
public static StatelessKnowledgeSession getStatelessKnowledgeSession(
String drlFile) {
if (ruleBase == null) {
ruleBase = createRuleBase(drlFile);
}
return ruleBase.newStatelessKnowledgeSession();
}
@Override
public void objectRetracted(ObjectRetractedEvent arg0) {
System.out.println("Object retiré \n"
+ arg0.getOldObject().toString());
}
public static StatefulKnowledgeSession getStatefulKnowledgeSession(
String drlFile) {
if (ruleBase == null) {
ruleBase = createRuleBase(drlFile);
}
return ruleBase.newStatefulKnowledgeSession();
}
@Override
public void objectInserted(ObjectInsertedEvent arg0) {
System.out.println("Object inséré \n"
+ arg0.getObject().toString());
}
});
session.addEventListener(new DefaultAgendaEventListener() {
@Override
public void beforeActivationFired(BeforeActivationFiredEvent arg0) {
System.out.println("La règle "
+ arg0.getActivation().getRule().getName()
+ " va être déclenchée");
}
public static StatefulKnowledgeSession getStatefulKnowledgeSessionWithCallback(
String drlFile) {
StatefulKnowledgeSession session = getStatefulKnowledgeSession(drlFile);
session.addEventListener(new WorkingMemoryEventListener() {
@Override
public void objectUpdated(ObjectUpdatedEvent arg0) {
System.out.println("Object mise à jour \n"
+ "Nouvelles valeurs \n" + arg0.getObject().toString());
}
@Override
public void agendaGroupPushed(AgendaGroupPushedEvent arg0) {
}
@Override
public void objectRetracted(ObjectRetractedEvent arg0) {
System.out.println("Object retiré \n"
+ arg0.getOldObject().toString());
}
@Override
public void agendaGroupPopped(AgendaGroupPoppedEvent arg0) {
}
@Override
public void objectInserted(ObjectInsertedEvent arg0) {
System.out.println("Object inséré \n"
+ arg0.getObject().toString());
}
});
session.addEventListener(new DefaultAgendaEventListener() {
@Override
public void beforeActivationFired(BeforeActivationFiredEvent arg0) {
System.out.println("La règle "
+ arg0.getActivation().getRule().getName()
+ " va être déclenchée");
}
@Override
public void afterActivationFired(AfterActivationFiredEvent arg0) {
System.out.println("La règle "
+ arg0.getActivation().getRule().getName()
+ " a êté déclenchée");
}
@Override
public void agendaGroupPushed(AgendaGroupPushedEvent arg0) {
}
@Override
public void activationCreated(ActivationCreatedEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void agendaGroupPopped(AgendaGroupPoppedEvent arg0) {
}
@Override
public void activationCancelled(ActivationCancelledEvent arg0) {
}
});
return session;
}
@Override
public void afterActivationFired(AfterActivationFiredEvent arg0) {
System.out.println("La règle "
+ arg0.getActivation().getRule().getName()
+ " a êté déclenchée");
}
public static StatefulKnowledgeSession getStatefulKnowledgeSession(
String drlFile, String rfFile) {
KnowledgeBase ruleBase = null;
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(drlFile),
ResourceType.DRL);
kbuilder.add(ResourceFactory.newClassPathResource(rfFile),
ResourceType.DRF);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors) {
System.err.println(error);
}
throw new IllegalArgumentException(
"Probleme a la lecture du fichier.");
}
ruleBase = KnowledgeBaseFactory.newKnowledgeBase();
ruleBase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return ruleBase.newStatefulKnowledgeSession();
}
@Override
public void activationCreated(ActivationCreatedEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void activationCancelled(ActivationCancelledEvent arg0) {
}
});
return session;
}
public static StatefulKnowledgeSession getStatefulKnowledgeSession(
String drlFile, String rfFile) {
KnowledgeBase ruleBase = null;
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(drlFile),
ResourceType.DRL);
kbuilder.add(ResourceFactory.newClassPathResource(rfFile),
ResourceType.DRF);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors) {
System.err.println(error);
}
throw new IllegalArgumentException(
"Probleme a la lecture du fichier.");
}
ruleBase = KnowledgeBaseFactory.newKnowledgeBase();
ruleBase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return ruleBase.newStatefulKnowledgeSession();
}
}

View file

@ -9,23 +9,24 @@ import droolscours.loyalty.domains.TicketLine;
import droolscours.loyalty.domains.Ligneop;
import droolscours.loyalty.domains.Product
import util.DateHelper;
dialect "MVEL"
dialect "mvel"
rule "createdateOpPampers"
when
then
// MyDate t = new MyDate();
// t.setUneDate1(DateHelper.getDate("2010-12-01"));
// t.setUneDate1(DateHelper.getDate("2010-12-31"));
// t.setUneOp("pampers");
// insert(t);
MyDate t = new MyDate();
t.setUneDate1(DateHelper.getDate("2010-12-01"));
t.setUneDate2(DateHelper.getDate("2014-12-31"));
t.setUneOp("pampers");
insert(t);
end
rule "opPameprs"
when
MyDate(uneOp=="pampers",$d1:uneDate1,$d2:uneDate2)
$t : Ticket(date >=$d1,date <=$d2)
$l : TicketLine(ticketID==$t.Id)
$p : Product(Id == $l.productID , name=="pampers")
$p : Product( name=="pampers")
$l : TicketLine(product==$p)
$t : Ticket(ticketLines contains $l,dateTicket >= $d1 && dateTicket <= $d2)
then
$l.setOp(new Ligneop());
$l.getOp().setMontantReduction(new Float($l.getLineTotal()*0.2));