Ваш код работает на меня. Приведенный ниже тест печатает правильное имя клиента с соответствующим кодом продукта.
test
@DroolsSession(resources = { "classpath:/test.rdslr", "classpath:/business.dsl" })
public class PlaygroundTest {
@Rule
public DroolsAssert drools = new DroolsAssert();
@Test
public void testIt() {
drools.insertAndFire(new Client("client1", 40, asList(new Product("1", "product 1"), new Product("2", "product 2"))));
drools.insertAndFire(new Client("John", 50, asList(new Product("3", "product 3"), new Product("4", "product 4"))));
}
}
rule
regla X
cuando
Hay un cliente
- edad es mayor o igual que 12
- nombre igual "John"
Hay producto
- codigo es igual que "4"
entonces
print client name
fin
dsl
[keyword][]regla=rule
[keyword][]cuando=when
[keyword][]entonces=then
[keyword][]fin=end
[when][]es menor o igual que=<=
[when][]es menor que=<
[when][]es mayor o igual que=>=
[when][]es mayor que=>
[when][]es igual que===
[when][]igual===
[when][]- {campo:\w*} {operador} {valor:\d*}={campo} {operador} {valor}
[when][]Hay un cliente =$c : Client($products: products)
[when][]nombre = name
[when][]edad = age
[when][]codigo = code
[when][]Hay producto = $p : Product() from $products
[then]print client name = System.out.println($c.name);
модель
public class Client {
public String name;
public int age;
public List<Product> products;
public Client(String name, int age, List<Product> products) {
this.name = name;
this.age = age;
this.products = products;
}
public List<Product> getProducts() {
return products;
}
}
public class Product {
public String code;
public String description;
public Product(String code, String description) {
this.code = code;
this.description = description;
}
}
тестовый выход
00:00:00 --> inserted: Client[name=client1,age=40,products=[org.droolsassert.Product@4fbdc0f0, org.droolsassert.Product@2ad3a1bb]]
00:00:00 --> fireAllRules
00:00:00 --> inserted: Client[name=John,age=50,products=[org.droolsassert.Product@71e9a896, org.droolsassert.Product@6b9267b]]
00:00:00 --> fireAllRules
00:00:00 <-- 'X' has been activated by the tuple [Client, Product]
John
После вставки первого клиента никакие правила не сработали, после вставки Джона было сработано правило и напечатано имя клиента.
Какой неожиданный результат вы получили?