Porque se necesita Tomcat para ejecutar Java en Apache ?
El funcionamiento principal de Apache desde su creación fue la de aceptar y responder requisiciones de Páginas en Internet, y como fue mencionado en Servidores de Páginas y "Java Application Servers" , estas requisiciones correspondían a documentos estáticos (puro HTML ), es por esto que cuando se requiere ejecutar algún tipo de contenido dinámico (programas) como "Java", es necesario coordinar los esfuerzos de Apache con otro ambiente, en el caso de "Java" es precisamente "Tomcat" quien ofrece facilidades para ejecutar los dos componentes más utilizados en ambientes "Java": "JSP ("Java Server Pages")" y "Servlets".
Gráficamente
![]() |
En esta guia se hablará exclusivamente sobre la linea verde del diagrama, donde el Servidor de Páginas es "Apache" y el Servlet Engine es "Tomcat".
Pasos Previos
Creación del Módulo Mod_JK
El módulo Mod_JK es aquel utilizado por Apache para comunicarse con "Tomcat", debido a que este módulo es externo de Apache, se incluye en la distribución de Código Fuente de "Tomcat" , a continuación se mencionan los pasos a seguir para su creación
Obtener el archivo Tar con el Código Fuente de "Tomcat" (no el binario!).
Descomprimir el Código Fuente de "Tomcat" en un directorio temporal (generalmente
/tmp) , esto genera un directorio por nombrejakarta-tomcat-<numero_de_version>-src.Ahora se debe descender dentro de
jakarta-tomcat-<numero_de_version>-srcal directoriosrc/native/apache1.3.Dentro de este directorio se debe ejecutar el siguiente comando:
apxs -o mod_jk.so -I../jk -I/usr/local/jdk/include/ -I/usr/local/jdk/include/linux -c *.c ../jk/*.c
apxses un comando incluido en Apache utilizado para compilar módulos empleados por productos que operan en conjunción con Apache.Las letras
-Ien la instrucción indican los directorios que deben ser incluidos al compilar el módulo; en el caso anterior el directorio/usr/local/jdkindica el directorio base del JDK de Java. (Vea instalación de Tomcat para más detalles sobre el JDK)Una vez ejecutado el comando anterior exitosamente, se genera el archivo
mod_jk.sodentro del directorio.(Este es el Módulo en sí)
Instalación del Módulo Mod_JK
Para instalar el módulo en Apache primeramente se debe copiar el Módulo (mod_jk.so) al directorio /usr/local/apache/libexec, para que este disponible en Apache.
A diferencia de los módulos incluidos en Apache los cuales generalmente requieren que Apache sea re-compilado-instalado, el módulo Mod_JK solo requiere de unas modificaciones al archivo general de configuración httpd.conf .
httpd.conf
Los parámetros para incluir el módulo Mod_JK son los siguientes:
LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c JkWorkersFile /usr/local/tomcat/conf/workers.properties JkLogFile /usr/local/tomcat/log/mod_jk.log JkLogLevel warn |
Las primeras dos lineas
LoadModuleyAddModuleindican que el módulo debe ser cargado y agregado, respectivamente.JkWorkersFilele indica muy específicamente a Apache como comunicarse con "Tomcat", este archivo aunque utilizado primordialmente por Apache se incluye en "Tomcat" (he ahí la razón por la cual reside en/usr/local/tomcat/conf), este archivo debe ser modificado para contener los siguientes parámetros:workers.tomcat_home=/usr/local/tomcat workers.java_home=/usr/local/jdk ps=/ worker.list=ajp12, ajp13 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13
Obviamente el entrar en detalle sobre que o porque hay worker.properties sale sobrando!, pero lo que se esta indicando en este archivo es que "Apache" se comunicará con "Tomcat" mediante el protocolo
ajp13(otra alternativa seríaajp12), que "Tomcat" también reside en el mismo "Host" local y esta utilizando el puerto TCP 8009 para atender solicitudes; inclusive si observa la ejecución de Tomcat notará que "Tomcat" activa estos puertos al iniciarse.JkLogFileyJkLogLevelindican el lugar donde serán enviados errores relacionados con Apache y "Tomcat" y el nivel de errores reportados , respectivamente.
JkMount
Hasta este punto ya están configurados casi todos los aspectos relacionados con "Tomcat" y "Apache", solo falta uno: Como indicar a Apache que solicitudes deben ser enviadas a Tomcat ?, esto es, si ya se diseñaron 5 o 10 programas en "Java" ( JSP y/o Servlets ) como se coordinan estas con la información que actualmente es enviada por Apache ?
Se utiliza el parámetro JkMount dentro de httpd.conf:
JkMount /*.jsp ajp13 JkMount /servidordatos/Insertar ajp13 |
La declaración indica que toda requisición terminada en jsp (un Java Server Page), será enviada por Apache vía el protocolo ajp13 , este protocolo da precisamente a Tomcat, como fue mencionado en workers.properties; la segunda declaración indica que una requisición para el archivo Insertar bajo el directorio servidordatos también debe ser enviada a "Tomcat".
Nótese el énfasis en enviada, el hecho de que sea enviada no implica éxito, una vez enviada la solicitud el mismo "Tomcat" debe estar configurado apropiadamente para atender estas solicitudes, pero bueno , esto es tema de Tomcat .
Si se utilizan "Virtual Hosts" ?
Al igual que todo parámetro en httpd.conf , basta incluirlo en el segmento de "Virtual Host":
<Virtual Host 127.0.0.1> ServerName www.filantropia.org DocumentRoot /www/beneficio/ DirectoryIndex ayuda.htm, index.htm JkMount /donaciones/Intl JkMount /donaciones/Local </Virtual Host> |
Cuidado con muchos JkMount's !
Si empieza a utilizar muchos JkMount's solo significa una cosa: La mayor parte del trabajo la esta realizando "Tomcat" ya que todo se esta enviando hacia "Tomcat", en este caso es conveniente eliminar "Apache" de la Arquitectura y que "Tomcat" reciba las requisiciones directamente; si observa la gráfica inicial este caso se da con la linea roja y será descrito a mayor detalle en la configuración de Tomcat .
Si de cualquier manera opta por mantener "Apache" en la Arquitectura se recomienda el uso del parámetro Include al definir una gran cantidad de JkMount's, esto incrementa la legibilidad de httpd.conf y reduce la carga Administrativa de mantener diversos JKMount's; el archivo httpd.conf cambiaría a:
# Ningun JkMount Aqui Include /usr/local/apache/conf/mijava.txt |
Y sería dentro del archivo mijava.txt donde se incluyen los JkMount's
JkMount /*.jsp ajp13 JkMount /servidordatos/Insertar ajp13 JkMount /servidor/Actualizar ajp13 JkMount /servidor/Eliminar ajp13 JkMount /foros/Insertar ajp13 JkMount /foros/Eliminar ajp13 JkMount /registro/Nuevo ajp13 JkMount /foros2/Insertar ajp13 |
|

