나는 weekdays.i 규칙 만이 연기, 온도, motion.can 같은 규칙을 가지고 싶어 하나의 요구 사항이 내 요구 사항에 따라 규칙을 만들 수있는 방법을 제안 할 수 있습니다. 일부 예제를 제공하십시오.Drool 규칙은 cron 표현식을 사용합니까?
cron 이외의 시간을 기반으로 규칙을 실행하는 더 좋은 방법이 있습니까?
나는 weekdays.i 규칙 만이 연기, 온도, motion.can 같은 규칙을 가지고 싶어 하나의 요구 사항이 내 요구 사항에 따라 규칙을 만들 수있는 방법을 제안 할 수 있습니다. 일부 예제를 제공하십시오.Drool 규칙은 cron 표현식을 사용합니까?
cron 이외의 시간을 기반으로 규칙을 실행하는 더 좋은 방법이 있습니까?
평일이나 주말에도 규칙을 위반할 수 있습니다. 내가 직면 한 것과 동일한 요구 사항이 있습니다. 해결책을 찾았습니다. 방금 경작 단계 :
DRL 파일 :
이package com.javacodegeeks.drools;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
global String topicLevel
rule "Drools Introduction"
when
$droolsIntro : DroolsIntroduction(topic == "Drools")
then
System.out.println($droolsIntro.introduceYourself() + ", topic level is " + getDefaultIfNull(topicLevel));
end
rule "Drools Introduction2"
when
$droolsIntro : DroolsIntroduction(isTimeBetweenTwoTime("10:12:12","13:13:13","11:12:12") && isExcludeDay("000000","2016-08-08 21:5:21"))
then
System.out.println("time valid and sunday");
end
function String getDefaultIfNull(String topicLevel) {
return topicLevel == null ? "Moderate" : topicLevel;
}
function Boolean isTimeBetweenTwoTime(String initialTime, String finalTime, String currentTime) {
Boolean valid = false;
System.out.println("time check started");
try {
if (currentTime == null) {
currentTime = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
System.out.println("check current time "+currentTime);
}
System.out.println(initialTime+" -- "+finalTime+" -- -- "+currentTime);
String reg = "^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
if (initialTime.matches(reg) && finalTime.matches(reg) && currentTime.matches(reg)) {
valid = false;
// Start Time
java.util.Date inTime = new SimpleDateFormat("HH:mm:ss").parse(initialTime);
Calendar initialTimecalendar1 = Calendar.getInstance();
initialTimecalendar1.setTime(inTime);
// Current Time
java.util.Date checkTime = new SimpleDateFormat("HH:mm:ss").parse(currentTime);
Calendar currentTimecalendar3 = Calendar.getInstance();
currentTimecalendar3.setTime(checkTime);
// End Time
java.util.Date finTime = new SimpleDateFormat("HH:mm:ss").parse(finalTime);
Calendar finalTimecalendar2 = Calendar.getInstance();
finalTimecalendar2.setTime(finTime);
if (finalTime.compareTo(initialTime) < 0) {
finalTimecalendar2.add(Calendar.DATE, 1);
currentTimecalendar3.add(Calendar.DATE, 1);
}
java.util.Date actualTime = currentTimecalendar3.getTime();
if ((actualTime.after(initialTimecalendar1.getTime())
|| actualTime.compareTo(initialTimecalendar1.getTime()) == 0)
&& actualTime.before(finalTimecalendar2.getTime())) {
System.out.println("condition matched --- ");
valid = true;
}
System.out.println("returning "+valid);
return valid;
} else {
System.out.println("else false "+valid);
return valid;
// throw new IllegalArgumentException("not a valid time,
// expecting HH:MM:SS format");
}
} catch (Exception e) {
System.out.println("exception "+valid);
valid=false;
}
System.out.println("finale "+valid);
return valid;
}
function Boolean isExcludeDay(String validdays,String timeStamp) {
try {
System.out.println("validdays"+validdays);
System.out.println("timeStamp"+timeStamp);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date date = format.parse(timeStamp);
Calendar currentTimecalendar3 = Calendar.getInstance();
currentTimecalendar3.setTime(date);
int dayOfWeek = currentTimecalendar3.get(Calendar.DAY_OF_WEEK)-1;
Character a_char = validdays.charAt(dayOfWeek);
System.out.println(a_char);
if(a_char.compareTo('1')==0){
return false;
}else{
return true;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
return false;
}
//return true;
//return true;
}
발사 규칙에 대한
자바 코드 :
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
DroolsIntroduction droolsIntroduction = new DroolsIntroduction("Drools");
kSession.insert(droolsIntroduction);
kSession.insert(new DroolsIntroduction("All"));
kSession.insert(new DroolsIntroduction("Specific"));
kSession.fireAllRules();
/* try {
String string1 = "11:06:13";
Date time1 = new SimpleDateFormat("HH:mm:ss").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
String string2 = "10:49:00";
Date time2 = new SimpleDateFormat("HH:mm:ss").parse(string2);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.add(Calendar.DATE, 1);
String someRandomTime = "01:00:00";
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
String currenttime = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
Date d = new SimpleDateFormat("HH:mm:ss").parse(currenttime);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(d);
calendar3.add(Calendar.DATE, 1);
Date x = calendar3.getTime();
if (x.after(calendar1.getTime()) && x.before(calendar2.getTime())) {
//checkes whether the current time is between 14:49:00 and 20:11:13.
System.out.println("checkes whether the current time is between 14:49:00 and 20:11:13");
System.out.println(true);
}
} catch (Exception e) {
e.printStackTrace();
}
String ccurrenttime = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
System.out.println(ccurrenttime);
isBetweenValidTime("09:33:00","09:38:00",ccurrenttime);*/
kSession.setGlobal("topicLevel", "Beginner");
kSession.insert(new DroolsIntroduction("All"));
kSession.fireAllRules();
참고 : 내가 000000을 언급하고 isExlude 방법에서 모든 일을 발사합니다 해당 규칙을 의미한다 (000000 0은 켜져 있고 1은 꺼짐을 나타냄)
감사합니다 Mahabaleshwar,하지만 당신은 cron 표현을 사용하여 모든 샘플 있습니다. –
이것은 내가 사용하고있는 솔루션입니다. ur 요구 사항도 같을 수 있습니다. 만약 당신이 cron 표현을 원한다면 : – Mahabaleshwar
그냥이 URL을 참조하십시오 http : //www.mastertheboss.com/jboss-jbpm/drools/how-to-create-time-based-rules – Mahabaleshwar
Drools 설명서를 귀하의 질문에 대한 답으로 복사하여 붙여 넣지 않을 것입니다. 섹션 7.8.2., 타이머 및 캘린더 자신을 찾을 수 있습니다. – laune