Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)
tel./fax: +34 91 675 33 [email protected] - www.autentia.com
Somos su empresa de Soporte a Desarrollo Informático.Ese apoyo que siempre quiso tener...
1. Desarrollo de componentes y proyectos a medida
TecnologíaDesarrolloSistemas
Gran Empresa
Producción
autentia
Certificacióno Pruebas
Verificación previa
RFP Concurso
Consultora 1
Consultora 2
Consultora 3
Equipo propio desarrolloPiloto
3a
3b
1. Definición de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditoría preventiva periódica de calidad.5. Revisión previa a la certificación de proyectos.6. Extensión de capacidad de equipos de calidad.7. Identificación de problemas en producción.
3. Arranque de proyectos basados en nuevas tecnologías
¿Qué ofrece Autentia Real Business Solutions S.L?
Para más información visítenos en: www.autentia.com
Compartimos nuestro conociemiento en: www.adictosaltrabajo.com
Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones híbridas
Tareas programadas (Quartz)Gestor documental (Alfresco)Inversión de control (Spring)
BPM (jBPM o Bonita)Generación de informes (JasperReport)ESB (Open ESB)
Control de autenticación y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)
Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery
JPA-Hibernate, MyBatisMotor de búsqueda empresarial (Solr)ETL (Talend)
Dirección de Proyectos Informáticos.Metodologías ágilesPatrones de diseñoTDD
2. Auditoría de código y recomendaciones de mejora
4. Cursos de formación (impartidos por desarrolladores en activo)
E-mail:
Contraseña:
Inicio Quiénes somos Tutoriales Formación Comparador de salarios Nuestro libro Charlas Más
Deseo registrarmeHe olvidado mis datos de acceso
Entrar
Estás en: Inicio Tutoriales Implementación de una máquina de estados
Síguenos a través de:
Catálogo de serviciosAutentia
Últimas Noticias
Pirineos on Tour
VII Autentia Cycling Day
Autentia patrocina lacharla sobre Java SE 7 en
Madrid
Alfresco Day 2011
XVII Charla Autentia -Grails - Vídeos y Material
Histórico de NOTICIAS
Últimos Tutoriales
Cómo trabajar con branchen SmartGit
Como intentar averiguarel juego de caracteres de
un archivo
Uso del componenteremoteCommand de
primefaces para actualizar elcontenedor de un componentede lightBox en modo iframe
Cómo trabajar con JSF2 yel soporte de inyección de
dependencias de Spring
Creando un tema enLiferay 6.0.6
Últimos Tutoriales del Autor
Técnica del Time-Lapse
Hibernate - Como definirla forma de persistir
nuestros objetos mediante lainterfaz CompositeUserType.
MySQL - Sensibilidad amayúsculas/minúsculas de
los nombres de las tablas
Validación de accionessobre botones en Jsf con
Icefaces
VirtualBox. Configuraciónde la conexión de red.
Share |
DESARROLLADOPOR:Alvaro Cuesta Viñolo
Consultor tecnológico de desarrollo de proyectos informáticos.
Puedes encontrarme en Autentia: Ofrecemos servicios de soportea desarrollo, factoría y formación
Somos expertos en Java/JEE
Regístrate para votar
Implementación de una máquina de estados.
0. Índice de contenidos.
1. Introducción.2. Entorno.3. Diseño del modelo.4. Implementación.5. Conclusión.
1. Introducción
Según wikipedia: "Se denomina máquina de estados a un modelo de comportamiento de un sistema con entradas y salidas,en donde las salidas dependen no sólo de las señales de entradas actuales sino también de las anteriores. Las máquinas deestados se definen como un conjunto de estados que sirve de intermediario en esta relación de entradas y salidas,haciendo que el historial de señales de entrada determine, para cada instante, un estado para la máquina, de forma tal quela salida depende únicamente del estado y las entradas actuales."
2. Entorno
El tutorial está escrito usando el siguiente entorno:
Hardware: MacBook Pro 15' (2.8 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).
Sistema Operativo: Mac OS X Snow Leopard 10.6.3.
NVIDIA GeForce 9600M GT 512Mb.
Toshiba 500 Gb. 5400r.p.m.
3. Diseño del modelo.
Una vez tenemos una definición conceptual veamos que tendremos en cuanta a la hora de diseñar nuestra máquina deestados.Nuestro modelo debe permitir incluir nuevos estados y transiciones sin necesidad de modificar los ya existentes.Las transiciones estarán declaradas en el estado origen.
4. Implementación.
State
C lase abstracta que aporta la funcionalidad común a todos los estados.En la implementación específica de cada estado tenemos que definir las transiciones. (desde este estado a que estadomediante que evento)El método fire nos permite evaluar el evento lanzado para decidir a que estado debemos ir, ante un evento devuelve elestado destino.Si la transición es nula significa que estamos lanzando un evento que no provoca transición, por tanto debemospermanecer en el propio estado.El método getServiceName() nos permite obtener de cada estado su nombre (en este caso se corresponde con su nombrede clase en minúscula).
view plain print ?
01. package com.autentia.stateMachine; 02. 03. import java.util.HashMap; 04. import java.util.Map; 05. 06. public abstract class State { 07.
6Fecha de publicación del tutorial: 2011-08-12
converted by Web2PDFConvert.com
Últimas ofertas de empleo
2011-07-06Otras Sin catalogar -LUGO.
2011-06-20Comercial - Ventas -SEVILLA.
2011-05-24Contabilidad - ExpecialistaContable - BARCELONA.
2011-05-14Comercial - Ventas -TARRAGONA.
2011-04-13Comercial - Ventas -VALENCIA.
08. protected final Map<String, Transition> transitionByEvent = new HashMap<String, Transition>(); 09. 10. public State fire(StateEvent event) { 11. 12. final Transition transition = transitionByEvent.get(event.getClass().getName()); 13. 14. if (transition == null) { 15. return this; 16. } 17. 18. return transition.nextState(event); 19. } 20. 21. @Override 22. public String toString() { 23. return this.getClass().getName(); 24. } 25. 26. public String getServiceName(){ 27. return this.getClass().getSimpleName().toLowerCase(); 28. } 29. 30. }
DefaultState
Anotado como @Service delegamos su gestión a Spring (los maneja como Singleton).Este estado inicial extiende al básico definiendo sus transiciones en el método postConstruct.Este añade al mapa los pares: clave -> evento esperado, valor -> transición del estado origen al estado destino.Por cada implementación, Spring nos genera una instancia inmutable que comparten todas las instancias de aquellosobjetos que tengan estado.
view plain print ?
01. package com.autentia.stateMachine; 02. 03. import javax.annotation.PostConstruct; 04. import org.springframework.beans.factory.annotation.Autowired; 05. import org.springframework.stereotype.Service; 06. 07. @Service 08. public class DefaultState extends State { 09. 10. private State secondState; 11. 12. private State thirdState; 13. 14. @Autowired 15. public void setSecondState(State secondState) { 16. this.secondState = secondState; 17. } 18. 19. @Autowired 20. public void setThirdState(State thirdState) { 21. this.thirdState = thirdState; 22. } 23. 24. @PostConstruct 25. void postConstruct() { 26. transitionByEvent.put(FirstToSecondByEvent.class.getName(), new Transition(this, secondState)); 27. transitionByEvent.put(FirstToThirdByEvent.class.getName(), new Transition(this, thirdState)); 28. } 29. }
Transition
Esta clase representa el par estado actual estado siguiente que define una transición.Se almacenan en el mapa que construye cada estado en su metodo postConstruct.
view plain print ?
01. package com.autentia.stateMachine; 02. 03. public class Transition { 04. 05. private final State sourceState; 06. 07. private final State targetState; 08. 09. 10. public Transition(State sourceState, State targetState) { 11. this.sourceState = sourceState; 12. this.targetState = targetState; 13. } 14. 15. public State nextState(StateEvent event) { 16. return targetState; 17. } 18. 19. }
StateEvent
Esta sencilla clase representa un evento que genera una transición para un estado concreto.
converted by Web2PDFConvert.com
Esta obra está licenciada bajo licencia C reative Commons de Reconocimiento-No comercial-Sin obras derivadas2.5
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemosofrecerte un mejor servicio.
Enviar comentario
(Sólo para usuarios registrados)
» Registrate y accede a esta y otras ventajas «
Anímate y coméntanos lo que pienses sobre este TUTORIAL:
view plain print ?
01. package com.autentia.stateMachine; 02. 03. public class StateEvent { 04. 05. private Object value; 06. 07. public StateEvent() { 08. value = null; 09. } 10. 11. public StateEvent(Object value) { 12. this.value = value; 13. } 14. 15. public Object getValue() { 16. return value; 17. } 18. }
FirstToSecondByEvent
Esta clase representa un evento específico para el estado que hemos definido previamente.Estos enventos serán lanzados a través del fire del estado actual para provocar la transición pertinente.
view plain print ?
01. package com.autentia.stateMachine; 02. 03. public class FirstToSecondByEvent extends StateEvent { 04. // La clase solo representa el evento. 05. }
5. Conclusión.
Como vemos este modelo nos permite ir añadiendo estados y eventos de forma muy sencilla, teniendo únicamente queimplementar la clase que define las transiciones y los eventos que las lanzan.Nos hemos ayudado de Spring para la gestión de los estados como Singleton y que todas las instancias de objetos conestado compartan la máquina de estados sin necesidad de ir creandolos cada vez que provocamos en cambio.
Espero que os haya sido de utilidad. Cualquier aclaración, duda o sugerencia podéis incluirla en la zona de comentarios.
Un saludo.Alvaro Cuesta.
COMENTARIOS
Copyright 2003-2011 © All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto
converted by Web2PDFConvert.com