Webアプリケーション用のルールエンジンを探していて、簡単なルールが見つかりました。しかし、FAQセクションでは、スレッドの安全性に関する制限が記載されています。マルチスレッドが簡単ルールエンジンにどのように影響しますか?
Webコンテナはマルチスレッド環境と考えられていますか? HTTPリクエストはおそらく、アプリケーションサーバーによって作成されたワーカースレッドによって処理されます。
スレッドセーフティはどのように配置されますか?
How to deal with thread safety?
If you run Easy Rules in a multi-threaded environment, you should take into account the following considerations:
Easy Rules engine holds a set of rules, it is not thread safe.
By design, rules in Easy Rules encapsulate the business object model they operate on, so they are not thread safe neither.
Do not try to make everything synchronized or locked down!
簡単ルールエンジンは非常に軽量オブジェクトであり、あなたがスレッドごとにインスタンスを作成することができ、これははるかにスレッド安全性の問題
http://www.easyrules.org/tutorials/shop-tutorial.htmlを回避するための最も簡単な方法です
thたとえば、マルチスレッドがルールエンジンにどのように影響しますか?
public class AgeRule extends BasicRule {
private static final int ADULT_AGE = 18;
private Person person;
public AgeRule(Person person) {
super("AgeRule",
"Check if person's age is > 18 and
marks the person as adult", 1);
this.person = person;
}
@Override
public boolean evaluate() {
return person.getAge() > ADULT_AGE;
}
@Override
public void execute() {
person.setAdult(true);
System.out.printf("Person %s has been marked as adult",
person.getName());
}
}
public class AlcoholRule extends BasicRule {
private Person person;
public AlcoholRule(Person person) {
super("AlcoholRule",
"Children are not allowed to buy alcohol",
2);
this.person = person;
}
@Condition
public boolean evaluate() {
return !person.isAdult();
}
@Action
public void execute(){
System.out.printf("Shop: Sorry %s,
you are not allowed to buy alcohol",
person.getName());
}
}
public class Launcher {
public void someMethod() {
//create a person instance
Person tom = new Person("Tom", 14);
System.out.println("Tom:
Hi! can I have some Vodka please?");
//create a rules engine
RulesEngine rulesEngine = aNewRulesEngine()
.named("shop rules engine")
.build();
//register rules
rulesEngine.registerRule(new AgeRule(tom));
rulesEngine.registerRule(new AlcoholRule(tom));
//fire rules
rulesEngine.fireRules();
}
}
私はJavaScriptを言語としてルールエンジンとしてNashornを使用することに決めました。埋め込みと使用が非常に簡単です。言語が非常によく知られているので、JDK7 +とjavascriptの一部です。ルールの言語としてJSを除外する特定の要件はありますか? – AlexC
共有してくれてありがとう、私は評価のためのルールエンジンに基づいてJavaを見ている。 – youcanlearnanything