Como configurar Tomcat + IIS (Internet Information Server de Microsoft)
Creación: 10-12-2005
Índice de contenidos
5. Configurando el redirector ISAPI
6. El fichero workers.properties
7. El fichero uriworkermap.properties
8. Añadir el directorio virtual al IIS
1. Introducción
Debido a que en Autentia (http://www.autentia.com) a menudo trabajamos con aplicaciones Web, nos encontramos con la necesidad de instalar un servidor de aplicaciones. La mayoría de servidores de aplicaciones también son capaces de servir
recursos estáticos que se encuentran en el disco duro, como páginas html, imágenes gif, jpg, … aunque normalmente esta opción no es la recomendada (los propios fabricantes
suelen desaconsejarla ya que no se obtiene el rendimiento y la escalabilidad deseadas).
Los servidores de aplicaciones están optimizados para servir páginas dinámicas (Servlets, JSPs, …) mientras que los servidores Web están optimizados para servir los recursos estáticos. Así que es habitual poner más de un servidor en cadena para mejorar el rendimiento y la escalabilidad de nuestras aplicaciones.
En este tutorial veremos como poner al frente un servidor Web como el IIS, que se encarga de servir las peticiones estáticas (es decir: las imágenes, los ficheros html, y en general todos los recursos que se encuentran en el disco duro), y a continuación montaremos un servidor capaz de servir componentes dinámicos. En nuestro caso un Tomcat, capaz de servir Servlets y páginas JSPs.
Vamos a ver como configurar el IIS para que sea él quien recibe todas las peticiones. El IIS determinará si el recurso solicitado lo puede servir el mismo o si debe pasarle la petición al Tomcat.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portatil Ahtec Signal 259M MXM (Sonoma 2.1 GHz, 2048 MB RAM, 100 GB HD).
- Sistema Operativo: Microsoft Windows XP Profesional en Español
- IIS 5.1
- Tomcat 5.5.12
3. Precondiciones
Suponemos que ya tenemos correctamente instalados y en funcionamiento, tanto el IIS como el Tomcat.
En este tutorial sólo vamos a ver como hacer que trabajen conjuntamente.
Para ver como instalar cada servidor por separado buscar en otros tutoriales.
4. El redirector
Vamos a usar un plugin del IIS (filtro + extensión) como redirector entre el IIS y el Tomcat.
Este filtro comprueba la URL de la petición con una lista (que luego veremos como configurar). Si encuentra coincidencia le pasa la petición al Tomcat, y luego recoge la respuesta del Tomcat y la devuelve al navegador.
Si el filtro no encuentra coincidencia, será el IIS el que intente responder la petición.
Para instalar el redirector necesitamos tres piezas:
- isapi_redirect.dll – El filtro ISAPI para el IIS. La última versión (la 1.2.15) la podemos descargar de http://apache.org.es/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/
- workers.properties – El fichero donde se describe host y el puerto donde están los “workers”. Estos workers son lo distintos Tomcat que están atendiendo las peticiones (tendrán que estar definidos los conectores correspondientes en el fichero server.xml del Tomcat). Podemos encontrar un ejemplo de este fichero en el directorio “conf” de los fuentes del redirector http://apache.org.es/tomcat/tomcat-connectors/jk/source/jk-1.2.15/ (durante el proceso de configuración veremos nuestro propio ejemplo).
- uriworkermap.properties – El fichero donde se define la relación entre la URL y el worker que tiene que atender la petición. Podemos encontrar un ejemplo de este fichero en el directorio “conf” de los fuentes del redirector http://apache.org.es/tomcat/tomcat-connectors/jk/source/jk-1.2.15/ (durante el proceso de configuración veremos nuestro propio ejemplo).
5. Configurando el redirector ISAPI
Suponemos que hemos copiado isapi_redirect.dll en %TOMCAT_HOME%binwin32i386. Donde %TOMCAT_HOME% es el directorio donde tenemos instalado el Tomcat (en mi caso c:javaapache-tomcat-5.5.12).
Para configurarlo tenemos dos opciones, modificar el registro de Windows o crear un fichero de propiedades junto al fichero isapi_redirect.dll. Yo he elegido la opción del fichero de propiedades porque pienso que es menos intrusiva y porque permite tener varios redirectores con configuraciones diferentes.
El fichero de propiedades se tiene que llamar igual que la dll del redirector, con extensión “.properties”. En nuestro caso como la dll se llama “isapi_redirect.dll”, el fichero de configuración se llamará “isapi_redirect.properties”.
A continuación se muestra un ejemplo del fichero de propiedades:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span style="color: #0000ff;"># Configuration file for the Jakarta ISAPI Redirector</span> <span style="color: #0000ff;"># The path to the ISAPI Redirector Extension, relative to the website</span> <span style="color: #0000ff;"># This must be in a virtual directory with execute privileges</span> extension_uri=/jakarta/isapi_redirect.dll <span style="color: #0000ff;"># Full path to the log file for the ISAPI Redirector</span> log_file=c:javaapache-tomcat-5.5.12logsisapi_redirect.log <span style="color: #0000ff;"># Log level (debug, info, warn, error or trace)</span> log_level=info <span style="color: #0000ff;"># Full path to the workers.properties file</span> worker_file=c:javaapache-tomcat-5.5.12confworkers.properties <span style="color: #0000ff;"># Full path to the uriworkermap.properties file</span> worker_mount_file=c:javaapache-tomcat-5.5.12confuriworkermap.properties |
En el ejemplo se aprecia como hago referencia a mi instalación del Tomcat (c:javaapache-tomcat-5.5.12), vosotros tendréis que cambiar estos valores por los correctos para vuestra instalación. También se puede apreciar como hacemos referencia al fichero de “workers” y el de URLs que mencionábamos en el punto anterior. Más tarde veremos el contenido de estos dos ficheros.
Con el atributo extension_uri estamos haciendo referencia a un directorio virtual del IIS. Más adelante veremos como configurar este directorio virutal.
6. El fichero workers.properties
Este fichero lo copiamos en la localización que hemos indicado en el atributo “worker_file” del fichero de propiedades “isapi_redirect.properties”. En mi caso c:javaapache-tomcat-5.5.12confworkers.properties.
A continuación mostramos un ejemplo de este fichero:
1 |
<span style="color: #0000ff;"># workers.properties -</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># This file provides jk derived plugins with the needed information to</span></code> <code><span style="color: #0000ff;"># connect to the different tomcat workers. Note that the distributed</span></code> <code><span style="color: #0000ff;"># version of this file requires modification before it is usable by a</span></code> <code><span style="color: #0000ff;"># plugin.</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># As a general note, the characters $( and ) are used internally to define</span></code> <code><span style="color: #0000ff;"># macros. Do not use them in your own configuration!!!</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Whenever you see a set of lines such as:</span></code> <code><span style="color: #0000ff;"># x=value</span></code> <code><span style="color: #0000ff;"># y=$(x)something</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># the final value for y will be valuesomething</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Normaly all you will need to do is un-comment and modify the first three</span></code> <code><span style="color: #0000ff;"># properties, i.e. workers.tomcat_home, workers.java_home and ps.</span></code> <code><span style="color: #0000ff;"># Most of the configuration is derived from these.</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># When you are done updating workers.tomcat_home, workers.java_home and ps</span></code> <code><span style="color: #0000ff;"># you should have 3 workers configured:</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># - An ajp12 worker that connects to localhost:8007</span></code> <code><span style="color: #0000ff;"># - An ajp13 worker that connects to localhost:8009</span></code> <code><span style="color: #0000ff;"># - A jni inprocess worker.</span></code> <code><span style="color: #0000ff;"># - A load balancer worker</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># However by default the plugins will only use the ajp12 worker. To have</span></code> <code><span style="color: #0000ff;"># the plugins use other workers you should modify the worker.list property.</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># OPTIONS ( very important for jni mode ) </span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># workers.tomcat_home should point to the location where you</span></code> <code><span style="color: #0000ff;"># installed tomcat. This is where you have your conf, webapps and lib</span></code> <code><span style="color: #0000ff;"># directories.</span></code> <code><span style="color: #0000ff;">#</span></code> <code><b>workers.tomcat_home=C:javaapache-tomcat-5.5.12</b></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># workers.java_home should point to your Java installation. Normally</span></code> <code><span style="color: #0000ff;"># you should have a bin and lib directories beneath it.</span></code> <code><span style="color: #0000ff;">#</span></code> <code><b>workers.java_home=C:javajdk1.5.0_06</b></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># You should configure your environment slash... ps= on NT and / on UNIX</span></code> <code><span style="color: #0000ff;"># and maybe something different elsewhere.</span></code> <code><span style="color: #0000ff;">#</span></code> <code><b>ps=</b></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#------ ADVANCED MODE ------------------------------------------------</span></code> <code><span style="color: #0000ff;">#---------------------------------------------------------------------</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#------ DEFAULT worket list ------------------------------------------</span></code> <code><span style="color: #0000ff;">#---------------------------------------------------------------------</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># The workers that your plugins should create and work with</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Add 'inprocess' if you want JNI connector </span></code> <code><b>worker.list=loadbalancer</b></code> <code><span style="color: #0000ff;"># , inprocess</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#------ DEFAULT worker1 WORKER DEFINITION ------------------------------</span></code> <code><span style="color: #0000ff;">#---------------------------------------------------------------------</span></code> <code><span style="color: #0000ff;">#</span></code> <code><b>worker.worker1.port=8007</b></code> <code><b>worker.worker1.host=localhost</b></code> <code><b>worker.worker1.type=ajp13</b></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Specifies the load balance factor when used with</span></code> <code><span style="color: #0000ff;"># a load balancing worker.</span></code> <code><span style="color: #0000ff;"># Note:</span></code> <code><span style="color: #0000ff;"># ----> lbfactor must be > 0</span></code> <code><span style="color: #0000ff;"># ----> Low lbfactor means less work done by the worker.</span></code> <code>worker.worker1.lbfactor=1</code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#------ DEFAULT worker2 WORKER DEFINITION ------------------------------</span></code> <code><span style="color: #0000ff;">#---------------------------------------------------------------------</span></code> <code><span style="color: #0000ff;">#</span></code> <code><b>worker.worker2.port=8009</b></code> <code><b>worker.worker2.host=localhost</b></code> <code><b>worker.worker2.type=ajp13</b></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Specifies the load balance factor when used with</span></code> <code><span style="color: #0000ff;"># a load balancing worker.</span></code> <code><span style="color: #0000ff;"># Note:</span></code> <code><span style="color: #0000ff;"># ----> lbfactor must be > 0</span></code> <code><span style="color: #0000ff;"># ----> Low lbfactor means less work done by the worker.</span></code> <code>worker.worker2.lbfactor=1</code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Specify the size of the open connection cache.</span></code> <code><span style="color: #0000ff;">#worker.ajp13.cachesize</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#------ DEFAULT LOAD BALANCER WORKER DEFINITION ----------------------</span></code> <code><span style="color: #0000ff;">#---------------------------------------------------------------------</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># The loadbalancer (type lb) workers perform wighted round-robin</span></code> <code><span style="color: #0000ff;"># load balancing with sticky sessions.</span></code> <code><span style="color: #0000ff;"># Note:</span></code> <code><span style="color: #0000ff;"># ----> If a worker dies, the load balancer will check its state</span></code> <code><span style="color: #0000ff;"># once in a while. Until then all work is redirected to peer</span></code> <code><span style="color: #0000ff;"># workers.</span></code> <code><b>worker.loadbalancer.type=lb</b></code> <code><b>worker.loadbalancer.balanced_workers=worker1, worker2</b></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#------ DEFAULT JNI WORKER DEFINITION---------------------------------</span></code> <code><span style="color: #0000ff;">#---------------------------------------------------------------------</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Defining a worker named inprocess and of type jni</span></code> <code><span style="color: #0000ff;"># Note that the name and the type do not have to match.</span></code> <code><span style="color: #0000ff;">#</span></code> <code>worker.inprocess.type=jni</code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#------ CLASSPATH DEFINITION -----------------------------------------</span></code> <code><span style="color: #0000ff;">#---------------------------------------------------------------------</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Additional class path components.</span></code> <code><span style="color: #0000ff;">#</span></code> <code>worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar</code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Setting the command line for tomcat. </span></code> <code><span style="color: #0000ff;"># Note: The cmd_line string may not contain spaces.</span></code> <code><span style="color: #0000ff;">#</span></code> <code>worker.inprocess.cmd_line=start</code> <code><span style="color: #0000ff;"># Not needed, but can be customized.</span></code> <code><span style="color: #0000ff;">#worker.inprocess.cmd_line=-config</span></code> <code><span style="color: #0000ff;">#worker.inprocess.cmd_line=$(workers.tomcat_home)$(ps)conf$(ps)server.xml</span></code> <code><span style="color: #0000ff;">#worker.inprocess.cmd_line=-home</span></code> <code><span style="color: #0000ff;">#worker.inprocess.cmd_line=$(workers.tomcat_home)</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># The JVM that we are about to use</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># This is for Java2</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Windows</span></code> <code>worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)jvm.dll</code> <code><span style="color: #0000ff;"># IBM JDK1.3 </span></code> <code><span style="color: #0000ff;">#worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)libjvm.so</span></code> <code><span style="color: #0000ff;"># Unix - Sun VM or blackdown</span></code> <code><span style="color: #0000ff;">#worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)i386$(ps)classic$(ps)libjvm.so</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># And this is for jdk1.1.X</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#worker.inprocess.jvm_lib=$(workers.java_home)$(ps)bin$(ps)javai.dll</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Setting the place for the stdout and stderr of tomcat</span></code> <code><span style="color: #0000ff;">#</span></code> <code>worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout</code> <code>worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr</code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Setting the tomcat.home Java property</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;">#worker.inprocess.sysprops=tomcat.home=$(workers.tomcat_home)</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Java system properties</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># worker.inprocess.sysprops=java.compiler=NONE</span></code> <code><span style="color: #0000ff;"># worker.inprocess.sysprops=myprop=mypropvalue</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># Additional path components.</span></code> <code><span style="color: #0000ff;">#</span></code> <code><span style="color: #0000ff;"># worker.inprocess.ld_path=d:$(ps)SQLLIB$(ps)bin</span></code> <code><span style="color: #0000ff;">#</span> |
En el ejemplo se ve como con los atributos “workers.tomcat_home” y “workers.java_home” ajustamos el fichero a nuestra entorno (directorio de instalación del tomcat y java).
Luego con “worker.list” definimos la lista de procesos que atenderán las peticiones. En el ejemplo definimos un único worker, balanceador de carga, que configuramos más adelante en el mismo fichero.
A continuación definimos cada uno de los workers, indicando puerto, host y tipo (ajp12 está obsoleto y sólo está disponible para Tomcat 3.2.x y 3.3.x). Estos workers deben estar dados de alta en el fichero server.xml del Tomcat. Según nuestro ejemplo deberíamos tener definidos dentro de <Service name=»Catalina»> los siguientes conectores:
1 2 3 4 5 6 7 |
<span style="color: #0000ff;"><!-- Define an AJP 1.3 Connector on port 8009 --></span> <Connector port="8007" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> <span style="color: #0000ff;"><!-- Define an AJP 1.3 Connector on port 8009 --></span> <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> |
A continuación definimos un worker que será el balanceador de carga (“worker.loadbalancer.type”). Este es el worker que especificamos en el “worker.list”. También indicamos los workers que se utilizarán para hacer el balanceo (“worker.loadbalancer.balanced_workers”). Este balanceador de carga reparte peticiones por round-robin, es decir una petición a cada worker de manera consecutiva.
El resto del fichero no haría falta tocarlo.
7. El fichero uriworkermap.properties
Este fichero lo copiamos en la localización que hemos indicado en el atributo “worker_mount_file” del fichero de propiedades “isapi_redirect.properties”. En mi caso c:javaapache-tomcat-5.5.12confworkers.properties.
A continuación mostramos un ejemplo de este fichero:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span style="color: #0000ff;"># uriworkermap.properties - IIS</span> <span style="color: #0000ff;">#</span> <span style="color: #0000ff;"># The general syntax for this file is:</span> <span style="color: #0000ff;"># [URL]=[Worker name]</span> /admin/*=loadbalancer /manager/*=loadbalancer /jsp-examples/*=loadbalancer /servlets-examples/*=loadbalancer <span style="color: #0000ff;"># Optionally filter out all .jpeg files inside that context</span> <span style="color: #0000ff;"># For no mapping the url has to start with exclamation (!)</span> !/jsp-examples/*.jpeg=loadbalancer !/jsp-examples/*.gif=loadbalancer |
Nótese como en este fichero se define la URL y se le asigna el worker que debe servirla. En el ejemplo hemos elegido que todas las peticiones sean atendidas por el balanceador de carga, pero podríamos elegir que cada petición se atendiera por un worker distinto.
Nótese como se pueden poner exclusiones. Las dos últimas líneas del fichero, que empiezan por “!”, están indicando que el Tomcat no debe servir ni los ficheros “.jpeg” ni los “.gif” dentro de jsp-examples. Esto va a provocar que las páginas se vean sin imágenes, a no ser que configuremos un directorio virtual en el IIS, para que sea este el que sirva las imágenes (en nuestro ejemplo deberíamos crear un directorio virtual apuntando a c:javaapache-tomcat-5.5.12webappsjsp-examples).
8. Añadir el directorio virtual al IIS
Ahora necesitamos añadir un nuevo directorio virtual en el IIS. Este directorio virtual es el que hacíamos referencia con el atributo “extension_uri” del fichero “isapi_redirect.properties”.
Abrimos la consola de administración del IIS (Inicio –> Panel de Control –> Herramientas administrativas –> Servicios de Internet Information Server).
Para añadir el directorio virtual pinchamos botón derecho sobre Sitio Web predeterminado –> Nuevo –> Directorio virtual …
Nos aparece el asistente para añadir un nuevo directorio virtual:
Pulsamos “Siguiente >”.
Escribimos “jakarta” como alias del virtual host. Este alias debe coincidir con lo que pusimos en el atributo “extension_uri” del fichero de propiedades.
Pulsamos “Siguiente >”.
Ponemos la ruta física al directorio donde habíamos copiado el fichero “isapi_redirect.dll”. En mi caso c:javaapache-tomcat-5.5.12binwin32i386.
Pulsamos “Siguiente >”.
Le damos permisos de ejecución.
Pulsamos “Siguiente >”.
Pulsamos “Finalizar” para terminar el asistente.
9. Añadir el filtro al IIS
Ahora necesitamos añadir el filtro “isapi_redirect.dll” al IIS. Para ello, pinchamos botón derecho sobre Sitios Web –> Propiedades.
En la pestaña de “Filtros ISAPI” pinchamos sobre el botón “Agregar …”.
Ponemos un nombre para el filtro que sea significativo, yo he puesto “jakarta”, e indicamos la ruta del ejecutable, es decir la ruta donde se encuentra el fichero “isapi_redirect.dll”.
Pinchamos sobre “Aceptar”.
Vemos que el filtro está añadido pero no está levantado. Para ello necesitamos reiniciar el IIS. Para ello pinchamos botón derecho sobre el equipo local –> Todas las tareas –> Reiniciar IIS.
10. Comprobar la instalación
Podemos probar que todo ha ido correctamente abriendo nuestro navegador y escribiendo la URL http://localhost/jsp-examples/
Se puede ver como en la URL no hemos especificado el puerto 8080 del Tomcat. Es decir estamos haciendo la petición por el puerto 80 a través del IIS.
11. Conclusiones
Aunque en un principio puede parecer un poco complicado, merece la pena el esfuerzo, ya que las distintas configuraciones nos pueden dar mucho juego.
Podemos montan un IIS que reciba todas las peticiones. Con esto conseguimos que todas las peticiones entren por el puerto 80, con independencia de si las sirve el IIS o el Tomcat. Esto hace que no sea necesario abrir puertos adicionales en nuestros firewalls ni en los de nuestros clientes.
Además jugando con los workers podemos tener un IIS que reparta el trabajo ha distintos Tomcats, que pueden estar incluso en distintas máquinas. Eso puede mejorar el rendimiento de nuestras aplicaciones, y mejora la escalabilidad del sistema.
12. Sobre el autor
Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software)
Dir. Implantación y Rendimiento
Formador en tecnologías J2EE, ADOO, UML
mailto:alejandropg@autentia.com
Autentia Real Business Solutions S.L.
Muy bueno, pero podría hacerlo con windows server 2012? gracias =)