Fix minor issues in IDE configuration instructions

= IDE Setup Instructions

Before you start contributing, please follow the instructions below to set up a code style for an IDE of your choice.

== Eclipse Setup

Open the _Preferences_ window, and then navigate to _Java -> Code Style -> Formatter_.
Click _Import_ and then select the `build/optaplanner-ide-config/src/main/resources/eclipse-format.xml` file in the `ide-configuration` directory.

Next navigate to _Java -> Code Style -> Organize Imports_.
Click Import and select the `build/optaplanner-ide-config/src/main/resources/eclipse.importorder` file.

== IDEA Setup

Open the _Preferences_ window (or _Settings_ depending on your edition), navigate to Plugins and install the https://plugins.jetbrains.com/plugin/6546-eclipse-code-formatter[Eclipse Code Formatter Plugin] from the Marketplace.

Restart your IDE, open the _Preferences_ (or _Settings_) window again and navigate to _Other Settings -> Eclipse Code Formatter_.

Select _Use the Eclipse Code Formatter_, then change the _Eclipse Java Formatter Config File_ to point to the `eclipse-format.xml`
file in the `build/optaplanner-ide-config/src/main/resources/` directory.
Make sure the _Optimize Imports_ box is ticked, and select the `eclipse.importorder` file as the import order config file.

== VS Code setup
. Open the _Extensions_ window (Ctrl+Shift+X) and search for _Language Support for Java(TM) by Red Hat_ and install it.
. Create settings file for your workspace
+
[source,shell]
----
cd optaplanner
mkdir .vscode
touch .vscode/settings.json
----
. Put in settings.json the following content:
+
[source,json]
----
{
    "java.format.settings.url": "build/optaplanner-ide-config/src/main/resources/eclipse-format.xml",
    "java.completion.importOrder": [
        "java",
        "javax",
        "org",
        "com"
    ]
}
----

= IDE Setup Instructions

Before you start contributing, please follow the instructions below to setup a code style for an IDE of your choice.

== Eclipse Setup

Open the _Preferences_ window, and then navigate to _Java -> Code Style -> Formatter_.
Click _Import_ and then select the `build/optaplanner-ide-config/src/main/resources/eclipse-format.xml` file in the `ide-configuration` directory.

Next navigate to _Java -> Code Style -> Organize Imports_.
Click Import and select the `build/optaplanner-ide-config/src/main/resources/eclipse.importorder` file.

== IDEA Setup

Open the _Preferences_ window (or _Settings_ depending on your edition), navigate to Plugins and install the https://plugins.jetbrains.com/plugin/6546-eclipse-code-formatter[Eclipse Code Formatter Plugin] from the Marketplace.

Restart your IDE, open the _Preferences_ (or _Settings_) window again and navigate to _Other Settings -> Eclipse Code Formatter_.

Select _Use the Eclipse Code Formatter_, then change the _Eclipse Java Formatter Config File_ to point to the `eclipse-format.xml`
file in the `build/optaplanner-ide-config/src/main/resources/` directory.
Make sure the _Optimize Imports_ box is ticked, and select the `eclipse.importorder` file as the import order config file.

== VS Code setup
. Open the _Extentions_ window (Ctrl+Shift+X) and search for _Language Support for Java(TM) by Red Hat_ and install it.
. Create settings file for your workspace
+
----
cd optaplanner
mkdir .vscode
touch .vscode/settings.json
----
. Put in settings.json the following content:

----
    "java.format.settings.url": "build/optaplanner-ide-config/src/main/resources/eclipse-format.xml",
    "java.completion.importOrder": [
        "java",
        "javax",
        "com",
        "org"
    ]
----


Update 2015-04-15-Empezando-por-el-principio-Nuestro-banco-de-trabajo-22.adoc

= Empezando por el principio. Nuestro banco de trabajo. (2/2)
La metaweb
:hp-tags: Eclipse, JBoss, JBoss Tools
:published_at: 2015-04-15

En esta segunda entrada terminaremos de instalar y configurar el software que nos permitirá en adelante construir nuestras propias aplicaciones Java EE. Como IDE optamos por Eclipse, por ser el más extendido. El salto de uno a otro IDE no es algo costoso, ni en tiempo de aprendizaje ni en tiempo de adaptación del proyecto si los gestionamos bajo Maven o Gradle.

Un IDE debe procurar al desarrollador un entorno que le permita ser lo más productivo posible, ocultando la complejidad de las tecnologías empleadas tras el código fuente generado para resolver las tareas de los documentos de diseño del proyecto. Un ejemplo lo tenemos cuando creamos un web service, aquí el IDE nos generará todas las clases y ficheros necesarios y nosotros sólo tendremos que enfocarnos en definir la API e implementar cada operación.

En mi experiencia Netbeans es un buen entorno, con muchas ayudas, y maduro en su versión en su versión 8, además tiene detrás a una gran comunidad y a Oracle. Como dato en contra, durante el desarrollo de un proyecto mediano, en la versión 8.0, de cuando en cuando se quedaba "pensando" unos segundos. Por otro lado tenemos a JDeveloper, que es el IDE oficial de Oracle, muy potente y una opción recomendable para nuevos proyectos de gran tamaño, y si desarrollamos contra Oracle, y/o el servidor Weblogic. Para proyectos Spring está Eclipse STS que ofrece potentes wizards. Si nuestro servidor es JBoss o el nuevo WildFly podemos optar la solución adoptada aquí, Eclipse + JBoss Tools, o directamente por JBoss Developer Studio. La ventaja de optar por Eclipse es que podemos personalizar nuestro entorno instalando los plugins que elijamos. En definitiva tenemos múltiples opciones y la decisión muchas veces dependerá de las tecnologías que elijamos o nos imponga el tipo de proyecto o el propio cliente.

Ok, antes de nada vamos a crear una sencilla estructura de carpetas donde ir guardardo el trabajo, y donde instalar el software. Por ejemplo la siguiente:

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig009.png[]

Bajo la carpeta `TALLER` creamos las siguientes:

* `BD`: Para las bases de datos que vayamos instalando: MySQL, Derby, etc.
* `IDE`: Para la instalación del IDE Eclipse. Instalad otros si queréis echarles un vistazo.
* `Servidor`: Aquí irá nuestro JBoss EAP edición Comunity. Aunque si en el futuro vemos algo particular de Java EE 7 instalaremos WildFly o GlassFish.
* `Workspace`: Para guardar los proyectos desarrollados en Eclipse.

El fichero comprimido es simplemente una forma rápida de hacer una copia de seguridad del workspace.

Para instalar Eclipse, os aconsejo de nuevo que lo hagáis en Inglés, vamos a la página https://www.eclipse.org/downloads/ y elegimos la instalación para desarrolladores de Java EE.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig010.png[]

Bajamos el fichero `.zip`, lo copiamos en la carpeta `c:\TALLER\IDE\` y seleccionamos Extraer aquí, no hay programa de instalación. Entramos en la carpeta de Eclipse y doble click en `eclipse.exe`. Seleccionamos la carpeta `c:\TALLER\workspace\` como espacio de trabajo. El IDE se carga y cerramos la pantalla inicial de bienvenida pulsando en el icono en la esquina arriba a la derecha.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig015.png[]

NOTE: No marquéis el check `Use this as the default and do not ask again` para así cambiar el workspace si queréis en un futuro. Si lo marcáis podéis volver a ver la pantalla de selección de la carpeta del workspace configurándolo en `Window > Preferences > General > Startup and Shutdown > Workspaces`.

Ahora le toca al servidor. Nuestro entorno de trabajo necesita un servidor completo para depurar el código que estemos desarrollando. Navegamos a la página oficial del servidor JBoss en  http://www.redhat.com/en/technologies/jboss-middleware/application-platform y pulsamos el botón `TRY IT NOW` dentro de la pestaña `TRY`, seleccionada por defecto.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig020.png[]

Esto nos lleva a la página del servidor JBoss para desarrolladores.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig022.png[]

Elegimos nuestro sistema operativo y pulsamos sobre el enlace del installer. Si no estamos ya logados saltaremos a la página de introducción de usuario y contrseña. Procedemos a la creación de una cuenta pulsando el enlace `Create Account`.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig025.png[]

Después de introducir una serie de datos básicos aceptamos los términos del  Programa de Desarrollador de Jboss. Esperamos a que la bajada del fichero acabe. Copiamos el fichero en la carpeta `C:\TALLER\Servidor\` y lo arrancamos escribiendo el comando `java -jar jboss-eap-6.3.0-installer.jar`.

Se iniciará un sencillo wizard de instalación. Si os aparece un mensaje acerca del Firewall de Windows elegid la opción `Permitir`. A la hora de elegir la carpeta de instalación seleccionad como antes, `C:\TALLER\Servidor\`. Escribimos luego un nombre de usuario y una contraseña. Estas credenciales son las del usuario administrador del servidor, que lo gestionará a través del navegador usando la Consola de Administración. Apuntad en un sitio seguro estos datos para no olvidarlos. En la instalación de este servidor se eligieron las credenciales:

[cols="1h,2", width="40"]
|===
|user
|admin

|password
|abcd-1234
|===

Es interesante instalar también los ejemplos que trae el servidor. Son varios proyectos Maven que muestran ejemplos sencillos sobre el uso de las diferentes tecnologías Java EE incidiendo en las gestionadas desde Red Hat: JPA (Hibernate), CDI (Weld), EJB, JSF, etc. Si abrimos el `pom.xml` de alguno de estos proyectos veremos como se definen de las dependencias en proyectos que se despliegan en el servidor JBoss.

El wizard continúa por una serie de pantallas donde dejamos las opciones por defecto, la instalación finaliza a los pocos segundos. Y ya tenemos instalado un flamante servidor Java EE 6 en local. Podemos finalmente guardar y echar un vistazo al script de instalación.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig030.png[]

Comprobaremos que la instalación es correcta desplegando la aplicación web _Hello World!_ localizada en los ejemplos recién instalados. Para arrancar manualmente el servidor abrimos una consola de comandos, vamos a la carpeta `bin\` dentro de la carpeta del servidor y lo iniciamos escribiendo `standalone.bat`. Es importante no cerrar la ventana de comandos ya que si lo hacemos el proceso en que se ejectuta el servidor se terminará y éste se parará. Así que dejamos la ventana de comandos abierta, aunque sí podemos minimizarla.

NOTE: Si antes no instalaste los ejemplos del servidor puedes bajarlos ahora en el enlace https://github.com/jboss-developer/jboss-eap-quickstarts/archive/6.3.0.GA.zip[jboss-eap-quickstarts-6.3.0.GA.zip]. Otra alternativa es obtener la aplicación desde Maven a partir del arquetipo `maven-archetype-site-simple`. Puedes consultar el Post anterior para recordar cómo lo hicimos.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig035.png[]

Ahora abrimos otra consola de comandos y situamos en la carpeta del proyecto web helloworld `C:\TALLER\Servidor\EAP-6.3.0\jboss-eap-quickstarts-6.3.0.GA\helloworld\`.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig040.png[]

Dentro de la carpeta del proyecto Maven escribimos el comando `mvn clean install jboss-as:deploy`. Se inicia la bajada de los artefactos de dependencias y plugins necesarios y finalmente el comando se ejecuta. Con una sola línea de comando hemos llevado a cabo todo el ciclo de construcción del proyecto incluyendo el despliegue de la aplicación en nuestro recién instalado servidor. Aún con un proyecto tan simple podemos apreciar aquí la potencia de Maven. Sí observamos el comando vemos que hemos ejecutado dos phases y un goal. La primera fase, `clean`, elimina cualquier fichero creado en un ciclo de construcción anterior, la segunda ejecuta todas las fases de ciclo por defecto, incluida la fase `install`, que crea una versión snapshot en nuestro repositorio local. Finalmente el goal `deploy` del plugin de Red Hat `jboss-as` toma el artefacto instalable de la carpeta `target\` dentro de la carpeta del proyecto y lo despliega en el servidor.

Abrimos un navegador y vamos a la dirección `http://localhost:8080/jboss-helloworld` y si todo ha ido bien veremos el conocido mensaje `Hello World!`.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig050.png[]

