anchor.diff:  
   Desde esta dirección podéis:
   
  -. Bajar el proyecto sin versionar con el botón _Download ZIP_.
  -. Si tenéis una cuenta en GitHub (muy recomendable) hacer un Fork del repositorio a vuestra cuenta, con el botón Fork,
  - y a continuación hacer un clone,
  -con el botón _Clone in Desktop_ de vuestro Fork, del repositorio a vuestro disco duro (tenéis que tener Git instalado en vuestra
  +* Bajar el proyecto sin versionar con el botón _Download ZIP_.
  +* Si tenéis una cuenta en GitHub (muy recomendable) hacer un Fork del repositorio a vuestra cuenta, con el botón _Fork_, y a continuación hacer un clone, con el botón _Clone in Desktop_ de vuestro Fork, del repositorio a vuestro disco duro (tenéis que tener Git instalado en vuestra
   máquina).
   
   image:https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig180.png[]
   
  -Para acceder al control de versiones Git desde Eclipse en un proyecto ya versionado, por ejemplo
  -el proyecto jdrone en vuestra máquina resultado de hacer primero un fork en vuestra cuenta de 
  -GitHUb desde el repositorio original en la cuenta de lametaweb y a continuación hacer un clone del 
  -
  -fork a vuestra máquina, seguir los siguientes pasos:
  -
  -. Pulsar botón derecho sobre el proyecto en eclipse, en la vista Project Explorer.
  +Para gestionar el versionado Git desde Eclipse en un proyecto ya versionado, por ejemplo el proyecto jdrone en vuestra máquina resultado de hacer primero un fork en vuestra cuenta de GitHUb desde el repositorio original en la cuenta de lametaweb y a continuación hacer un clone del fork a vuestra máquina, seguir los  pasos que se indican:
  +
  +. Pulsar botón derecho sobre el proyecto en eclipse, en la vista _Project Explorer_.
   . Seleccionar _Team > Share proyect..._.
   . Elegir _Git_ y pulsar _Next_.
   . En la ventana siguiente aparecerá vuestro repositorio local. Pulsad _Finish_
  -. En el explorador los iconos de los elementos del proyecto mostrarán un símbolo amarillo
  -abajo a la derecha.
  -. Si pulsamos de nuevo botón derecho sobre el proyecto y la opción _Team_ esta vez aparecerán
  -las opciones correspondientes a las acciones que podemos realizar sobre nuestro repositorio o
  -sobre el repositorio remoto en GitHub.
  +. En el explorador los iconos de los elementos del proyecto mostrarán un símbolo amarillo abajo a la derecha.
  +. Si pulsamos de nuevo botón derecho sobre el proyecto y la opción _Team_ esta vez aparecerán las opciones correspondientes a las distintas acciones que podemos realizar sobre nuestro repositorio o sobre el repositorio remoto en GitHub.
   
   Hasta el próximo Post!
positive.code: public class DisponibilidadBean {
  
  	private Date fecha;
  	private int horas;
  	private int minutos;
  	
  	@Inject
  	private DroneFacade droneFacade;
  
negative.code: ** <h:outputLabel...> se renderiza como un elemento <label> de HTML. Representa una leyenda para un componente del formulario al que se asocia.
  ** <h:inputText...> es un componente de entrada-salida de texto. Para los campos fecha configuro converters predefinidos ya que necesito especificar el formato de entrada-salida. En todos los casos el componente se enlaza con el backing bean a través del atributo value.
  
  ** El componente <h:commandButton...> Representa el botón de submit del formulario HTML. En general va acompañado de un atributo action que indica el método del managed bean que se ejecutará en la fase Invoke Application (si no se registran errores) despues de hacer click sobre él. Esto lo veremos dentro de un momento cuando analicemos el comportamiento dinámico de la página.
  	
  NOTE: Una buena lectura sobre componentes de la librería HTML la tenéis en el tutorial oficial de JSF
  http://docs.oracle.com/cd/E19798-01/821-1841/6nmq2cor0/index.html[aquí]. Además con una simple búsqueda en Google podéis encontrar ejemplos interesantes. Buena parte de estas búsquedas probablemente os lleven a la página  http://stackoverflow.com/[Stackoverflow] cuando traten de JSF o a  https://developer.mozilla.org/en-US/[MDN] cuando se refieran a tecnologías de front-end como HTML5 o CSS3.
  	
  ** Finalmente el área de salida de datos la definimos con un componente <h:dataTable...> que renderiza una tabla HTML. El atributo _value_ enlaza con el Modelo, formado por una colección de Entities de la capa de persistencia que actúan aquí como DTOs, fuera de un contexto de persistencia.
  
  Para completar nuestra visión de la capa web veamos la sucesión de acontecimientos que tienen lugar desde el momento en que la aplicación es despliega en el servidor:
  
  * Despliegue de la aplicación:
  	** Como ya vimos en su momento lo primero que se ejecuta es la carga de datos implementada en un método @PostConstruct del bean CDI anotado como @Singleton y @Startup.
  * Initial request:
  	** Abro un navegador y escribo la URL de la aplicación `http://localhost:8080/jdrone` y pulso la tecla Enter.
  	** Se genera una petición a una carpeta y se aplica la transformación de la URL según el elemento _<welcome-file>_ del descriptor de despliegue _web.xml_ resultando la request http://localhost:8080/jdrone/index.xhtml.
  	** El segundo elemento <servlet-mapping> del mismo fichero indica que la petición es gestionada por el Controlador de JSF, javax.faces.webapp.FacesServlet, que inicia la orquestación de un ciclo de vida corto para esta Initial Request:
  	** Fase RestoreView: Se crea una View vacía y se asocia a la View el listener para el evento _preRenderView_ definido bajo el elemento _<f:metadata>_.
  	** Fase Render Response: Antes de renderizar la View el evento se dispara, se carga una instancia del managed bean en el contexto CDI y se llama al método _listaEstadoDronesPorFecha()_, que se ejecuta y actualiza el Modelo, en este caso el atributo _drones_. Como se trata de una Initial Request la condición a la entrada del método devuelve false de modo que el código de adaptación de los parámetros de la consulta no se ejecuta, evitando un error en tiempo de ejecución. Esta fase se completa con el parseo de la página index.xhtml, generándose el arbol de componentes sobre la View. En el parseo del componente
  _<h:dataTable>_ el atributo _value_ tendrá un valor nulo. El Controlador genera la respuesta a la petición y la envía al navegador, que renderiza la página HTML donde los parámetros aparecen vacios y la tabla no muestra datos.
  
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig140.png[]
  	
  * Postback request:
  	** El usuario rellena los parámetros de entrada del formulario con una fecha y hora similar a la del momento del despliegue para que la consulta devuelva resultados.
  	** El usuario pulsa el botón _Consultar_. Se inicia una Postback Request. Es importante tener claro que una Postback siempre se realiza hacia la misma página del formulario. Veamos cada fase:
  	** Restore View: La View de la Initial Request es recuperada del contexto FacesContext.
  	** Apply Request Values: Los valores escritos por el usuario en el formulario y enviados como parámetros de la petición POST, llamados usualmente valores locales, son asignados a los componentes de la View. Si se producen errores de tipado se registran.
  	** Process Validations: Se ejecutan la conversión de la fechas en objetos Date atendiendo a el formato especificado. Si hay errores se registran, se corta el ciclo y se salta a la fase Render Response para mostrarlos al usuario.
  	** Invoke Application: Si hemos llegado aquí es que no hay errores en los valores del formulario. El componente de acción, o sea, el botón del formulario no tiene ningún atributo actionListener o action y en esta fase por tanto ninguna lógica es ejecutada.
  	** Render Response: Si no existieron errores se renderiza la págna original como respuesta ya que la petición Postback es hacia la propia página. Si se registraron errores se renderiza la página original junto con los mensajes de 
  error en el punto indicado por la etiqueta _<h:messages />_. La respuesta se envía al navegador que ahora sí muestra una tabla con el drone de la base de datos.
  	
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig150.png[]	
  
  . Cuando necesitemos comprobar el orden de ejecución de algún elemento de código en un ciclo petición-respuesta, o verificar el valor de alguna variable del managed bean, haremos uso del depurador (debugger) de Eclipse. Para entrar en el modo debug hay que iniciar el servidor el modo debug. La ejecución se parará en los puntos que hayamos definido haciendo doble click a la izquierda del número de línea. Para avanzar al siguiente punto de ruptura pulsamos F8 y a la siguiente línea F6. Es interesante el icono image:https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig175.png[] que deshabilita/habilita todos los puntos de interrupción de forma simultanea.
  
  Una posible dificultad que puede aparecer al depurar la aplicación por primera vez es que Eclipse muestre el siguiente mensaje cuando el flujo de ejecución llegue al punto de ruptura:
  
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig152.png[]
  
  Para solucionarlo y así poder depurar la aplicación normalmente, tenemos que hacer lo siguiente:
  
  * Pulsamos _OK_. A continuación nos muestra el típico mensaje para cambiar a la perspectiva de Debug, respondemos _Yes_ o _No_ a nuestra elección.
  
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig153.png[]
  
  * En la view de Eclipse donde debería aparecer el código de nuestra clase con el punto de interrupción se muestra en cambio
  el siguiente contenido:
  
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig155.png[]
  
  * Para acceder correctamente a nuestros puntos de interrupción pulsamos el botón que se muestra, con la leyenda _Edit Source Lookup Path_, y en la ventana que aparece pulsamos el botón _Add..._.
  
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig160.png[]
  
  * Seleccionamos en la siguiente ventana _Java Project_.
  
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig165.png[]
  
  * Seleccionamos nuestro proyecto, jdrone y finalmente el botón _OK_.
  
  image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/003/post003-fig170.png[]
  
  Podemos dar aquí por concluido el desarrollo de la versión inicial de nuestra aplicación jdrone. Como hebréis podido comprobar un proyecto Java EE no es más que un árbol de carpetas y una serie de ficheros que siguen unas reglas definidas por Maven y por el estándar Java EE. Además, Eclipse generará una
  serie de ficheros propios, mantenidos de forma automática, de los que no deberemos en general preocuparnos y que no forman parte del contenido la aplicación.
  
  Tenéis disponible el proyecto Maven completo en GitHub en la dirección:
  
  