DISEÑO DE APLICACIONES


Ejecución de servlets en Domino
Ejemplo

Escritura del servlet

Para escribir un servlet, es necesario un compilador de Java y la API (del inglés Application Programming Interface, interfaz de programación de aplicaciones) del servlet. Puede conseguir ambos en la sede Web de Sun Microsystems: http://java.sun.com. Descargue Java Development Kit (JDK), que incluye el compilador y otras herramientas básicas y Java Servlet Development Kit (JSDK), que incluye la especificación de la API de servlets, el archivo .JAR de servlets (jsdk.jar) y servlets de ejemplo. La sede de Sun también proporciona vínculos a otros recursos de servlets de Internet.

También puede escribir servlets utilizando cualquier entorno de desarrollo de Java de uso habitual. Por comodidad, se incluye una copia de jsdk.jar en los kits de instalación del servidor IBM® Lotus® Domino(TM) y de IBM® Lotus® Domino(TM) Designer. Esta copia es idéntica al archivo suministrado por Sun en Java Servlet Development Kit.

Sun actualiza periódicamente JDK y JSDK. Lotus Domino Designer Versión 6 permite el uso de JDK 1.3 y JSDK 2.0. Las versiones de mantenimiento trimestral (QMR) de Domino incluyen frecuentemente las actualizaciones de Sun, de modo que es conveniente comprobar las Notas de release para comprobar cuales son las versiones de JDK y JSDK compatibles.

Activación del soporte para servlets en Domino

Domino Java Servlet Manager, una parte de la tarea del servidor HTTP, es quien se encarga de cargar e invocar a los servlets. Domino Java Virtual Machine (JVM) proporciona el soporte de ejecución de Java para servlets. Cuando se inicia la tarea HTTP, puede iniciar automáticamente el gestor de servlets y cargar JVM. La tarea HTTP escribirá mensajes de estado relativas a estas operaciones en la consola del servidor y en el archivo de registro.

El gestor de servlets está controlado por parámetros del documento de servidor del Directorio de Domino. Los parámetros están situados en la ficha Protocolos de Internet - Motor de Web de Domino del documento de servidor. Son los siguientes:

ParámetroOpciones
Soporte para servlets de JavaNinguno: (opción predeterminada) La tarea HTTP no carga ni el gestor de servlets ni JVM.

Domino Servlet Manager: La tarea HTTP carga ambos, JVM y Servlet Manager.

Soporte para servlets de otros fabricantes: La tarea HTTP carga JVM, pero no Domino Servlet Manager. Esto permite el uso de administradores de servlets de otras empresas, como WebSphere Application Server de IBM.

Ruta de la URL de ServletsLa ruta de acceso en una URL que señala a Domino que la URL se refiere a un servlet. La ruta de acceso predeterminada es /servlet.
Ruta de las clasesUna lista de una o varias rutas de acceso que el cargador de clases de Servlet Manager examinará para hallar los servlets y sus clases dependientes. Este parámetro permite agregar rutas de acceso adicionales. Se pueden especificar directorios y archivos JAR y ZIP. Las rutas de acceso pueden ser completas (absolutas) o estar definidas en relación con el directorio de datos de Domino (relativas). La ruta de acceso predeterminada es domino\servlet.

Ejemplos:

Ruta de acceso al directorio relativa: domino\servlet

Ruta de acceso al directorio absoluta: c:\apps\MisServlets

Archivo JAR: c:\javamail\mail.jar

Archivo ZIP: domino\servlet\sql.zip

Extensiones del archivo de ServletsUna lista de extensiones de archivo de URL que señala a Domino que una URL hace referencia a un servlet. Cada extensión de la lista debe estar asignada a un único servlet mediante una directiva del archivo servlets.properties. La opción predeterminada es sin extensiones.
Los siguientes parámetros controlan el soporte de tiempo de ejecución que Domino Servlet Manager da a la interfaz HttpSession de la API de servlets de Java. Un servlet que no utilice esta interfaz no se verá afectado por estos parámetros.

