SCXML : State Chart XML

Events

Deux types d'évènements

Il existe deux types d'évènements à gérer avec la machine d'états : les évènements que l'on reçoit de la machine et les évènements que l'on veut envoyer à la machine. En effet, ces évènements dans le premier cas permettront de savoir dans quelle transition on se situe alors que dans le deuxième cas ils permettront d'effectuer une transition sur la machine.

Send Events

Pour envoyer un évènement à la machine, il faut utiliser l'objet TriggerEvent. Cet objet prend deux paramètres : un eventName qui est le nom de l'évènement qu'on veut lever, et un eventType SIGNAL_EVENT. Une fois l'objet créé, il faut le donner à la machine d'état (SCXMLExecutor) via sa méthode triggerEvent. Il est possible d'envoyer une série de TriggerEvent (tableau) via la méthode triggerEvents.

				//import org.apache.commons.scxml.SCXMLExecutor;
				//import org.apache.commons.scxml.TriggerEvent;
				//import org.apache.commons.scxml.model.ModelException;

				// where "exec" is the SCXMLExecutor instance
				TriggerEvent te = new TriggerEvent("foo.bar",
									  TriggerEvent.SIGNAL_EVENT);
				try {
					exec.triggerEvent(te);
				} catch (ModelException me) {
					// The events left the engine in inconsistent state
				}
			

Receive Events

Pour recevoir les évènements de la machine, il faut créer un objet SCXMLListener. Il s'agit d'une interface qui présente trois méthodes :

Une fois l'objet créé, il faut l'ajouter à la machine via la méthode addListener qui prend l'objet précédent en paramètre.

Pour plus d'informations...

Je vous invite à consulter le site officiel d'Apache ainsi que la Javadoc pour mieux appréhender les principes de fonctionnement des évènements.