Я ищу механизм правил для своего веб-приложения, и я нашел Easy Rules. Однако в разделе часто задаваемых вопросов говорится, что ограничение безопасности потоков.Как многопоточность повлияет на механизм Easy Rules?
Является ли веб-контейнер рассмотрен как многопоточная среда? 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!
Простые правила двигатель очень легкий объект, и вы можете создать экземпляр для каждого потока, это, безусловно, самый простой способ, чтобы избежать проблем безопасности резьбы
Основано на пример, как многопоточность влияет на механизм правил?
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();
}
}
Я решил использовать Nashorn в качестве моего механизма правил с JavaScript в качестве языка. Очень легко вставлять и использовать. Это часть JDK7 + и javascript, поскольку язык очень хорошо известен. У вас есть какие-то конкретные требования, которые могут препятствовать JS в качестве языка для правил? – AlexC
Спасибо за обмен, я смотрю на Java на основе механизма правил для оценки. – youcanlearnanything