¿Y para desinstalar la aplicación? Otra única linea de comando: `mvn jboss-as:undeploy`. Refrescamos la ventana del navegador para ver el error 404 de recurso no disponible.

El plugin `jboss-as` es capaz de gestionar desde Maven cualquier operación contra el servidor JBoss. Para usarlo sobre un proyecto como acabamos de hacer sólo es necesario declararlo en la sección `<build>` del fichero `pom.xml`. Otra alternativa es incluir el goal de despliegue en la phase final del ciclo por defecto, la fase install, en el fichero pom.xml, y ejecutar entonces el comando mvn clean install, que ahora sólo hace referencia a las dos fases. En el fichero pom.xml tendríamos que tener lo siguiente:

[source,xml]
----
<project>
    ...
    <build>
        ...
        <plugins>
            ...
            <plugin>
                <groupId>org.jboss.as.plugins</groupId>
                <artifactId>jboss-as-maven-plugin</artifactId>
                <version>7.7.Final</version>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
        ...
    </build>
...
</project>
----

Paremos el servidor. Como fue arrancado desde una consola de comandos lo paramos cerrándola. Nos vamos a la ventana de la consola y pulsamos `Ctrl + C`. Escribimos `S` si nos pregunta si queremos finalizar el archivo por lotes y escribimos `exit` para cerrar la ventana.

Vamos ahora a reemplazar la ventana de comando por nuestro IDE para cargar el proyecto y probarlo. Abrimos Eclipse. Una vez dentro del IDE lo primero que hacemos es asegurarnos de que el JRE que se usará sea el contenido en el JDK instalado y no un JRE público fuera del JDK. Esto es necesario porque Eclipse necesita un JDK, como cualquier herrmienta de desarrollo de este tipo, y no le basta sólo con un JRE. Me voy a `Windows > Preferences > Java > Installed JREs` y si el JRE no es el incluido en el JDK lo borramos, añadimos el incluido en el JDK y lo marcamos como JRE por defecto.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig051.png[]

NOTE: Si vamos a experimentar con los ejemplos del servidor en Eclipse es aconsejable comprimir antes la carpeta raiz que los contiene y tener así una copia de seguridad que nos permita recuperar el contenido de los ficheros originales cuando lo necesitemos.

El siguiente paso es importar el proyecto a Eclipse. Me voy a `File > Import > Maven > Existing Maven Projects`. Click en `Next` y luego en `Browse...` localizamos la carpeta del proyecto en `C:\TALLER\Servidor\EAP-6.3.0\jboss-eap-quickstarts-6.3.0.GA\helloworld\`.En el recuadro `Projects` se seleccionará automáticamente el fichero POM del proyecto. Pulsamos en `Finish` y se nos pregunta si deseamos que nos muestre el cheatsheet que es el conjunto de notas del proyecto, si contestamos afirmativamente luego podemos cerrarlas.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig052.png[]

Arrancamos de nuevo el servidor de forma manual desde la ventana de comandos como hicimos antes. Para desplegar el ejemplo importado en el servidor pulsamos botón derecho sobre el proyecto y `Run As… > Run Configurations > Maven Build`, y creamos una nueva configuración de arranque rellenando el campo `Goals` con `clean install jboss-as:deploy`. Pulsamos el botón `Apply` y a continuación el botón `Run` para que Maven realice el ciclo. En la ventana _Consola_ de Eclipse se puede observar la salida de texto del plugin de Maven durante la ejecución del ciclo de construcción.

Como antes para comprobar que la aplicación ha sido desplegada de nuevo vamos al navegador y escribimos la URL `http://localhost:8080/jboss-helloworld`.