Nota El soporte de la interfaz HttpSession es completamente distinto de la función Autentificación de sesiones de HTTP de Domino.
ParámetroOpciones
Seguimiento del estado de las sesionesActivado: (opción predeterminada) El gestor de servlets comprueba periódicamente la actividad del usuario de todas las instancias de HttpSession. Las sesiones que han permanecido inactivas durante un período de tiempo establecido son automáticamente finalizadas. El gestor de servlets invoca el método HttpSession.invalidate() de la instancia para informar al servlet que la sesión se está finalizando.

Desactivado: No se comprobará la inactividad de las sesiones.

Tiempo de espera para sesiones inactivasEl número de minutos de inactividad del usuario que debe esperarse antes de finalizar una sesión. El valor predeterminado es de 30 minutos.
N.º máximo de sesiones activasEl número de sesiones activas simultáneas permitidas. El valor predeterminado es 1,000 sesiones. Cuando se supera este límite, se finalizan las sesiones que llevan más tiempo inactivas.
Persistencia de las sesionesActivado: Cuando acaba la tarea HTTP, el gestor de servlets guarda los datos de la sesión en un archivo de disco denominado sessdata.ser en el directorio de datos de Domino. Los datos de la sesión se podrán volver a cargar cuando la tarea HTTP se reinicie. Los objetos que el servlet ha asociado a las sesiones también se guardarán si implementan la interfaz java.io.Serializable.

Desactivado: (opción predeterminada) Todos los datos de las sesiones se rechazan cuando acaba la tarea HTTP.


Carga de las clases de servlets con el cargador de JVM

El cargador de clases Servlet Manager no cargará las clases que utilicen código nativo, creen cargadores de clases personalizados o ejecuten ciertas operaciones restringidas. Si su servlet precisa de una clase que Servlet Manager no puede cargar, intente cargarla con el cargador de clases JVM de Domino. El cargador de JVM es normalmente el responsable de cargar las clases de los archivos comprimidos de Java estándar instalados con Domino, en particular los paquetes java.* y lotus.*. Para obligar a que un servlet se cargue mediante el cargador de JVM, y no mediante el cargador de Servlet Manager, mueva el servlet desde la ruta de acceso de las clases de Servlet Manager a la ruta de acceso de JVM. La ruta de acceso para las clases de JVM se especifica en la variable JavaUserClasses del archivo NOTES.INI.

Consejo También es posible cargar clases en el archivo NOTES.INI cuando una clase requerida por el servlet entra en conflicto con las clases del archivo LotusXSL.jar incluido en Domino. Si carga y ejecuta un servlet y aparece un mensaje de error de verificación "Verify Error", mueva los archivos JAR del servlet desde la ruta de acceso de las clases de Servlet Manager a la sentencia JavaUserClasses del archivo NOTES.INI.

Configuración de las propiedades de los servlets

Las propiedades especiales de servlets individuales deben especificarse en un archivo de texto denominado servlets.properties ubicado en el directorio de datos de Domino. Se pueden especificar las siguientes propiedades:


Estas propiedades se especifican mediante directivas en el archivo servlets.properties. La sintaxis general de una directiva es:

servlet(s).<nombre>.<propiedad>=<valor(es)>

Las directivas tienen en cuenta las mayúsculas y las minúsculas. El archivo servlets.properties también puede incluir líneas en blanco y líneas de comentarios que comiencen con el carácter "#". El archivo servlets.properties es opcional. Las propiedades predeterminadas para los servlets son: sin alias, sin argumentos de inicialización, sin asignación de extensiones y carga de los servlets bajo demanda.

Alias de los servlets

La directiva del alias tiene esta sintaxis:

servlet.<alias>.code=<nombre-de-la-clase>

Por ejemplo:

servlet.SQLQuery.code=sql.database.query.Servlet

Como medida de seguridad, Domino no permite que los nombres de servlets contengan puntos para usarlos en una URL de servlet. Esto impide los intentos de usuarios malintencionados de cargar arbitrariamente clases de paquetes de Java mediante Servlet Manager. Si su servlet tiene un nombre de paquete, deberá asignarle un alias. El siguiente ejemplo permite al servlet sql.database.query.Servlet ser invocado por una URL como "http://hyd.com/servlet/SQLQuery?mes=junio". Los alias también son útiles para ocultar los nombres reales de los servlets a los usuarios.

