Tomcat

Responder
emanuele
Administrador del Sitio
Mensajes: 48
Registrado: Sab, 18 Feb 2017, 09:15

Tomcat

Mensaje por emanuele » Sab, 03 Feb 2018, 07:12

J2EE (Java 2 Enterprise Edition)

J2EE es un grupo de especificaciones diseñadas por Sun que permiten la creación de aplicaciones empresariales, esto sería: acceso a base de datos (JDBC), utilización de directorios distribuidos (JNDI), acceso a métodos remotos (RMI/CORBA), funciones de correo electrónico (JavaMail), aplicaciones Web(JSP y Servlets)...etc. Aquí es importante notar que J2EE es solo una especificación, esto permite que diversos productos sean diseñados alrededor de estas especificaciones algunos son Tomcat y Weblogic ; la especificación más reciente de Sun es J2EE 1.4 , la cual esta conformada por: JSP 2.0 ,Servlet 2.4, EJB 2.1 y Connector 1.5 entre otros API's, los detalles se encuentran en http://java.sun.com/j2ee

Aunque varios productos Java están diseñados alrededor de estas especificaciones, no todos cumplen con el estándar completo, esto es, Tomcat solo emplea|cumple las especificaciones de JSP y Servlets, sin embargo, existen productos como Websphere y algunos otros "Java Application Servers" que son considerados "Fully J2EE Compliant" , en otras palabras, cumplen con todas las especificaciones definidas por Sun.

Sun ofrece una implementación de TODAS estas especificaciones llamada J2EE SDK , a pesar que el J2EE SDK es una implementación, esta es solo una muestra ofrecida por Sun para utilizar las funcionalidades de las especificaciones J2EE, aunque funcionaría en un Sistema de Producción su diseño es poco escalable además que su licencia lo prohibe.

En Términos Microsoft

J2EE pudiera ser considerado el rival de DNA ("Distributed Network Applications") ofrecido por Microsoft (hoy en dia ya conocido como Microsoft Solution Platform) el cual esta compuesto por Windows2000,SQL Server, IIS , COM y MSMQ, como puede notar a diferencia de J2EE , DNA es un producto y esta forzado a utilizar una sola implementación , a diferencia de implementaciones J2EE donde puede elegir entre diversos productos de distintas empresas. (Cabe mencionar que DNA ha evolucionado a lo que hoy se conoce como .NET ) .

Otros detalles de Importancia al trabajar con estos ambientes.

CLASSPATH: Es una variable de ambiente en su sistema extremadamente importante ya que le indica al JDK donde se encuentran las clases que serán utilizadas al compilar un programa, el CLASSPATH puede estar compuesto por diversos directorios o JARS, como se muestra a continuación:

CLASSPATH=/usr/local/tomcat/lib/servlet.jar:/usr/local/enhydra/lib/enhydra.jar: /home/JavaPrograms3:/usr/local/xml:/usr/local/xml/xp.jar:/usr/local/java_lib: /usr/local/jsdkee/lib/j2ee.jar:/usr/local/jdk/jre/lib/ext/jndi.jar: /usr/local/java_lib/postgresql.jar

Cuando se utiliza un directorio, el JDK buscará dentro de éste las clases correspondientes, nótese que cuando se emplea un JAR debe especificarse el archivo completo , si el JAR se encuentra dentro de un directorio no será encontrado al menos que se indique el archivo JAR específicamente. Por lo general debe agregar este CLASSPATH al archivo/etc/bashrc para que sea definido para todo usuario del sistema.

JARS: Es un grupo de clases comprimidas; una vez que defina 200 o 300 clases en Java puede agruparlas para formar lo que es denominado "JAR File", este JAR file puede ser considerado un ZIP o TAR file utilizado en cualquier sistema de computo, la ventaja de los JAR files es su compresión y la reducción de carga administrativa al movilizar clases .

Recomendación para JARS y CLASSPATH

Para evitar las dificultades de actualizar la variable CLASSPATH en cada ocasión que sea agregada alguna clase:

CLASES GENERALES: Generar un directorio global java_lib e incluirlo dentro del CLASSPATH, de esta manera si adquiere clases de postgres,objectspace o osmosislatina puede incluirlas dentro de este directorio y evita problemas de manutención, concentrando efectivamente todas las clases adicionales utilizadas por el JDK en un solo directorio.

JARS: Los archivos JAR son menos amigables al momento de intentar concentrarlos en directorios, ya que como se menciono anteriormente es necesario declararlos directamente en CLASSPATH. Para evitar estas limitaciones es posible agregar los archivos JAR al directorio $JAVA_HOME/jre/lib/ext/ donde $JAVA_HOME es el directorio raíz del JDK, cualquier archivo JAR dentro de este directorio estará disponible al ambiente Java, como si éste hubiera sido declarado en CLASSPATH.
Instalación del JDK (J2SE)

La base para operar cualquier producto que utiliza "Java" es el "JDK" de la plataforma correspondiente, puede encontrar instrucciones para plataformas Linux así como Windows, en las siguientes direcciones:

