Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Anexo 8. Normas de Empaquetado y Entrega
Anexo 8. Normas de Empaquetado y Entrega
ndice
1 Introduccin.............................................................3 2 Empaquetado de los entregables...............................3
2.1 Empaquetado de los mdulos.......................................3 2.2 Nombrado de los entregables.......................................4 2.3 Versionado de empaquetados .....................................5 2.4 Poltica de empaquetado de libreras............................5 2.5 Elementos a excluir del empaquetado...........................7
5 Utilizacin de recursos............................................18
5.1 Base de datos............................................................18 5.2 Ficheros de las aplicaciones.......................................22
1 Introduccin
El objetivo de este documento es definir la normativa que se debe cumplir para realizar las tareas de empaquetado y entrega de los aplicativos web J2EE del IAM, as como permitir su validacin antes del proceso de despliegue.
Cada mdulo debe disponer tambin de su propio pom.xml que permite la compilacin y empaquetado de cada mdulo. Para realizar la compilacin y empaquetado del aplicativo se ejecutar en la raz del proyecto el siguiente comando: mvn clean package. Adicionalmente se pueden aadir distintas opciones (por ejemplo perfil a usar) que debern ser indicadas en la solicitud de auditora. Se debe generar al menos un entregable (EAR) correspondiente al aplicativo que se colocar en la carpeta de despliegues. En caso de contener recursos (estticos o de configuracin) se debe generar un fichero ZIP con los recursos estticos y otro fichero ZIP con los ficheros de configuracin por cada entorno. En caso de tener subsistemas (como puede ser internet e intranet) se crearan un directorio por subsistema repitiendo el esquema. A continuacin se muestra un esquema donde se puede observar donde se encuentra cada uno de los elementos descritos en esta apartado. Se supone una entrega del proyecto CURSO en el tag V01.01.003
<version> - versin del aplicativo que debe coincidir con el del artefacto. No es necesario indicarlo si corresponde a un mdulo debido a que coincide con la versin definido en el pom padre. <packaging>- indica el tipo de empaquetado: ear, war, jar, pom, ejb...
Los mdulos JAR, WEB y EJB empaquetados dentro de un EAR deben tener la misma versin que el EAR. Es obligatorio que el pom.xml que realiza el empaquetado del EAR contenga la versin a entregar.
No se deben tampoco incluir libreras propias de servidores de aplicaciones o de la jdk, por ejemplo: ant-antlr-* core.jar ffdc.jar ffdc.jar ivjejb35.jar j2ee.jar jaas.jar jboss*.jar jboss*.properties jcert.jar jdbc2_0-stdext.jar jnet.jar jsse.jar jstl.jar jta.jar namespace.jar rt.jar
No se deben empaquetar jar necesarios tan solo para realizar las pruebas del sistema: cactus*.jar jmock*.jar jtestcvase*.jar junit*.jar mockito*.jar powermock*.jar strutstest*.jar
Clases que implementen un mtodo main, puesto que son aplicaciones WEB y no aplicaciones cliente. Contenidos estticos del aplicativo. Ver apartado Recursos estticos Archivos de configuracin dependientes del entorno. Ver Archivo con recursos dependientes del entorno
Solamente se permite el despliegue de artefactos EAR en el servidor WAS. Consideramos la siguiente estructura estndar de directorios para los aplicativos EAR: /Directorio raz del EAR WAR 1 WAR N EJB 1 EJB N lib META-INF application.xml MANIFEST.MF
Los mdulos Web y EJB se empaquetan en el directorio raz del EAR. El directorio lib debe contener las libreras compartidas por todos los mdulos empaquetados en el EAR, salvo las libreras compartidas a nivel de servidor definidas en el apartado Poltica de empaquetado de libreras. El fichero META-INF/MANIFEST.MF se genera durante el proceso de empaquetado realizado con Maven. Debe contener la siguiente informacin:
Manifest-version : 1.0 Build-Jdk: <Versin del JDK usado para compilar> Created-By: <uso de Maven como herramienta de empaquetado>
El descriptor de despliegue de la aplicacin META-INF/application.xml debe cumplir con la especificacin J2EE 1.4 para WAS 6.1 o Java EE 6 para WAS 8. Debe contener una referencia a los distintos mdulos WEB o EJB a desplegar as como el context root de cada mdulo. Respecto a los descriptores de despliegue, el EAR no debe incluir la carpeta META-INF/ibmconfig, ya que debern utilizarse los recursos definidos a nivel de servidor WAS. El nombre del fichero .EAR tiene que corresponderse con el context root del mdulo Web principal, el cual debe coincidir con el acrnimo de la aplicacin y contexto que se haya indicado en el documento Despliegue de Aplicacin Web . 3.1.2
Cada mdulo Web (aplicacin o servicio web) contenido en el EAR se empaqueta en un fichero WAR que tendr la siguiente estructura: /Directorio raz del WAR WEB-INF jsp classes META-INF Archivos de configuracin independientes del entorno
lib web.xml META-INF MANIFEST.MF Los archivos jsp deben estar bajo el directorio WEB-INF/jsp pudiendo este tener subdirectorios para facilitar el ordenado de las jsp. El directorio WEB-INF/classes contiene las clases java compiladas as como los ficheros de recursos propios de la aplicacin y no dependientes de entorno. El directorio lib nicamente debe contener las libreras JAR usadas exclusivamente por el mdulo Web. El fichero META-INF/MANIFEST.MF debe contener la siguiente informacin:
Manifest-version : 1.0 Build-Jdk: <Versin del JDK usado para compilar> Created-By: <uso de Maven como herramienta de empaquetado>
El descriptor de despliegue WEB-INF/web.xml debe cumplir especificacin de servlets 2.4 para WAS 6.1 y servlets 3.0 para WAS 8.0
con
la
Cualquier fichero de configuracin no dependiente del entorno ir incluido dentro del directorio WEB-INF. 3.1.3
Manifest-version : 1.0 Build-Jdk: <Versin del JDK usado para compilar> Created-By: <uso de Maven como herramienta de empaquetado>
En caso de que el jar contenga en su interior EJB se empaquetaran junto con su descriptor de despliegue
10
3.1.4
Recursos estticos
Podemos considerar recursos estticos a los archivos html (.htm, .html), los documentos de ayuda/manuales (.doc, .pdf), las carpetas con hojas de estilo (.css), carpetas con imgenes (.jpg, .gif, .png) y archivos javascript (.js), etc. Estos elementos deben entregarse en un archivo ZIP independiente al EAR tal y como se indica en el apartado Empaquetado de los mdulos, pues se despliegan en el servidor web frontal IBM HTTP Server. Todo lo referente al runtime de los Applets tambin tiene que ser entregado conjuntamente con la parte esttica y no con el EAR de la aplicacin. En una aplicacin con varios mdulos WAR, para poder diferenciar los posibles context roots, los recursos estticos debern ubicarse bajo un directorio con el identificativo de cada context root. Al menos se debe incluir una pgina esttica (home.htm, index.htm,...), la cual ser declarada en el descriptor web.xml como welcome file. Dicha pgina ser el punto de entrada inicial en las aplicaciones que requieren SSL. 3.1.5
Si se dispone de ficheros de configuracin (.properties, .XML, etc.) y sus propiedades dependen del entorno en que se encuentra desplegado, se entregarn en un archivo ZIP adicional tal y como se indica en el apartado Empaquetado de los mdulos, que se desplegar en el repositorio de recursos de los servidores WAS. Se agruparn en una carpeta para su despliegue en preproduccin y otra para su despliegue en produccin y cuando dichos recursos se modifican con la actualizacin de versin (o es el primer despliegue) deben incluirse en la entrega. Para aplicaciones a desplegar en plataforma WAS 8 se entregar en un nico fichero, denominado serviciosIAM.properties, todas aquellas propiedades de los servidores IAM y/o acceso a los mismos, a cumplimentar por las unidades de Sistemas. Estos ficheros incluyen: Ficheros con parmetros propios de la aplicacin cuyos valores dependen del entorno Ficheros con datos de servicios externos (URLs, mquinas, usuarios de conexin, etc.) Log4J.properties o similar Almacenes de certificados propios de la aplicacin
11
Se debe declarar un perfil (profile) en el script de .pom padre que permita el empaquetado del archivo ZIP para al menos el entorno de preproduccin y produccin.
Entorno de desa: mvn clean package P desa (o mvn clean package ya que es el de por defecto) Entorno de pre: mvn clean package P pre Entorno de pro: mvn clean package P pro
Para preproduccin el perfil tendr el identificador pre y para produccin tendr el identificador pro. En caso de crear un perfil para desarrollo su identificador ser desa y este ser el perfil por defecto. As los comandos a ejecutar por entorno sern como siguen. Se podrn crear perfiles adicionales siempre y cuando se ejecuten junto con los perfiles obligatorios. Por ejemplo mvn clean package P pre,internet. En el documento Manual Tcnico de Despliegue de Aplicacin Web, se debern indicar los parmetros dependientes de cada entorno, independientemente de que los ficheros ya contengan dichas modificaciones, ya que se verificar que los valores son correctos antes de proceder a su despliegue. 3.1.6
Documentacin
La documentacin a aportar, para solicitar la peticin de despliegue de la aplicacin, se encuentra indicada en la gua de estndares en el apartado IAS.
12
13
<welcome-file-list>: al menos debe declararse la pgina esttica de inicio entregada con los componentes estticos, fundamentalmente si se trata de aplicaciones que requieren SSL <error-page>: mapeo de errores 4xx y 5xx a una pgina personalizada de la aplicacin <resource-def>: para definicin de los pool de conexiones a base de datos, recursos URL, etc.
Respecto al descriptor ibm-web-ext.xmi de WAS, localizado en el directorio WEB-INF del WAR, se tendr en cuenta: fileServingEnabled="false":deshabilita el servicio de pginas serveServletsByClassnameEnabled="false": los servlets deben servirse solamente a travs de una URI Referente, sin embargo, si esta propiedad est habilitada, el servlet puede ser invocado especificando el nombre de la clase. Por motivos de seguridad, esta propiedad debe de estar a false. reloadingEnabled="false": deshabilitar la recarga de clases a nivel de Web Module. En el servidor WAS esta recarga se habilita a nivel de aplicacin cuando es necesario. jspAttributes reloadEnabled="false": especfica si se habilita la recarga de clases cuando un JSP es modificado. En el servidor WAS esta recarga se habilita a nivel de aplicacin cuando es necesario
No debern entregarse descriptores propios de otros servidores de aplicaciones (jboss-web.xml, etc.). Tambin debe tenerse especial cuidado en no entregar diferentes versiones de los descriptores (web.xml.desarrollo) o ficheros obsoletos de los mismos (web.xml.old).
14
Teniendo en cuenta que varias aplicaciones van a compartir el mismo servidor WAS, cualquier parmetro que una aplicacin necesite cambiar a nivel de servidor, debe de ser acordado y aprobado de antemano. 4.3.1
Configuracin de la Sesin
No se debe incluir informacin sobre tiempo de sesin en el descriptor web.xml. Este dato se configura a nivel de aplicacin en el servidor WAS: Tiempo de expiracin de la sesin. El valor por defecto ser de 30 minutos. No debe indicarse en el fichero web.xml ni modificarse por cdigo este valor, pues de esta forma, en el servidor WAS se podr modificar convenientemente el valor para la aplicacin ya desplegada. Por defecto los servidores de IAM no tendrn habilitada la rplica de sesin para evitar utilizar procesamiento y recursos innecesarios por el propio aplicativo, ya que esta opcin incide en el rendimiento de la aplicacin y puede ocasionar problemas serios de gestin de la memoria. En el caso de que la aplicacin necesite dicha replica, habr que indicarlo en el documento Manual Tcnico de Despliegue de Aplicacin Web y asegurarse de: Que si se utiliza HTTPSession, todo lo que est incluido sea serializable. El tamao de HTTPSession debe reducirse al mximo.
4.3.2
Aunque en el descriptor ibm-web-ext.xmi, localizado en el WEB-INF de la aplicacin, se hayan incluido los atributos relativos a la recarga de clases, estos sern ignorados y configurados en el servidor WAS. En el entorno de desarrollo se habilitar la recarga de clases a nivel de Web Module, as como la recarga cuando un JSP es modificado. Adems, se proporcionar un procedimiento automtico de parada-despliegue-arranque de la aplicacin. Sin embargo, en los entorno de preproduccin, formacin y produccin la recarga de clases y JSPs estar deshabilitada, pues no se realizan despliegues de componentes aislados. Por defecto, tampoco se realizar una precompilacin de JSP 15
en el despliegue de las aplicaciones para minimizar el tiempo de parada de servicio. De ser necesaria la recarga de los JSP, debe ser expresamente documentado en el Manual Tcnico de Despliegue. 4.3.3
En determinadas circunstancias puede ser necesario especificar propiedades personalizadas que modifiquen el comportamiento por defecto del contenedor Web del servidor de aplicaciones. Anlogamente, las propiedades personalizadas en la JVM se utilizan para modificar el comportamiento de la JVM as como definir variables especficas que estarn disponibles para su uso por las aplicaciones desplegadas en el servidor de aplicaciones. Algunas de estas propiedades ya estn incorporadas por defecto en los servidores de la plataforma IAM WAS, pero otras deben solicitarse expresamente y su incorporacin se realizar una vez est aprobado el cambio, dado que afecta a todas las aplicaciones en el servidor.
USO Esta propiedad permite invocar filtros en las peticiones que no tienen definido un mapeo a un servlet. Sin esta propiedad configurada, WAS comprobara primero si la URL est mapeada a un servlet o a un fichero antes de enviar las peticiones a la cadena de filtros, de modo que se producira un error 404 si no existiera esta propiedad Esta propiedad impide que las aplicaciones puedan servir contenido esttico desde el servidor de aplicaciones, independientemente de la propia configuracin de la aplicacin. Todo este tipo de contenido se deber proporcionar a travs del servidor Web Esta propiedad impide que se puedan invocar a los servlets directamente a travs del nombre
Contenedor WEB
com.ibm.ws.webcontainer. disallowAllFileServing
Activa
Contenedor WEB
com.ibm.ws.webcontainer. disallowserveservletsbyclassna me
Activa
16
de la clase para evitar posibles riesgos de seguridad. Contenedor Web HttpSessionIdReuse Esta propiedad determina si el gestor de sesiones puede usar el identificador de sesin enviado del navegador para preservar los datos a travs de aplicaciones Web que se estn ejecutando en un mismo dominio. Esta propiedad se usa desde los aplicativos para conocer la ruta de los recursos de las aplicaciones. Esta propiedad se usa desde los aplicativos para conocer la ruta de los ficheros de logs de las aplicaciones Esta propiedad permite conocer el nombre del servidor de aplicaciones en el que se est ejecutando la aplicacin. Este nombre puede usarse como parte de la nomenclatura de ficheros NAS. Configuracin de proxy para llamadas a servicios externos al IAM. No activa
JVM
WAS61_RECURSOS WAS8_RECURSOS
Activa
JVM
WAS61_LOGS WAS8_LOGS
Activa
JVM
WAS61_SERVER_NAME WAS8_SERVER_NAME
Activa
JVM
No activa
En el Manual Tcnico de Despliegue se especificarn los valores que deben asignarse para cada uno de estos parmetros cuando no sean los valores por defecto. Estos valores pueden variar entre el entorno de desarrollo y produccin, pero siempre debern indicarse los que correspondan al entorno de produccin, los cuales sern aplicados tambin en el entorno de preproduccin
el WAS la primera vez que se necesite por la aplicacin y podrn ser reutilizados por el resto de aplicaciones del proyecto. Es el caso de la direccin URL del webService de uWeb, que ya est definido a nivel de servidor WAS y por tanto disponible para que todas las aplicaciones tengan dicha informacin independizada del entorno. La configuracin de parmetros de la aplicacin dependientes del entorno seguir estas pautas: URLs generales del IAM, por ejemplo direccin del webService de uWeb: se utilizarn recursos URL creados en el WAS. URLs especficas de la aplicacin, por ejemplo, llamadas a webservices creados en el mbito del proyecto: se agruparn en uno o varios ficheros .properties o .xml. Parmetros propios de la aplicacin: se agruparn en uno o varios ficheros .properties o .xml. Direcciones de los recursos NAS propios de la aplicacin: se incluir ese dato dentro de un fichero de propiedades Ficheros de configuracin de trazas (log4j.properties, etc.): se ubicarn junto con los ficheros de propiedades.
Los ficheros de propiedades se ubicarn en un repositorio nico de la plataforma WAS y se acceder a ellos mediante el recurso URL url/miAplicacion, nico para cada aplicacin. Para aplicaciones a desplegar en plataforma WAS 8 se entregar en un nico fichero, denominado serviciosIAM.properties, todas aquellas propiedades de los servidores IAM y/o acceso a los mismos, a cumplimentar por las unidades de Sistemas.
5 Utilizacin de recursos
5.1 Base de datos
En lo relativo a base de datos se deben seguir las siguientes indicaciones tanto a la hora de solicitar su creacin como para acceder a ella desde una aplicacin desplegada en un servidor WAS. 5.1.1
Filegroup
La base de datos deber tener definidos de forma obligatoria para el entorno productivo los siguientes filegroups: 18
PRIMARY para albergar las tablas del sistema FG_DATAnn para albergar tablas de datos. (nn >=01 <=99) FG_IMGnn para albergar imgenes (si las hubiere). FG_TEXnn para albergar textos (si los hubiere). FG_INDnn para albergar ndices no cluster.
5.1.2
Nomenclatura de ficheros
A la hora de crear la base de datos los nombres de los ficheros de base de datos sern similares a: G:\nombre_bd\Datos\primary_01.mdf G:\nombre_bd\Datos\Nombre_fichero_data01.ndf G:\nombre_bd\Imagenes\Nombre_fichero_img01.ndf G:\nombre_bd\Indices\Nombre_fichero_ind01.ndf G:\nombre_bd\Log\Nombre_fichero_log01.ldf
5.1.3
ndices
Todo ndice no cluster deber ubicarse en los file groups (FG_INDnn) definidos para ello. No definir ndice por la clave primaria, pues la definicin de la clave primaria ya lleva implcita la creacin de un ndice. Definir ndices por las columnas sobre las cuales haya definida una relacin de integridad (foreign key). Si se crean ndices por varias columnas colocar primero la columna que sea ms selectiva, es decir, por la que no se repitan mucho los valores y despus las menos selectivas. Los ndices sobre columnas que tiene mucha informacin duplicada no son eficientes. Defina ndices clustered si necesita hacer consultas sobre un rango de valores u ordenar datos por medio de GROUP BY u ORDER BY.
19
5.1.4
Particionamiento
En aquellas tablas en las que se estime un nmero muy elevado de filas, del orden de ms de 1 milln, deber implementarse el particionamiento de la misma habilitando para ello la definicin de funcin y esquema de particionamiento. 5.1.5
Los servidores de Bases de Datos corporativos sobre los que las aplicaciones desplegadas en entorno WAS deben trabajar fundamentalmente son SQL Server 2005 y Oracle 10g. En cualquier caso, los proveedores de datos para SQL Server que deben utilizarse sern los incluidos en el servidor de aplicaciones para la versin WAS 6, debindose utilizar los drivers JDBC que proporciona Microsoft para la versin WAS 8: WAS 6: o WebSphere embedded ConnectJDBC driver for MS SQL Server (SQL Server 2000 y 2005) Oracle JDBC Driver (Oracle 9 10) DB2 Universal JDBC Driver Provider (DB2 v7 y v8) DB2 UDB for iSeries (Toolbox) (AS400)
o o o
WAS 8: o o o o Microsoft SQL Server JDBC Driver 2.0 / 3.0 (SQL Server 2000 y 2005) Oracle JDBC Driver (Oracle 9 10g) DB2 Universal JDBC Driver Provider (DB2 v7, v8 y superiores) DB2 UDB for iSeries (Toolbox) (AS400)
Para el acceso a la base de datos las aplicaciones debern hacer referenciar a un recurso de tipo datasource creado a nivel de clula WAS, ofreciendo las ventajas de los pool de conexiones gestionado por el propio servidor WAS. Esto significa que la aplicacin no debe incluir en su empaquetado libreras de proveedores para acceso a las bases de datos, ni se debern abrir conexiones directamente a la base de datos sino haciendo uso de las conexiones proporcionadas por el pool definido en el datasource del servidor WAS. El fichero en el que queda reflejado esta referencia es el descriptor web.xml:
<resource-ref id="ResourceRef_1256212520375"> <description> breve descripcin sobre la BD a la que se asociar </description> <res-ref-name>jdbc/miDatasource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth>
20
Puesto que estos recursos pueden ser compartidos por las aplicaciones desplegadas en la clula, se tendr que estimar si una nueva aplicacin puede o no compartir el recurso ya creado, si debe ampliarse la capacidad de conexiones mximas a base de datos o si necesita una configuracin de parmetros especficos. Todo ello debe venir debidamente documentado en el documento Despliegue de Aplicacin Web. En cuanto a la configuracin de estos datasource: El nombre JNDI del recurso seguir el patrn jdbc/<nomBD>. Debe indicarse si se precisa transacciones del tipo XA o no. N mnimo de conexiones: por defecto se establecer a 1. N mximo de conexiones: por defecto a 10, se recomienda no superar las 30. Tiempo de espera por la conexin: por defecto a 180 milisegundos. Statement cache size: Especifica el nmero mximo de statements que puede ser cacheado por conexin. Si la statement cache no es lo suficientemente grande, es posible que ciertas ejecuciones de PrepareStatement y CallableStatement sean desechadas para incluir otras nuevas. Hay que tener en cuenta que este parmetro mejora el rendimiento de la aplicacin, pero que puede afectar a otros recursos como es la memoria. Nivel de aislamiento: propiedad personalizada que se configurar cuando venga justificado en el documento Manual Tcnico de Despliegue de Aplicacin Web
Respecto a los datos de autenticacin utilizado para la conexin con la base de datos: Los usuarios de autenticacin para la conexin se definirn a nivel de servidor WAS, pudindose crear ms de un usuario para corresponderse con diferentes perfiles de permisos en base de datos: o La nomenclatura para usuarios con permisos de lectura/escritura seguir el patrn <nombreBD>WEB La nomenclatura para usuarios de slo lectura seguir el patrn <nombreBD>DES
El usuario ser distinto del propietario de la base de datos u esquema Oracle, definiendo en base de datos los permisos adecuados para cada perfil de acceso. 21
El usuario a utilizar para conectividad desde la aplicacin web debe ser distinto al utilizado desde procesos batch o aplicaciones cliente.
5.1.6
Los scripts entregados para su ejecucin en bases de datos de los entornos de preproduccin y/o produccin debern incluir el lenguaje bajo el cual se van a ejecutar. Por lo tanto deber especificarse en cada script la siguiente sentencia: SET LANGUAGE SPANISH SET LANGUAGE ENGLISH segn corresponda para la correcta ejecucin del mismo.
En caso de utilizar gestor de base de datos Oracle (previa autorizacin del comit de estndares), es imprescindible especificar el idioma, territorio y set de caracteres de la base de datos. Por ejemplo, SPANISH, SPAIN y WE8ISO8859P1, respectivamente.
La direccin al recurso NAS deben configurarse mediante un recurso URL del servidor WAS o en alguna propiedad incluida en los ficheros propios de la
22
aplicacin, permitiendo su modificacin en funcin del entorno de fsico de ejecucin sin necesidad de alterar el EAR. El recurso NAS ser gestionado por el Dpto. de Desarrollo solicitante del mismo, por lo que la poltica de borrado de ficheros o ampliacin del espacio debe asumirse dentro de dicha gestin. En cualquier caso, la aplicacin puede verse afectada si se queda sin espacio en dicho recurso, por lo que recomendamos: Los ficheros temporales deben ser borrados por la propia aplicacin lo antes posible o en su defecto tener un mecanismo de borrado a travs de un proceso (batch) peridico. El tamao total de los ficheros temporales, documentales, de trazas, etc., no debe de superar nunca el tamao mximo pedido en el entorno de ejecucin para cada aplicacin. Para ello, la aplicacin debe acotar mediante configuracin el tamao de los ficheros y controlar las excepciones por falta de espacio. Obsrvese la importancia de diferenciar el servidor de origen en el nombre del fichero pues si pudiera darse un conflicto en la arquitectura en cluster:
WAS 6: System.getProperty("WAS61_SERVER_NAME")); WAS 8: System.getProperty("WAS8_SERVER_NAME"));
23