4,8. Configuración del entorno de aplicaciones

4,8. Configuración del entorno de aplicaciones

Las App Vaadin són esplegadas como Webs App Java. Una “App web” Java puede contener cierto numero de servlets, i cada cual puede ser una App Vaadin o contener otros servlets, un recurso estatico como archibos HTML. Como App web suele comprimir-se en un archibo WAR (Web App Archibo), que puede ser desplegado a un server Web App Java (o a un container servlet para ser mas exacto).

Para un tutorial mas detallado en como las App web son enpaquetadas, busca en cualquier libro Java que discuta “Java Servlets”. Sun tiene unas referencias online exeltenes en
Sun link

Recuerda que, en el lenguajer Servlet Java, “App Web” quiere decir una coleccion de Java Servlets o Portlets, JSP y paginas estaticas HTML, y otros varios recursos que forma una App. Como una Web App Java es normalmente enpaketado como un archibo WAR para ser desplegado. Las App Vaadin, por otro lado, funcionan como servlets dentro de una Web App Java. Existen otro tipos de App Web. Para prevenir confusiones con la definicion general de una “App web”, usaremos el termino “Web App Java” como WAR en este libro.

4.8.1. Creando desplegables WAR en Eclipse

Para desplegar una App a un Web Server, nessesitas crear un pakete WAR. Aqui damos las instrucciones para Eclipse.

Select File → Export and then Web → WAR File. Or, right-click the project in the Project Explorer and select Web → WAR File.

Select the Web project to export. Enter Destination file name (.war).

Make any other settings in the dialog, and click Finish.

4.8.2. Contenidos de una Web App

Los siguientes Archibos son nessesarios en una Web App para hacerla funcionar.

Organización App web:

WEB-INF/web.xml

Este es el codigo Web App standard que define como la App esta organizada. Busca en cualquier libro Java sobre el contenido de este archibo. Puedes ver un ejemplo en "Ejemplo 4.1, “web.xml”

WEB-INF/lib/vaadin-6.x.x.jar

Esto es la libreria Vaadin. Esta incluida en el producto del enpaquetado en la carpeta lib.

Las classes de tu App

Tienes que incluir tus classes App tambien en un archibo JAR en WEB-INF/lib o como classes en WEB-INF/classes

Los archibos de tus propias tematicas (opcional)

Si tu App usa una temática especial (la forma en que se vé i se siente), tienes que incluirla en la carpeta VAADIN/themes/themename.

Packs App (widget sets) (OPCIONAL)

Si tu App usa una App (Widget) specifica-projecto, tiene que ser comprimida/compiled en la carpeta VAADIN/widgetset/

4.8.3. Descriptor desplegable web.xml

El descriptor desplegable és un archibo XML con el mismo nombre que web.xml en la carpeta WEB-INF de una web app. Es una pieza standard en Java EE que describe como la Web App devería ser desplegada. La estructura del descriptor desplegable esta ilustrada en el siguiente ejemplo. Tu simplemente despliegas App como herramientas Servlets con la classe agrupadora “com.vaadin.terminal.gwt.server.ApplicationServlet - comunicafcion.vaadin.final.gwt.server.AppServlet”. La classe de la App actual esta especificado gracias al codigo de la App con el nombre especifico de la classe App al Servlet. El servlet a continuacion es conecao a una URL en un camino estandart por los Servlets Java.

