tel./fax: +34 91 675 33 06 [email protected] - www ...€¦ · esta obra está licenciada bajo...

4
Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [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ía Desarrollo Sistemas Gran Empresa Producción autentia Certificación o Pruebas Verificación previa RFP Concurso Consultora 1 Consultora 2 Consultora 3 Equipo propio desarrollo Piloto 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) UDDI Web Services Rest Services Social SSO SSO (Cas) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD 2. Auditoría de código y recomendaciones de mejora 4. Cursos de formación (impartidos por desarrolladores en activo)

Upload: others

Post on 30-Apr-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5 Puedes

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)

Page 2: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5 Puedes

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

Page 3: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5 Puedes

Ú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

Page 4: tel./fax: +34 91 675 33 06 info@autentia.com - www ...€¦ · Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5 Puedes

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