我试图执行消防,短跑和报警规则从留档口水。
我正在使用drools 6.5运行时,当我使用状态完整会话(KIE会话)执行此示例时,我可以看到下面的输出与留档中提到的输出不同。
下面是我在工作内存中插入Spreader and Fire时看到的输出,我看到的输出是:
一切正常报警
留档的实际输出是:
一切正常,报警打开房间厨房的喷水器打开房间办公室的喷水器
感谢您能帮我弄清楚为什么其他两条规则没有被解雇。
附加源代码:
package com.company.license
import com.sample.dto.*
rule "When there is a fire turn on the sprinkler"
when
Fire($room : room)
$sprinkler : Sprinkler( room == $room, on == false )
then
modify( $sprinkler ) { setOn( true ) };
System.out.println( "Turn on the sprinkler for room " + $room.getName() );
end
rule "When the fire is gone turn off the sprinkler"
when
$room : Room( )
$sprinkler : Sprinkler( room == $room, on == true )
not Fire( room == $room )
then
modify( $sprinkler ) { setOn( false ) };
System.out.println( "Turn off the sprinkler for room " + $room.getName() );
end
rule "Raise the alarm when we have one or more fires"
when
exists Fire()
then
insert( new Alarm() );
System.out.println( "Raise the alarm" );
end
rule "Cancel the alarm when all the fires have gone"
when
not Fire()
$alarm : Alarm()
then
retract( $alarm );
System.out.println( "Cancel the alarm" );
end
rule "Status output when things are ok"
when
not Alarm()
not Sprinkler( on == true )
then
System.out.println( "Everything is ok" );
end
package com.sample.dto;
public class Alarm {
}
package com.sample.dto;
public class Fire {
private Room room;
public Fire(Room room2) {
// TODO Auto-generated constructor stub
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
}
package com.sample.dto;
public class Room {
private String name;
public Room(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.sample.dto;
public class Sprinkler {
private Room room;
private boolean on;
public Sprinkler(Room room) {
// TODO Auto-generated constructor stub
this.room = room;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
public boolean isOn() {
return on;
}
public void setOn(boolean on) {
this.on = on;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="rules">
<ksession name="ksession-rules"/>
<ksession name="statelesssession" type="stateless" default="true"/>
</kbase>
<kbase name="dtables" packages="dtables">
<ksession name="ksession-dtables"/>
</kbase>
<kbase name="process" packages="process">
<ksession name="ksession-process"/>
</kbase>
</kmodule>
public class FireAlarmStateful {
public static final void main(String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession ksession = kContainer.newKieSession("ksession-rules");
String[] names = new String[]{"kitchen", "bedroom", "office", "livingroom"};
Map<String,Room> name2room = new HashMap<String,Room>();
Room kitchen = new Room("kitchen");
Room office = new Room("office");
ksession.insert( kitchen );
ksession.insert( office );
Sprinkler sprinkler1 = new Sprinkler( kitchen);
Sprinkler sprinkler2 = new Sprinkler( office);
ksession.insert( sprinkler1 );
ksession.insert( sprinkler2 );
ksession.fireAllRules();
Fire kitchenFire = new Fire( kitchen );
Fire officeFire = new Fire( office );
FactHandle kitchenFireHandle = ksession.insert( kitchenFire );
FactHandle officeFireHandle = ksession.insert( officeFire );
ksession.fireAllRules();
ksession.dispose();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Output I get is :
Everything is ok
Raise the alarm
Output mentioned in the Drools Documentation:
Everything is ok
Raise the alarm
Turn on the sprinkler for room kitchen
Turn on the sprinkler for room office
我有一个补丁。火灾对象的构造函数为空。
public Fire(Room room2) {
// TODO Auto-generated constructor stub
}
我修好了。
public Fire(Room room2) {
this.room = room2 ;
}
它奏效了。
我正在制作一个应用程序,让用户选择几天,并在这些天的特定时间启动警报。 让我们以我的问题为例,我希望我的闹钟在每周五12:30触发,问题是它从来没有触发过闹钟,即使我在同一天,这是我的代码
有没有一种方法可以通过使用集合名称变量来概括它
例如,当我进入登录页面时...sessionCreated-将一个会话添加到计数器:1 然后,当我点击log out按钮时,会话计数减少了1(这很好),但紧接着会话计数增加了1(不是预期的)。 例如,当我按下注销按钮时...sessionDestroyed-从计数器0中扣除一个会话sessionCreated-将一个会话添加到计数器1中 我再次需要帮助来理解请。 这是我的Spring安全设置...
Flink中的会话窗口在prod env上没有按预期工作(相同的逻辑在本地env上工作)。这个想法是为特定的用户ID发出“sample_event_two”的计数 尽管集合中存在sample_event_one(通过验证日志消息“已接收sample_event_one”是否存在来确认)并且计数计算正确,但我没有看到任何输出事件被创建。我看到日志消息“未找到 sampleOneEvent 事件,而不
1)对于上面的代码,如果LogSearchRemote实现bean是有状态的,那么 没有错误,但是如果LogSearchRemote实现bean是无状态的,那么会抛出异常“$Proxy53不能强制转换为hk.gov.ehr.service.tch.als.admin.logsearch.ejb.LogSearchRemote”,为什么? 2)对于有状态会话bean,每次 返回不同的logSearc
下面是C 17形式的规则([basic.lval]/8),但它在其他标准中看起来很相似(C 98中是“lvalue”而不是“glvalue”): 8如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义: (8.4)-对应于对象动态类型的有符号或无符号类型 这条规则听起来像是“除非你做X,否则你会得到UB”,但这并不意味着如果你做了X,你就不会得到UB,正如人们所期望的那样