Observemos como se muestra nuestro proyecto dentro de Eclipse. En la perspectiva inicial por defecto mostrada vemos la estructura del proyecto en un recuadro a la izquierda de la pantalla. Aquí podemos usar tres views de Eclipse diferentes: Package Explorer, Project Explorer y Navigator. Esta última nos presenta la estructura de directorios del proyecto sin más aderezos y en ocasiones es más limpia y clara. En las otras dos Eclipse aporta información adicional en forma de iconos y carpetas extra.

Vayamos a la view Package Explorer o a la Proyect Explorer, si no está abierta lo hacemos en `Window > Show Wiew > Other...`, probablemente observaremos que sobre el icono del proyecto hay un icono de Warning. Vayamos a la pestaña `Problems` en la parte inferior de la pantalla para ver a que se debe esto.

= Empezando por el principio. Nuestro banco de trabajo. (2/2)
La metaweb
:hp-tags: Eclipse, JBoss, JBoss Tools
:published_at: 2015-04-15

En esta segunda entrada terminaremos de instalar y configurar el software que nos permitirá en adelante construir nuestras propias aplicaciones Java EE. Como IDE optamos por Eclipse, por ser el más extendido. El salto de uno a otro IDE no es algo costoso, ni en tiempo de aprendizaje ni en tiempo de adaptación del proyecto si los gestionamos bajo Maven o Gradle.

Un IDE debe procurar al desarrollador un entorno que le permita ser lo más productivo posible, ocultando la complejidad de las tecnologías empleadas tras el código fuente generado para resolver las tareas de los documentos de diseño del proyecto. Un ejemplo lo tenemos cuando creamos un web service, aquí el IDE nos generará todas las clases y ficheros necesarios y nosotros sólo tendremos que enfocarnos en definir la API e implementar cada operación.

En mi experiencia Netbeans es un buen entorno, con muchas ayudas, y maduro en su versión en su versión 8, además tiene detrás a una gran comunidad y a Oracle. Como dato en contra, durante el desarrollo de un proyecto mediano, en la versión 8.0, de cuando en cuando se quedaba "pensando" unos segundos. Por otro lado tenemos a JDeveloper, que es el IDE oficial de Oracle, muy potente y una opción recomendable para nuevos proyectos de gran tamaño, y si desarrollamos contra Oracle, y/o el servidor Weblogic. Para proyectos Spring está Eclipse STS que ofrece potentes wizards. Si nuestro servidor es JBoss o el nuevo WildFly podemos optar la solución adoptada aquí, Eclipse + JBoss Tools, o directamente por JBoss Developer Studio. La ventaja de optar por Eclipse es que podemos personalizar nuestro entorno instalando los plugins que elijamos. En definitiva tenemos múltiples opciones y la decisión muchas veces dependerá de las tecnologías que elijamos o nos imponga el tipo de proyecto o el propio cliente.

Ok, antes de nada vamos a crear una sencilla estructura de carpetas donde ir guardardo el trabajo, y donde instalar el software. Por ejemplo la siguiente:

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig009.png[]

Bajo la carpeta `TALLER` creamos las siguientes:

* `BD`: Para las bases de datos que vayamos instalando: MySQL, Derby, etc.
* `IDE`: Para la instalación del IDE Eclipse. Instalad otros si queréis echarles un vistazo.
* `Servidor`: Aquí irá nuestro JBoss EAP edición Comunity. Aunque si en el futuro vemos algo particular de Java EE 7 instalaremos WildFly o GlassFish.
* `Workspace`: Para guardar los proyectos desarrollados en Eclipse.

El fichero comprimido es simplemente una forma rápida de hacer una copia de seguridad del workspace.

Para instalar Eclipse, os aconsejo de nuevo que lo hagáis en Inglés, vamos a la página https://www.eclipse.org/downloads/ y elegimos la instalación para desarrolladores de Java EE.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig010.png[]

