Drools documentation erwähnt, dass Regeln Attribute wie date-effective
und date-expires
verwenden können, um einen absoluten Regelgültigkeitszeitraum anzugeben.Drools: Zeitbeschränkte Regel
Zum Beispiel
rule "Date-restricted rule"
date-effective "20.2.2013 8:00" # 8 AM
date-expires "20.2.2013 16:00" # 4 PM
when
then
end
geifert auch periodisch wiederholt Regeln mit Intervall als timer(int:)
und cron als timer(cron:)
unterstützt, aber es bedeutet, dass die Regel in solchen Punkten abgefeuert wird.
Frage:
Ich bin interessiert, ob es eine Möglichkeit ist, wie in regelmäßigen Abständen zur Verfügung zu spezifizieren (nicht gebrannt) Regeln mit Zeitbeschränkung. Lassen Sie uns zum Beispiel die Geschäftszeiten in einer Firma darstellen - die Operation kann nur während der offiziellen Arbeitszeit, aber nicht außerhalb der Arbeitszeit durchgeführt werden.
würde ich so etwas wie dieses mögen, aber es ist Drools nicht gültige Regel
rule "Time-restricted rule"
time-effective "8:00" # 8 AM
time-expires "16:00" # 4 PM
when
then
end
Wäre möglich sein, diese Regel zu verlängern aktiv 04.00 nur von Montag bis Freitag 8.00 Uhr sein?
Solution (von Esteban Aliverti):
geifert keine direkte Unterstützung für zeitbasierte Keywords haben, aber sie bieten viel mächtiger Kalendermechanismus Quartz Bibliothek. StatefulSession
oder WorkingMemory
erstellt von StatelessSession
verfügt über Methoden zum Definieren dieser Kalender, die Datum und Uhrzeit einschränken können, wann die Regel ausgelöst werden kann.
Beispiel: Regeldefinition
rule "Business hours only"
calendars "business-hours"
when
SomeAttachedClass()
then
System.out.println("Rule is fired");
end
Kalender Definition
import org.quartz.impl.calendar.DailyCalendar;
// stateless session and working memory or directly stateful session
StatefulKnowledgeSession memory = session.newWorkingMemory();
// interested time range is 8-16, also there is many Calendar implementation, not just Daily
DailyCalendar businessHours = new DailyCalendar(8, 0, 0, 0, 16, 0, 0, 0);
// by default, defined time is EXCLUDED, the inversion makes it INCLUDED and excludes the rest
businessHours.setInvertTimeRange(true);
//convert the calendar into a org.drools.time.Calendar
org.drools.time.Calendar businessHoursCalendar = QuartzHelper.quartzCalendarAdapter(businessHours);
//Register the calendar in the session with a name. You must use this name in your rules.
memory.getCalendars().set("business-hours", businessHoursCalendar);
Erstaunlich, das ist genau das, was ich brauche. Vielen Dank für Ihre Mühe! – Gaim
Die 'QuartzHelper' Klasse ist in den neueren Versionen von Drools nicht verfügbar; Wenn Sie es weiterhin verwenden möchten, können Sie es manuell von [hier] herunterladen (http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.drools/drools-api/ 5.1.1/org/drools/runtime/hilfe/QuartzHelper.java /). Außerdem wurde 'org.drools.time.Calendar' in neueren Versionen von Drools in' org.kie.api.time.Calendar' geändert. –