/** * */ package org.springmodules.jsr94.core; import java.rmi.RemoteException; import java.util.List; import javax.rules.Handle; import javax.rules.InvalidHandleException; import javax.rules.InvalidRuleSessionException; import javax.rules.StatefulRuleSession; import org.springmodules.jsr94.support.StatefulRuleSessionCallback; /** * @author janm * */ public class BusinessBean { /** * Jsr94Template */ private Jsr94Template template; /** * Broser fact handle */ private Handle browserHandle; /** * Tests stateful ruleset execution in Tx */ public void statefulInTransaction() { List result = (List) template.executeStateful("test", null, new StatefulRuleSessionCallback() { public Object execute(StatefulRuleSession session) throws InvalidRuleSessionException, InvalidHandleException, RemoteException { browserHandle = session.addObject("Gecko"); session.executeRules(); return session.getObjects(); } }); result = (List) template.executeStateful("test", null, new StatefulRuleSessionCallback() { public Object execute(StatefulRuleSession session) throws InvalidRuleSessionException, InvalidHandleException, RemoteException { session.removeObject(browserHandle); session.addObject("MSIE"); session.executeRules(); return session.getObjects(); } }); } /** * Tests stateful ruleset execition outside Tx */ public void statefulOutsideTransaction() { List result = (List) template.executeStateful("test", null, new StatefulRuleSessionCallback() { public Object execute(StatefulRuleSession session) throws InvalidRuleSessionException, InvalidHandleException, RemoteException { browserHandle = session.addObject("Gecko"); session.executeRules(); return session.getObjects(); } }); result = (List) template.executeStateful("test", null, new StatefulRuleSessionCallback() { public Object execute(StatefulRuleSession session) throws InvalidRuleSessionException, InvalidHandleException, RemoteException { try { session.removeObject(browserHandle); throw new InvalidRuleSessionException("This must be invalid!"); } catch (InvalidRuleSessionException ex) { // expected } session.addObject("MSIE"); session.executeRules(); return session.getObjects(); } }); } /** * Sets new value for field template * @param template The template to set. */ public final void setTemplate(Jsr94Template template) { this.template = template; } }