1. Configurando directamente un RuleEvaluator como Spring-Bean.
2. Utilizar RuleEvaluatorFactoryBean
Ambas tiene su beneficios que pasaré a explicar.
La primera tiene la enorme ventaja de que se permite inyectar dependencias a las rules directamente (Servicios, DAOs, collaborations, etc).
<bean class="net.sf.opentranquera.rules.RuleEvaluator" id="ruleEvaluator">
<property name="rules">
<map>
<entry key="ventas">
<ref local="andRule"/>
</entry>
</map>
</property>
</bean>
La declaración de la regla es:
<bean class="net.sf.opentranquera.rules.logical.AndRule" id="andRule">
<constructor-arg index="0">
<list>
<bean class="ar.com.eds.mcd.mcventas.process.rules.VentasNetasRule"/>
<bean class="ar.com.eds.mcd.mcventas.process.rules.VentasBrutasRule"/>
...
Luego, puedo inyectar el RuleEvaluator en cualquier bean de spring:
<bean class="ar.com.eds.mcd.mcventas.services.VentasServiceImpl" id="ventasService">
<property name="ruleEvaluator" ref="ruleEvaluator"/>
... demas dependencias
y hacer uso de este:
RuleResult result = this.ruleEvaluator.evaluateRule("ventas");
if(result.isSuccessful() ) {
...
}
Ahora bien, como dijimos configurando Rules de esta forma obtenemos la ventaja de no solo inyectar el RuleEvaluator en diferentes objetos de Spring sino que podemos inyectar diferentes objetos de Spring en nuestras rules.
Pero que sucede si nosotros ya tenemos configuradas las rules utilizando el archivo propietario de OT-Rules (rules.xml) o deseamos utilizar el plugin de eclipse que nos facilita la creación y administración de rules?
Bueno, en este caso lo que debemos hacer es utilizar el FactoryBean que provee OT-Bridges de la siguiente forma:
<bean id="ruleEvaluator" class="net.sf.opentranquera.spring.rules.RuleEvaluatorFactoryBean">
<property name="rules" value="rules.xml"/>
</bean>
Luego podemos inyectar el RuleEvaluator en cualquier objeto de spring.
No hay comentarios:
Publicar un comentario