Es posible asignar más de un alias al servlet. El gestor de servlets creará una nueva instancia del servlet al recibir la primera URL que se refiera a cada alias. El gestor de servlets invocará el método init() del servlet cuando se cree una nueva instancia. Puesto que el alias puede utilizarse en otras directivas en el archivo de propiedades, su pueden dar propiedades diferentes a las instancias. Por ejemplo, se podría especificar un argumento de inicialización distinto para cada alias. Asimismo, puesto que las clases de servlets sólo se cargan una vez aunque se hayan creado varias instancias, las instancias del servlet pueden compartir datos utilizando variables de clases estáticas.

Como función de seguridad, si se asigna un alias a un servlet, no se podrá hacer referencia al servlet en las URL por su nombre de clase. Esto le permitirá ocultar el nombre real del servlet.

Argumentos de inicialización

Los datos de inicio de un servlet se pueden especificar en el archivo de propiedades. El servlet puede acceder a los datos usando el método ServletConfig.getInitParameter. La directiva de inicialización tiene esta sintaxis:

servlet.<alias o nombre de la clase>.initArgs=<nombre1=valor1>,<nombre2=valor2>,...

Se pueden especificar varios argumentos separándolos por comas. Por ejemplo:

servlet.SQLQuery.initArgs=target=db2,user=Domino,cacheSize=30

Asignación de extensiones URL

La directiva de asignación de extensiones URL tiene esta sintaxis:

servlet.<alias o nombre de la clase>.extension=<extensión> <extensión> ...

Es posible asignar más de un extensión al servlet, separando unas de otras por un espacio. Asimismo, todas las extensiones deben haberse incluido en el parámetro Extensiones del archivo de Servlets del documento de servidor. Por ejemplo, para hacer que Domino invoque al servlet SQLQuery siempre que una URL especifique la extensión "sql" o "sq", incluya "sql,sq" en el parámetro del servidor y agregue esta directiva al archivo de propiedades:

servlet.SQLQuery.extension=sql sq

Esto permitirá a un usuario invocar al servlet con una URL como ésta:

http://hyd.com/query.sql?mes=junio

Cargar al iniciar la ejecución

De forma predeterminada, el gestor de servlets carga en la memoria los archivos de clase de un servlet la primera vez que recibe una URL que se refiere a él. Sin embargo, se puede especificar que uno o varios servlets se carguen nada más iniciarse el gestor de servlets. Esto evita que los usuarios sufran demoras cuando las URL soliciten por primera vez los servlets.

La directiva de inicio de la ejecución tiene esta sintaxis:

servlets.startup=<alias o clase> <alias o clase> ...

Tenga en cuenta que servlets es plural y que los nombres de servlets deben estar separados por espacios.

Si ha asignado uno o varios alias a un servlet, puede incluir los alias en la directiva de inicio de la ejecución. Esto provocará que el gestor de servlets cargue las clases del servlet y, a continuación, cree una instancia para cada alias.

Una vez que el gestor de servlets carga las clases de un servlet, estas permanecen en la memoria hasta que la tarea HTTP de Domino es detenida por el comando de la consola "tell http quit" o es restablecida por el comando "tell http restart". Antes de descargar un servlet, el gestor de servlets invoca el método destroy() para cada instancia del servlet, para darle la posibilidad de liberar recursos.

Las clases cargadas por el cargador de clases de JVM permanecen activas hasta que se detiene la tarea HTTP. El comando "tell http restart" no las descargará.

Ejemplo de archivo de propiedades

He aquí un ejemplo de archivo servlets.properties:

# Propiedades del servlet sql
servlet.SQLQuery.code=sql.database.query.Servlet
servlet.SQLQuery.initArgs=cache=30
servlet.SQLQuery.extension=sql
# Propiedades del servlet de correo
servlet.MailServlet.initArgs=mime=enabled,smime=disabled

# Ambos servlets se deben cargar al iniciarse la ejecución
servlets.startup=SQLQuery MailServlet
# fin del archivo

Ejemplo
Véase también


Glosario
¿Desea opinar sobre la Ayuda o sobre la utilidad del producto?