Bajamos el fichero `.zip`, lo copiamos en la carpeta `c:\TALLER\IDE\` y seleccionamos Extraer aquí, no hay programa de instalación. Entramos en la carpeta de Eclipse y doble click en `eclipse.exe`. Seleccionamos la carpeta `c:\TALLER\workspace\` como espacio de trabajo. El IDE se carga y cerramos la pantalla inicial de bienvenida pulsando en el icono en la esquina arriba a la derecha.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig015.png[]

NOTE: No marquéis el check `Use this as the default and do not ask again` para así cambiar el workspace si queréis en un futuro. Si lo marcáis podéis volver a ver la pantalla de selección de la carpeta del workspace configurándolo en `Window > Preferences > General > Startup and Shutdown > Workspaces`.

Ahora le toca al servidor. Nuestro entorno de trabajo necesita un servidor completo para depurar el código que estemos desarrollando. Navegamos a la página oficial del servidor JBoss en  http://www.redhat.com/en/technologies/jboss-middleware/application-platform y pulsamos el botón `TRY IT NOW` dentro de la pestaña `TRY`, seleccionada por defecto.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig020.png[]

Esto nos lleva a la página del servidor JBoss para desarrolladores.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig022.png[]

Elegimos nuestro sistema operativo y pulsamos sobre el enlace del installer. Si no estamos ya logados saltaremos a la página de introducción de usuario y contrseña. Procedemos a la creación de una cuenta pulsando el enlace `Create Account`.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig025.png[]

Después de introducir una serie de datos básicos aceptamos los términos del  Programa de Desarrollador de Jboss. Esperamos a que la bajada del fichero acabe. Copiamos el fichero en la carpeta `C:\TALLER\Servidor\` y lo arrancamos escribiendo el comando `java -jar jboss-eap-6.3.0-installer.jar`.

Se iniciará un sencillo wizard de instalación. Si os aparece un mensaje acerca del Firewall de Windows elegid la opción `Permitir`. A la hora de elegir la carpeta de instalación seleccionad como antes, `C:\TALLER\Servidor\`. Escribimos luego un nombre de usuario y una contraseña. Estas credenciales son las del usuario administrador del servidor, que lo gestionará a través del navegador usando la Consola de Administración. Apuntad en un sitio seguro estos datos para no olvidarlos. En la instalación de este servidor se eligieron las credenciales:

[cols="1h,2", width="40"]
|===
|user
|admin

|password
|abcd-1234
|===

Es interesante instalar también los ejemplos que trae el servidor. Son varios proyectos Maven que muestran ejemplos sencillos sobre el uso de las diferentes tecnologías Java EE incidiendo en las gestionadas desde Red Hat: JPA (Hibernate), CDI (Weld), EJB, JSF, etc. Si abrimos el `pom.xml` de alguno de estos proyectos veremos como se definen de las dependencias en proyectos que se despliegan en el servidor JBoss.

El wizard continúa por una serie de pantallas donde dejamos las opciones por defecto, la instalación finaliza a los pocos segundos. Y ya tenemos instalado un flamante servidor Java EE 6 en local. Podemos finalmente guardar y echar un vistazo al script de instalación.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig030.png[]

Comprobaremos que la instalación es correcta desplegando la aplicación web _Hello World!_ localizada en los ejemplos recién instalados. Para arrancar manualmente el servidor abrimos una consola de comandos, vamos a la carpeta `bin\` dentro de la carpeta del servidor y lo iniciamos escribiendo `standalone.bat`. Es importante no cerrar la ventana de comandos ya que si lo hacemos el proceso en que se ejectuta el servidor se terminará y éste se parará. Así que dejamos la ventana de comandos abierta, aunque sí podemos minimizarla.

NOTE: Si antes no instalaste los ejemplos del servidor puedes bajarlos ahora en el enlace https://github.com/jboss-developer/jboss-eap-quickstarts/archive/6.3.0.GA.zip[jboss-eap-quickstarts-6.3.0.GA.zip]. Otra alternativa es obtener la aplicación desde Maven a partir del arquetipo `maven-archetype-site-simple`. Puedes consultar el Post anterior para recordar cómo lo hicimos.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig035.png[]

Ahora abrimos otra consola de comandos y situamos en la carpeta del proyecto web helloworld `C:\TALLER\Servidor\EAP-6.3.0\jboss-eap-quickstarts-6.3.0.GA\helloworld\`.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig040.png[]

Dentro de la carpeta del proyecto Maven escribimos el comando `mvn clean install jboss-as:deploy`. Se inicia la bajada de los artefactos de dependencias y plugins necesarios y finalmente el comando se ejecuta. Con una sola línea de comando hemos llevado a cabo todo el ciclo de construcción del proyecto incluyendo el despliegue de la aplicación en nuestro recién instalado servidor. Aún con un proyecto tan simple podemos apreciar aquí la potencia de Maven. Sí observamos el comando vemos que hemos ejecutado dos phases y un goal. La primera fase, `clean`, elimina cualquier fichero creado en un ciclo de construcción anterior, la segunda ejecuta todas las fases de ciclo por defecto, incluida la fase `install`, que crea una versión snapshot en nuestro repositorio local. Finalmente el goal `deploy` del plugin de Red Hat `jboss-as` toma el artefacto instalable de la carpeta `target\` dentro de la carpeta del proyecto y lo despliega en el servidor.

Abrimos un navegador y vamos a la dirección `http://localhost:8080/jboss-helloworld` y si todo ha ido bien veremos el conocido mensaje `Hello World!`.

image::https://raw.githubusercontent.com/lametaweb/lametaweb.github.io/master/images/001/prac001-fig050.png[]

¿Y para desinstalar la aplicación? Otra única linea de comando: `mvn jboss-as:undeploy`. Refrescamos la ventana del navegador para ver el error 404 de recurso no disponible.

El plugin `jboss-as` es capaz de gestionar desde Maven cualquier operación contra el servidor JBoss. Para usarlo sobre un proyecto como acabamos de hacer sólo es necesario declararlo en la sección `<build>` del fichero `pom.xml`. Otra alternativa es incluir el goal de despliegue en la phase final del ciclo por defecto, la fase install, en el fichero pom.xml, y ejecutar entonces el comando mvn clean install, que ahora sólo hace referencia a las dos fases. En el fichero pom.xml tendríamos que tener lo siguiente:

[source,xml]
----
<project>
    ...
    <build>
        ...
        <plugins>
            ...
            <plugin>
                <groupId>org.jboss.as.plugins</groupId>
                <artifactId>jboss-as-maven-plugin</artifactId>
                <version>7.7.Final</version>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
        ...
    </build>
...
</project>
----

Paramos ahora el servidor de manera manual. Como ha sido iniciado desde una consola de comandos lo que hacemos es cerrarla. Nos vamos a la consola y pulsamos Ctrl + C. Respondemos S si nos pregunta si queremos finalizar el archivo por lotes (el bat) y escribimos exit para que la ventana se cierre.

Hagamos ahora lo mismo desde Eclipse. Abrimos Eclipse y aceptamos la carpeta para el espacio de trabajo. No marques el check en esta ventana porque no es infrecuente cambiar la localización del workspace.

Lo primero que hacemos es asegurarnos de que el JRE que Java va a usar es el contenido en el JDK que ya instalamos y no un JRE público fuera del JDK. Esto es necesario porque Eclipse necesita un JDK como cualquier herrmienta de desarrollo de este tipo y no le basta con un JRE o máquina virtual de Java. Me voy a Windows > Preferences > Java > Installed JREs y si el JRE no es el incluido en el JDK lo borramos, añadimos el incluido en el JDK y lo marcamos como JRE por defecto.


Update 2016-02-19-Star-Wars-Stage-Show-and-New-Fireworks-coming-to-Hollywood-Studios.adoc

= Star Wars Stage Show and New Fireworks coming to Hollywood Studios
:hp-tags: Disney World, Hollywood Studios, Star Wars
:published_at: 2016-02-19

There's been an awakening. Have you felt it?

Disney's Hollywood Studios is about to awaken with all new Star Wars experiences! The https://disneyparks.disney.go.com/blog/2016/02/new-star-wars-nighttime-spectacular-announced-set-to-make-theme-park-history/[Disney Parks Blog] is reporting that starting April 4th, a new Star Wars stage show named "_Star Wars: A Galaxy Far, Far Away_" will debut at center stage in Disney's Hollywood Studios. That same day, Captain Phasma (from _The Force Awakens_) will lead several First Order stormtroopers on a march from the Star Wars Launch Bay to center stage.

Then later this summer, a new Star Wars fireworks show, "_Star Wars: A Galactic Spectacular_" will be shown nightly, combining fireworks, special effects, and video projection on the Chinese Theater. The show will include a tower of fire and spotlight beams that form lightsabers in the sky.

Having seen the amazing Star Wars-themed "_Symphony in the Stars_", both at Star Wars Weekends and the newer incarnation of the show that debuted in December, I can only imagine that the new show will be nothing short of jaw-dropping. And having seen the Star Wars segment of _World of Color_ in Disney California Adventure, I imagine the tower of fire being much like the huge fireballs shot during that show. This should be incredible!

What do you think of all of the Star Wars experiences that Disney is offering in Disney's Hollywood Studios in advance of the new Star Wars Land to be opened in a few years? Leave a comment and let's discuss!

= Star Wars Stage Show and New Fireworks coming to Hollywood Studios
:hp-tags: Disney World, Hollywood Studios, Star Wars
:published_at: 2016-02-19

There's been an awakening. Have you felt it?

Disney's Hollywood Studios is about to awaken with all new Star Wars experiences! The https://disneyparks.disney.go.com/blog/2016/02/new-star-wars-nighttime-spectacular-announced-set-to-make-theme-park-history/[Disney Parks Blog] is reporting that starting April 4th, a new Star Wars stage show named "_Star Wars: A Galaxy Far, Far Away_" will debut at center stage in Disney's Hollywood Studios. That same day, Captain Phasma (from _The Force Awakens_) will lead several First Order stormtroopers on a march from the Star Wars Launch Bay to center stage.

Then later this summer, a new Star Wars fireworks show, "_Star Wars: A Galactic Spectacular_" will be shown nightly, combining fireworks, special effects, and video projection on the Chinese Theater. The show will include a tower of fire and spotlight beams that form lightsabers in the sky.

Having seen the amazing Star Wars-themed "_Symphony in the Stars_", both at Star Wars Weekends and the newer incarnation of the show that debuted in December, I can only imagine that the new show will be nothing short of jaw-dropping. And having seen the Star Wars segment of _World of Color_ in Disney California Adventure, I imagine the tower of fire being much like the huge fireballs shot during that show. This should be awesome!

What do you think of all of the Star Wars experiences that Disney is offering in Disney's Hollywood Studios in advance of the new Star Wars Land to be opened in a few years? Leave a comment and let's discuss!


Updated doc annotations for 1.4.3

Updated doc annotations for 1.4.3

[[search-aggregations-metrics-extendedstats-aggregation]]
=== Extended Stats Aggregation

A `multi-value` metrics aggregation that computes stats over numeric values extracted from the aggregated documents. These values can be extracted either from specific numeric fields in the documents, or be generated by a provided script.

The `extended_stats` aggregations is an extended version of the <<search-aggregations-metrics-stats-aggregation,`stats`>> aggregation, where additional metrics are added such as `sum_of_squares`, `variance`, `std_deviation` and `std_deviation_bounds`.

Assuming the data consists of documents representing exams grades (between 0 and 100) of students

[source,js]
--------------------------------------------------
{
    "aggs" : {
        "grades_stats" : { "extended_stats" : { "field" : "grade" } }
    }
}
--------------------------------------------------

The above aggregation computes the grades statistics over all documents. The aggregation type is `extended_stats` and the `field` setting defines the numeric field of the documents the stats will be computed on. The above will return the following:

[source,js]
--------------------------------------------------
{
    ...

    "aggregations": {
        "grade_stats": {
           "count": 9,
           "min": 72,
           "max": 99,
           "avg": 86,
           "sum": 774,
           "sum_of_squares": 67028,
           "variance": 51.55555555555556,
           "std_deviation": 7.180219742846005,
           "std_deviation_bounds": {
            "upper": 100.36043948569201,
            "lower": 71.63956051430799
           }
        }
    }
}
--------------------------------------------------

The name of the aggregation (`grades_stats` above) also serves as the key by which the aggregation result can be retrieved from the returned response.

==== Standard Deviation Bounds
added[1.4.3]

By default, the `extended_stats` metric will return an object called `std_deviation_bounds`, which provides an interval of plus/minus two standard
deviations from the mean.  This can be a useful way to visualize variance of your data.  If you want a different boundary, for example
three standard deviations, you can set `sigma` in the request:

[source,js]
--------------------------------------------------
{
    "aggs" : {
        "grades_stats" : {
            "extended_stats" : {
                "field" : "grade",
                "sigma" : 3 <1>
            }
        }
    }
}
--------------------------------------------------
<1> `sigma` controls how many standard deviations +/- from the mean should be displayed added[1.4.3]

`sigma` can be any non-negative double, meaning you can request non-integer values such as `1.5`.  A value of `0` is valid, but will simply
return the average for both `upper` and `lower` bounds.

.Standard Deviation and Bounds require normality
[NOTE]
=====
The standard deviation and its bounds are displayed by default, but they are not always applicable to all data-sets.  Your data must
be normally distributed for the metrics to make sense.  The statistics behind standard deviations assumes normally distributed data, so
if your data is skewed heavily left or right, the value returned will be misleading.
=====

==== Script

Computing the grades stats based on a script:

[source,js]
--------------------------------------------------
{
    ...,

    "aggs" : {
        "grades_stats" : { "extended_stats" : { "script" : "doc['grade'].value" } }
    }
}
--------------------------------------------------

===== Value Script

It turned out that the exam was way above the level of the students and a grade correction needs to be applied. We can use value script to get the new stats:

[source,js]
--------------------------------------------------
{
    "aggs" : {
        ...

        "aggs" : {
            "grades_stats" : {
                "extended_stats" : {
                    "field" : "grade",
                    "script" : "_value * correction",
                    "params" : {
                        "correction" : 1.2
                    }
                }
            }
        }
    }
}
--------------------------------------------------

[[search-aggregations-metrics-extendedstats-aggregation]]
=== Extended Stats Aggregation

A `multi-value` metrics aggregation that computes stats over numeric values extracted from the aggregated documents. These values can be extracted either from specific numeric fields in the documents, or be generated by a provided script.

The `extended_stats` aggregations is an extended version of the <<search-aggregations-metrics-stats-aggregation,`stats`>> aggregation, where additional metrics are added such as `sum_of_squares`, `variance`, `std_deviation` and `std_deviation_bounds`.

Assuming the data consists of documents representing exams grades (between 0 and 100) of students

[source,js]
--------------------------------------------------
{
    "aggs" : {
        "grades_stats" : { "extended_stats" : { "field" : "grade" } }
    }
}
--------------------------------------------------

The above aggregation computes the grades statistics over all documents. The aggregation type is `extended_stats` and the `field` setting defines the numeric field of the documents the stats will be computed on. The above will return the following:

[source,js]
--------------------------------------------------
{
    ...

    "aggregations": {
        "grade_stats": {
           "count": 9,
           "min": 72,
           "max": 99,
           "avg": 86,
           "sum": 774,
           "sum_of_squares": 67028,
           "variance": 51.55555555555556,
           "std_deviation": 7.180219742846005,
           "std_deviation_bounds": {
            "upper": 100.36043948569201,
            "lower": 71.63956051430799
           }
        }
    }
}
--------------------------------------------------

The name of the aggregation (`grades_stats` above) also serves as the key by which the aggregation result can be retrieved from the returned response.

==== Standard Deviation Bounds
coming[1.4.3]

By default, the `extended_stats` metric will return an object called `std_deviation_bounds`, which provides an interval of plus/minus two standard
deviations from the mean.  This can be a useful way to visualize variance of your data.  If you want a different boundary, for example
three standard deviations, you can set `sigma` in the request:

[source,js]
--------------------------------------------------
{
    "aggs" : {
        "grades_stats" : {
            "extended_stats" : {
                "field" : "grade",
                "sigma" : 3 <1>
            }
        }
    }
}
--------------------------------------------------
<1> `sigma` controls how many standard deviations +/- from the mean should be displayed coming[1.4.3]

