Я пишу сервис RESTful для вычисления некоторых значений в соответствии с некоторыми правилами.
Например:
Существует такой JSON:
{ "amount": 100,
"destination":"A"
}
Thisdata - это тело запроса, отправьте его моему контроллеру:
@RequestMapping(value = "/orders", method= RequestMethod.POST)
public void getOrderRequest(@RequestBody Order order){
// use Drools to calculate and return the result
}
Вот класс сущностей:
public class Order{
private Integer amount;
private String destination;
private Float price;
// getters and setters
}
Я использую Drools для расчета цены (поддельный код):
package rules
import entity.Order
rule "rule1"
no-loop true
lock-on-active true
salience 1
when
$s : Order(amount <= 50 && destination=="A")
then
$s.setPrice(1000);
update($s);
rule "rule2"
no-loop true
lock-on-active true
salience 1
when
$s : Order(amount > 50 && destination=="A")
then
$s.setPrice(2000);
update($s);
Это работает нормально. Все правила можно изменять и работать без перезапуска моей службы REST.
Вот сценарий, новое поле добавлено в заказ JSON:
{ "amount": 100,
"destination":"A",
"customer":"Trump"
}
Добавить новое правило: если клиентом является Трамп, то удвойте цену:
rule "rule3"
no-loop true
lock-on-active true
salience 1
when
$s : Order(customer == "Trump")
then
$s.setPrice(price * 2);
update($s);
Но мне нужно добавить новую переменную в мой класс Order и перезапустить мой сервис.
Интересно, есть ли способ сделать это без перезапуска моего REST-сервиса?
Или я могу просто динамически обрабатывать данные JSON с другими BRMS?