Ejemplo 4.1. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
  id="WebApp_ID" version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>
        com.vaadin.terminal.gwt.server.ApplicationServlet
    </servlet-class>
    <init-param>
      <param-name>application</param-name>
      <param-value>MyApplicationClass</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/*</url-pattern>
 </servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app
  id="WebApp_ID" version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <servlet>
    <servlet-nombre>miservlet</servlet-nombre>
    <servlet-classe>
        com.vaadin.terminal.gwt.server.ApplicationServlet
    </servlet-classe>
    <iniciar-codigo>
      <codigo-nombre>App</codigo-nombre>
      <codigo-valor>MiAppClasse</codigo-valor>
    </iniciar-codigo>
  </servlet>

  <servlet-mapeando>
    <servlet-nombre>miservlet</servlet-nombre>
    <url-codigo>/*</url-codigo>
 </servlet-mapeando>
</web-app>

El descriptor define un servlet con el nombre miservlet. La classe servlet, “com.vaadin.termina.gwt.server.ApplicationServlet” es suministrada por el cuadro de trabajo Vaadin i devería ser el mismo para todos los proyectos Vaadin. El servlet coje la classe con nombre Calc de la classe de la App del usuario como un codigo, incluyendo todo el camino/direccion del pakete completo . Si la classe esta en el pakete Standard el directorio/camino del pakete es obviamente no usado.

El codigo “url-pattern” es definido usando “/". Esto conecta o associa a cualquier URL bajo el contexto del proyecto. Definimios el contexto del proyecto como “myproject” para que la URL de la App sea http://localhost:8080/myproject/. Si el proyecto tubiera que tener multiples App o servlets, deveriamos dar distintos nombre para distinguirlos. Por ejemplo, "url-pattern /myapp/” deveria conectar o associar una URL como “http://localhost:8080/myproject/myapp/”. Date cuenta que la / y el * tienen que ser incluido al final del codigo.

Date cuenta tambien que si el codigo de la URL es otro que el root/ (por ejemplo como /miapp/), vas a tener que mapear el servlet en /VAADIN/ (a no ser que lo estes provisionando estaticamente como en el siguiente ejemplo). Por ejemplo:

    ...
    <servlet-mapping>
        <servlet-name>myservlet</servlet-name>
        <url-pattern>/myurl/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>myservlet</servlet-name>
        <url-pattern>/VAADIN/*</url-pattern>
    </servlet-mapping>
    ...
    <servlet-mapeando>
        <servlet-nombre>miservlet</servlet-nombre>
        <url-codigo>/miurl/*</url-codigo>
    </servlet-mapeando>

    <servlet-mapeando>
        <servlet-nombre>miservlet</servlet-nombre>
        <url-codigo>/VAADIN/*</url-codigo>
    </servlet-mapeando>

Si tienes multiples servlet, deverias especificar solo un “/VAADIN/*” mapeando. No importa qual servlet mapeas el codigo hacia, lo importante es que sea un servlet Vaadin.

No tienes que proveer el siguiente mapeando "/VAADIN/" si estas suministrando los dos packs App (widget) y (standard y personalizado) tematicas estaticas en la carpeta “WebContent/VAADIN/”. El mapear simplemente permite suministrar servirlo dinamicamente desde el JAR Vaadin. Suministrandolos estaticamente es recomendado en ambientes para producion porque es mas rapido. Si suministras el contenido desde el interior de la misma App web, lo mas provable es que no tengas el codigo root / para el servlet Vaadin, porque sino todas las solicitudes van a ser mapeadas al servlet.

Desplegando codigos del descriptor

Desplegar el descriptor puede tener muchos codigo y opciones que controlan la ejecucion de un servlet. Puedes encontrar documentacion mas completa sobre el desplegamiento del descripto en el siguiente link
ttp://java.sun.com/products/servlet/]especificaciones de los servlets en Java

En standard, Las App Vaadin funcionan en modo “debug”, que deveria ser usado durante la creacion. Esto habilita varias herramientas debugging. Para su uso productivo, deverias poner en tu web.xml el siguiente codigo:

<context-param>
 <param-name>productionMode</param-name>
 <param-value>true</param-value>
 <description>Vaadin production mode</description>
</context-param>
<context-codigo>
 <codigo-nombre>productionMode</codigo-nombre>
 <codigo-valor>true</codigo-valor>
 <descripcion>Vaadin modo de produccion</descripcion>
</context-codigo>

Los codigos, los debug, y los modos de produccions son descritos con mas detalles en la Seccion 12.4 “Modo produccion y debug”.

Una opcion a menudo nessesitada es “timeout” de la session. Distintos containers servlet usan variados standards para timeout, como 30 minutos en el caso de Apache Tomcat. Puedes programar el timeout con:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

Despues de que el timeout caduque, el codigo “close()” de la classe de la App va a ser llamada. Deverias usar esta herramienta si quieres manejar situaciones de timeout.