`sigma` can be any non-negative double, meaning you can request non-integer values such as `1.5`.  A value of `0` is valid, but will simply
return the average for both `upper` and `lower` bounds.

.Standard Deviation and Bounds require normality
[NOTE]
=====
The standard deviation and its bounds are displayed by default, but they are not always applicable to all data-sets.  Your data must
be normally distributed for the metrics to make sense.  The statistics behind standard deviations assumes normally distributed data, so
if your data is skewed heavily left or right, the value returned will be misleading.
=====

==== Script

Computing the grades stats based on a script:

[source,js]
--------------------------------------------------
{
    ...,

    "aggs" : {
        "grades_stats" : { "extended_stats" : { "script" : "doc['grade'].value" } }
    }
}
--------------------------------------------------

===== Value Script

It turned out that the exam was way above the level of the students and a grade correction needs to be applied. We can use value script to get the new stats:

[source,js]
--------------------------------------------------
{
    "aggs" : {
        ...

        "aggs" : {
            "grades_stats" : {
                "extended_stats" : {
                    "field" : "grade",
                    "script" : "_value * correction",
                    "params" : {
                        "correction" : 1.2
                    }
                }
            }
        }
    }
}
--------------------------------------------------


Fix GeoDistance query example

Fix GeoDistance query example

Cherry pick #28355 in 6.2 branch

[[java-query-dsl-geo-distance-query]]
==== Geo Distance Query

See {ref}/query-dsl-geo-distance-query.html[Geo Distance Query]

["source","java",subs="attributes,callouts,macros"]
--------------------------------------------------
include-tagged::{query-dsl-test}[geo_distance]
--------------------------------------------------
<1> field
<2> center point
<3> distance from center point

[[java-query-dsl-geo-distance-query]]
==== Geo Distance Query

See {ref}/query-dsl-geo-distance-query.html[Geo Distance Query]

["source","java",subs="attributes,callouts,macros"]
--------------------------------------------------
include-tagged::{query-dsl-test}[geo_bounding_box]
--------------------------------------------------
<1> field
<2> center point
<3> distance from center point


[bamboo] Automated branch merge (from foundation-2017:f6e3fe0e3e3aa36b3295b3177326ce7fc5c5c60b)

[[compatibility_matrix]]
== Compatibility Matrix

[options="header, autowidth"]
|===
| OpenNMS       | Java | PostgreSQL | Newts        | Cassandra              | Grafana           | Elasticsearch     | Kafka
| Horizon 19    | 8    | 9.2+       | [green]*Yes* | [green]*1.2, 2.X, 3.0* | [green]*3.X, 4.X* | [green]*2.X, 5.X* | [green]*0.10*
| Horizon 18    | 8    | 9.1+       | [green]*Yes* | [green]*1.2, 2.X, 3.0* | [green]*3.X, 4.X* | [green]*1.0*      | [red]#No#
| Meridian 2016 | 8    | 9.1+       | [green]*Yes* | [green]*1.2, 2.X, 3.0* | [green]*3.X, 4.X* | [red]#No#         | [red]#No#
| Horizon 17    | 8    | 9.1+       | [green]*Yes* | [green]*1.2, 2.X*      | [green]*3.X, 4.X* | [red]#No#         | [red]#No#
| Horizon 16    | 8    | 9.0+       | [red]#No#    | [red]#No#              | [green]*3.X, 4.X* | [red]#No#         | [red]#No#
| Horizon 15    | 7    | 9.0+       | [red]#No#    | [red]#No#              | [red]#No#         | [red]#No#         | [red]#No#
| Meridian 2015 | 7    | 9.0+       | [red]#No#    | [red]#No#              | [red]#No#         | [red]#No#         | [red]#No#
|===

[[compatibility_matrix]]
== Compatibility Matrix

[options="header, autowidth"]
|===
| OpenNMS       | Java | PostgreSQL | Newts        | Cassandra            | Grafana           | Elasticsearch     | Kafka
| Horizon 19    | 8    | 9.2+       | [green]*Yes* | [green]*1.2,2.X,3.0* | [green]*3.X, 4.X* | [green]*2.X, 5.X* | [green]*0.10*
| Horizon 18    | 8    | 9.1+       | [green]*Yes* | [green]*1.2,2.X,3.0* | [green]*3.X, 4.X* | [green]*1.0*      | [red]#No#
| Meridian 2016 | 8    | 9.1+       | [green]*Yes* | [green]*1.2,2.X,3.0* | [green]*3.X, 4.X* | [red]#No#         | [red]#No#
| Horizon 17    | 8    | 9.1+       | [green]*Yes* | [green]*1.2,2.X*     | [green]*3.X, 4.X* | [red]#No#         | [red]#No#
| Horizon 16    | 8    | 9.0+       | [red]#No#    | [red]#No#            | [green]*3.X, 4.X* | [red]#No#         | [red]#No#
| Horizon 15    | 7    | 9.0+       | [red]#No#    | [red]#No#            | [red]#No#         | [red]#No#         | [red]#No#
| Meridian 2015 | 7    | 9.0+       | [red]#No#    | [red]#No#            | [red]#No#         | [red]#No#         | [red]#No#
|===