JDK para Linux : http://javabasico.osmosislatina.com/java_linux.htm

JDK para Windows : http://javabasico.osmosislatina.com/java_windows.htm

Los pasos anteriores son los suficientes para el "JDK" en lo que concierne a la instalación de Catalina (Tomcat 4.x), posiblemente después tenga que trabajar con la también sumamente importante variable ambiental CLASSPATH, por ahora lo anterior es suficiente. (Más sobre CLASSPATH en Utilización de la variable CLASSPATH ).

Instalación de Tomcat

Bajar la versión binaria de Tomcat en: http://jakarta.apache.org/tomcat . (La versión de Código Fuente(src) solo es necesaria si quiere experimentar y/oInstalar Apache con Tomcat )

Descomprimir el archivo Tar de Tomcat en /usr/local/, esto genera un directorio llamado jakarta-tomcat-<numero_de_version>, para dar mayor uniformidad se recomienda cambiar el nombre de este directorio a tomcat.

Posteriormente se debe definir una variable ambiental la cual le indicará al sistema la ubicación de Tomcat , esta variable se llama CATALINA_HOME la cual debe ser agregada a /etc/bashrc , si no esta familiarizado con ambientes *nix, esto significa agregar la linea: export CATALINA_HOME=/usr/local/tomcat;; para instalaciones Windows esta variable ambiental puede ser definida de la misma manera que CLASSPATH, descrita en las instrucciones del JDK.

Configuración Local

Solo para ilustrar esta instalación inicial modifique el archivo /etc/hosts agregando una linea como la siguiente:

127.0.0.1 www.servidorprueba.com

Generalmente el paso anterior se logra a través de DNS , pero por facilidad y demostración se opto por modificar /etc/hosts.

Ejecución y Pruebas

Una vez efectuados los pasos anteriores es posible realizar pruebas iniciales sobre Tomcat, para esto ejecute lo siguiente:

Descienda al directorio bin de Tomcat (/usr/local/tomcat/bin ) y ejecute el archivo startup.sh :

[root@servidor1 bin]# ./catalina.sh run Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JAVA_HOME: /usr/local/jdk

Debe observar algo similar al desplegado anterior; los detalles de estos parámetros son tema de esta guia, sin embargo, cabe mencionar que la pantalla permanecerá inhabilitada, este congelamiento en pantalla se debe a que aquí será enviado todo error detectado por "Tomcat" (esto obviamente debe ser cambiado, pero por ahora es la configuración "default" de Tomcat, esto se describe en elemento Logger de server.xml ).

Aunque pueda descongelarse la pantalla mediante Ctrl-C y seguir ejecutando comandos en pantalla, Tomcat no es cerrado/clausurado hasta que se ejecute shutdown.sh, inclusive si intenta ejecutar ./startup.shconsecutivamente, sin ejecutar shutdown.sh se genera un error.

Asegurándose que Tomcat este activo, de cualquier navegador ("Netscape","Galeon","Opera" u otro) del sistema intente visitar la dirección que fue definida en /etc/hosts, en este caso www.servidorprueba.comagregando el fragmento :8080 al final:

www.servidorprueba.com:8080

Al introducir la dirección anterior en un navegador, se le esta indicando que solicite la página principal de www.servidorprueba.com en el puerto TCP 8080 ; www.servidorprueba.comesta en la maquina local (127.0.0.1) como fue definido en /etc/hosts y el puerto 8080 es en el que precisamente esta Tomcat (en la secuencia de startup.sh se indica)

En su navegador debe aparecer la página principal de documentación de Tomcat y los diversos Links hacia los ejemplos de Tomcat .

Aunque ya este observando la documentación de Tomcat, seguramente esto no le servirá de mucho a los visitantes de su sitio y seguramente tampoco sabrán que deben agregar :8080 a sus solicitudes, para realizar estos cambios es necesario entrar en los detalles de configuración de Tomcat

emanuele
Administrador del Sitio
Mensajes: 48
Registrado: Sab, 18 Feb 2017, 09:15

Re: Tomcat

Mensaje por emanuele » Sab, 03 Feb 2018, 07:14

Cooperando con Java (Tomcat) en Apache

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 (puroHTML ), 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 PreviosInstalación de TomcatCreació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 nombre jakarta-tomcat-<numero_de_version>-src .

Ahora se debe descender dentro de jakarta-tomcat-<numero_de_version>-src al directorio src/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

apxs es un comando incluido en Apache utilizado para compilar módulos empleados por productos que operan en conjunción con Apache.

Las letras -I en la instrucción indican los directorios que deben ser incluidos al compilar el módulo; en el caso anterior el directorio /usr/local/jdk indica 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.so dentro 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_JKson 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 LoadModule y AddModule indican que el módulo debe ser cargado y agregado, respectivamente.

JkWorkersFile le 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ía ajp12), 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.

JkLogFile y JkLogLevel indican 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 servidordatostambié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

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado