Using chtijbug framework
This commit is contained in:
parent
1e7c4f2aa9
commit
61795cfb43
9 changed files with 300 additions and 162 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>();
|
||||
|
|
|
|||
26
simpleWebApp/src/main/java/util/CoursHistoryContainer.java
Normal file
26
simpleWebApp/src/main/java/util/CoursHistoryContainer.java
Normal 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());
|
||||
|
||||
}
|
||||
}
|
||||
30
simpleWebApp/src/main/java/util/Main.java
Normal file
30
simpleWebApp/src/main/java/util/Main.java
Normal 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);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
editor.link_modal.header
Reference in a new issue