Estándar de desarrollo e implantación de aplicaciones del Govern

Anuncio
Estándar de desarrollo e implantación de
aplicaciones del Govern de les Illes Balears
ESTÁNDARES DE SISTEMAS JEE
Versión: 6.0
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Índice de contenidos
INTRODUCCIÓN .............................................................................................................................................3
ESTÁNDAR DE DESARROLLO DE APLICACIONES JEE ....................................................................................4
NOMENCLATURA DE APLICACIONES JEE ......................................................................................................5
NOMENCLATURA DE CLASES....................................................................................................................................5
Jerarquía de paquetes..................................................................................................................................5
Nomenclatura de clases...............................................................................................................................6
Nomenclatura de métodos..........................................................................................................................6
NOMBRES DE APLICACIÓN......................................................................................................................................6
NOMBRES DE LOS JAR........................................................................................................................................7
ARQUITECTURA DE APLICACIONES..............................................................................................................7
SERVICIOS DE DIRECTORIO DEL SERVIDOR DE APLICACIONES...................................................................................................7
ACCESO A BASES DE DATOS......................................................................................................................................7
MÓDULOS JSP/JSF, SERVLETS Y ENTERPRISE JAVA BEANS..................................................................................................8
SEGURIDAD DE APLICACIONES..................................................................................................................................9
Elemento <login-config>..............................................................................................................................9
Elemento <security-role>.............................................................................................................................9
Elemento <security-constraint>..................................................................................................................10
Protección de EJBs....................................................................................................................................10
Declaración de dominios de seguridad en Jboss (elemento <security-domain>).............................................10
CLASS-LOADER DE APLICACIONES..............................................................................................................................10
CONTEXT ROOT................................................................................................................................................11
GENERACIÓN DE LOGS DE APLICACIÓN......................................................................................................................11
PROPIEDADES DE CONFIGURACIÓN...........................................................................................................................12
RENDIMIENTO DEL ACCESO A ELEMENTOS ESTÁTICOS......................................................................................................12
UTILIZACIÓN DE MAVEN...................................................................................................................................12
CONSIDERACIONES ADICIONALES ...........................................................................................................................12
APLICACIÓN DE LOS PARCHES CAIB ............................................................................................................13
APLICACIÓN DEL SCRIPT DE SEGURIDAD.....................................................................................................................13
PARCHES SUMINISTRADOS POR RED HAT...................................................................................................................13
OPTIMIZACIONES..............................................................................................................................................13
http://dgtic.caib.es > 2
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Introducción
Este documento detalla el estándar de desarrollo de aplicaciones JEE que se debe seguir para el
desarrollo de aplicaciones que se instalarán en los servidores de la DGIDT.
El documento trata varios aspectos:
•
Definición del entorno operativo
•
Nomenclatura de aplicaciones
•
Arquitectura de aplicaciones
•
Adaptación del JBoss al entorno CAIB
http://dgtic.caib.es > 3
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Estándar de desarrollo de aplicaciones JEE
A continuación se detallan un conjunto de normas de carácter general relacionadas con el
desarrollo y ejecución de aplicaciones JEE.
1. Las aplicaciones web que se desarrollen para el Govern de les Illes Balears deberán estar
preparadas para ser ejecutadas sobre el servidor de aplicaciones Jboss 5.1.2 EAP una vez
aplicados los parches de la CAIB (descargables desde dgtic.caib.es).
2. Además serán desarrolladas siguiendo los estándares publicados por la Direcció General
d'Innovació i Desenvolupament Tecnològic.
3. Las aplicaciones se deberán desarrollar utilizando la arquitectura MVC (interfaz, lógica y
datos).
4. El software de base a utilizar será el que se detalla a continuación:
Interface de usuario
Producto
Tecnología
Servlets 2.5
JSF 1.2 / JSP 2.1
Firefox 13.0 o superior
IE 7.0 o superior
Lógica de aplicación
Producto
Tecnología
Jboss 5.1.2 (parche CAIB 1.4)
JVM: jdk-1.6.0_23
EJB 3.0
Persistencia
Tecnología
JPA 1.0
Base de datos
Producto
Oracle 11
PostgreSQL 8.4
Tecnología
JDBC
ANSI-SQL
5. Las integraciones se llevarán a cabo mediante la utilización de Web Services, según la
especificación estándar JAX-WS de JEE 1.5 y usando las librerías CXF (ver apartado
Aplicación de Parches CAIB – Parches suministrados por RedHat).
6. En función de criterios de mantenimiento y disponibilidad de versiones y con el objetivo
de mejorar el servicio ofrecido a las consellerias, el Centro de Proceso de Datos de la
DGIDT se reserva la facultad de actualizar las versiones del software aquí reflejadas por
otras superiores en el momento de la puesta en producción.
http://dgtic.caib.es > 4
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
7. El producto final y las actualizaciones se entregarán según el formulario estándar de
cuaderno de carga definido por la DGIDT (ver Documento de Implantación de
aplicaciones, Capítulo 4. Cuaderno de carga).
8. El sistema deberá cumplir las medidas de seguridad designadas en el R.D. 1720/2007, de
21 de Diciembre, por el que se aprueba el Reglamento de desarrollo de la Ley Orgánica
15/1999, de 13 de Diciembre, de Protección de Datos de Carácter Personal (LOPD).
9. El SGBD a utilizar vendrá determinado por la DGIDT. Se informará de la elección
realizada como respuesta a la solicitud de inicio de proyecto.
Nomenclatura de aplicaciones JEE
Nomenclatura de clases
Jerarquía de paquetes
Las clases de objetos se estructurarán en aplicaciones y paquetes. Todas las aplicaciones y
paquetes dependerán jerárquicamente del dominio de paquetes es.caib.
Así las clases se denominarán es.caib.Aplicación.Paquete.Clase, tal y como puede observarse a
continuación:
Los caracteres válidos serán aquellos definidos por el estándar Java: letras mayúsculas y
minúsculas del alfabeto inglés y números en posición no inicial.
Los nombres de aplicación estarán siempre en minúsculas y deberán ser solicitados y
autorizados por el Centre de Procés de Dades de la DGIDT (ver documento de Implantación
de aplicaciones, Capítulo 2. Solicitud de código de aplicación).
http://dgtic.caib.es > 5
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Los nombres de paquete estarán siempre en minúsculas y podrán ser nombrados, dentro del
paquete de aplicación, a criterio de analistas y diseñadores.
Nomenclatura de clases
Las clases se nombrarán con la primera letra mayúscula y el resto en minúsculas. Las clases
formadas por varias palabras utilizarán mayúsculas para la inicial de cada una de ellas:
es.caib.aplicacion.paquete.Clase
es.caib.aplicacion.paquete.ClaseDeVariosVocablos
Nomenclatura de métodos
Los métodos se nombrarán con todas las letras minúsculas, incluida la inicial. Las clases
formadas por varias palabras utilizarán mayúsculas para la inicial de las segundas palabras:
es.caib.aplicacion.paquete.Clase.metodo
es.caib.aplicacion.paquete.Clase.metodoDeVariosVocablos
Nombres de aplicación
Para evitar problemas de coincidencias de nombres a la hora de desplegar las aplicaciones en
el servidor JEE, los nombres de aplicación (fichero *.ear) y de aplicación web (fichero *.war)
deberán definirse de la siguiente forma:
•
El nombre del fichero *.ear deberá coincidir con el nombre (código) de aplicación
proporcionado por la DGIDT. Por ejemplo:
◦ Si el nombre de aplicación es NOMBREAPLICACIÓN, el nombre del fichero *.ear
deberá ser nombreaplicación.ear
•
Para la nomenclatura de los ficheros *.war se considerarán dos posibilidades:
◦ Si la aplicación tiene un único fichero *.war, éste deberá tener el mismo nombre
que el fichero *.ear
◦ Si la aplicación tiene varios ficheros *.war, los nombres de estos deberán estar
precedidos por los tres caracteres de prefijo de aplicación seguidos de _.
Ejemplo:
Si el prefijo de la aplicación NOMBREAPLICACIÓN es APL, los nombres de ficheros *.war
deberán ser apl_xxxxxx, donde xxxxxx será un nombre lo más simple y representativo
posible. En el caso de existir Front-Office y Back-Office, el nombre recomendado para el
Front-Office será APL_front.war, mientras que en el caso del Back-Office será
APL_back.war.
El código de aplicación y su prefijo habrán sido facilitados previamente por el Centro de
Proceso de Datos de la DGIDT (ver Documento de Implantación de Aplicaciones, Capítulo 2.
Solicitud de código de aplicación).
http://dgtic.caib.es > 6
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Nombres de los JAR
Para la nomenclatura de los ficheros *.jar se considerarán dos posibilidades:
•
Si la aplicación tiene un único fichero *.jar, éste deberá tener el mismo nombre que el
fichero *.ear
•
Si la aplicación tiene varios ficheros *.jar, los nombres de estos deberán ser:
es_caib_nombreaplicación_nombrejar.jar, donde nombreaplicación deberá coincidir con
el código (nombre) de aplicación facilitado por el Centro de Proceso de Datos de la
DGIDT (ver Documento de Implantación de Aplicaciones, Capítulo 2. Solicitud de código
de aplicación).
Ejemplos:
Dada una aplicación con código (nombre) NOMBREAPLICACIÓN, prefijo APL y varios
ficheros *.jar, los nombres de ficheros *.jar deberán ser es_caib_nombreaplicación_xxxxxx,
donde xxxxxx será un nombre lo más simple y representativo posible.
Dada una aplicación con código NOMBREAPLICACIÓN, prefijo APL y un único fichero *.jar,
el nombre del fichero deberá ser nombreaplicación.jar.
Arquitectura de aplicaciones
Servicios de directorio del servidor de aplicaciones
El acceso al servicio de directorio (NamingFactory) se realizará siempre con los parámetros
por defecto, asumiendo que las propiedades JNDI están correctamente configuradas. Los
servicios de directorio del servidor transaccional identificarán cada Enterprise Java Bean
mediante su nombre jerárquico completo, debiendo acceder las clases Java a él mediante
dicho nombre.
El acceso a otro tipo de servicios, tales como conexiones a base de datos o pools de
conexiones se realizará a través de nombres jerárquicos dependientes de la jerarquía de la
aplicación. Ejemplo:
Base de datos: es.caib.aplicación.db.XXXXXX
Mail: es.caib.aplicacion.mail.XXXXX
Acceso a bases de datos
El acceso se realizará a través de la jerarquía es.caib.codigoaplicacion.db, donde
codigoaplicacion indica el código asignado por la DGIDT a la aplicación.
Dentro de esta jerarquía se encontrará un objeto para cada conexión a base de datos definida
en la aplicación. La base de datos seguirá los criterios de nomenclatura de las clases de
objeto:
es.caib.aplicacion.db.Presidencia
es.caib.aplicacion.db.Defecto
http://dgtic.caib.es > 7
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
es.caib.aplicacion.db.RecursosHumanos
El usuario del pool de conexiones deberá seguir la nomenclatura WWW_xxxxxx, donde xxxxxx
tiene que coincidir con el código de aplicación.
El acceso a la base de datos debe hacerse utilizando cliente thin, no OCI.
Módulos JSP/JSF, Servlets y Enterprise Java Beans
Todas las peticiones se procesarán a través de Servlets o de Managed Beans, preferiblemente
Managed Beans. Estos recogerán las peticiones del usuario y localizarán el Enterprise Java
Bean adecuado a través del método lookup o inyección del servicio. Es muy importante
remarcar que bajo ninguna circunstancia ni el servlet, ni los managed beans, ni las páginas
JSP/JSF o en general cualquier módulo de la capa de presentación deberá acceder de forma
directa a los pools de conexión a la base de datos. Toda operación contra bases de datos
deberá ser canalizada a través de los EJBs.
Dicho EJB realizará las operaciones necesarias a través de los pools de conexión a la base de
datos y devolverá información al servlet.
El servlet o managed bean analizará la respuesta y la redirigirá a la página JSP/JSF
correspondiente, la cual realizará las funciones de representación de las páginas adecuadas.
En condiciones excepcionales, cuando la lógica del proceso a generar sea prácticamente nula y
no se tenga que mostrar una página u otra en función de los datos introducidos, se permitirá
que el usuario envíe la petición http directamente a una página JSP/JSF, previa consulta y
autorización.
http://dgtic.caib.es > 8
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Seguridad de aplicaciones
Todos los aspectos relativos a identificación y autorización de los usuarios a servlets, JSPs,
JSFs o EJBs serán gestionados de forma externa a las aplicaciones, desde el entorno de
administración de la plataforma JEE, por lo que no se debe codificar dentro de servlets, JSPs,
JSFs ni EJBs ninguna regla o criterio de autenticación.
Sí pueden estar codificados dentro de la aplicación aspectos relativos a cómo se presenta el
interface de usuario.
En caso de que la aplicación JEE requiera restringir el acceso a los recursos mediante un
usuario y password deberán configurarse los siguientes elementos:
<security-constraint>
<login-config>
<security-role>
Elemento <login-config>
El método utilizado para autentificar el usuario deberá ser preferentemente FORM y el
nombre de realm especificando Govern de les Illes Balears. No deberá utilizarse el tag
<form_login_config>. Ejemplo:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Govern de les Illes Balears</realm-name>
</login-config>
Elemento <security-role>
En el fichero web.xml (y ejb-jar.xml) se deberán definir uno o varios roles para la aplicación,
con sus respectivas descripciones. Ejemplo:
<security-role>
<description>… descripción …</description>
<role-name>APL_ XXXXXX</role-name>
</security-role>
Para poder integrar la seguridad definida a nivel de aplicación con el sistema de seguridad de
la CAIB será necesario que los nombres de roles definidos en el fichero web.xml estén
estandarizados según las normas de la DGIDT.
Para el caso de una aplicación con prefijo APL_ el nombre especificado con el tag <rolename>
debe ser APL_XXXXXX, donde XXXXXX debe ser un nombre lo más simple y representativo
posible. Ejemplos de nombres de roles:
APL_CONSULTA
APL_INTRODUCCIO
APL_ADMINISTRACIO
Por otro lado, hay que tener en cuenta que en el cuaderno de carga donde se definan los roles,
se tiene que adjuntar una descripción completa de cada uno de ellos.
http://dgtic.caib.es > 9
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Elemento <security-constraint>
Se deberá utilizar en caso de tener que definir privilegios de acceso para una colección de
recursos. Deberán especificarse los roles que tendrán acceso a los recursos protegidos.
Protección de EJBs
Es necesario proteger los EJBs de manera que ningún usuario anónimo pueda ejecutarlos,
salvo que los EJBs deban ser públicos. Para protegerlos hay que poner security constraints a
los EJBs con el tag method-permission el fichero ejb-jar.xml. Ejemplo:
<security-role>
<role-name>nombre_de_rol</role-name>
</security-role>
<method-permission>
<role-name>nombre_de_rol </role-name>
<method>
<ejb-name>nombre_de_EJB</ejb-name>
<method-name>método</method-name>
<method-params>
<method-param>parámetro1</method-param>
<method-param>parámetro2</method-param>
</method-params>
</method>
</method-permission>
Existe la posibilidad de utilizar las anotaciones de EJB3 para proteger los EJBs.
Declaración de dominios de seguridad en Jboss (elemento <security-domain>)
El acceso a los recursos protegidos deberá hacerse dentro del siguiente dominio de seguridad
(Security Domain), que se deberá especificar tanto en el jboss-web.xml como en el jboss.xml.
<security-domain>
java:/jaas/seycon
</security-domain>
Class-Loader de aplicaciones
Cada aplicación deberá convivir en el mismo servidor JBoss con otras de distintos
proveedores. Por tal motivo cada aplicación deberá aislarse mediante un ‘class-loader’ propio
para evitar conflictos de librerías (lucene, struts, hibernate, etc.). Se pueden usar alguno de
los dos métodos que proporciona JBoss:
1. Usando la etiqueta loader-repository del jboss-app.xml (y los respectivos ficheros de los war
y ejb-jar). A continuación se muestra un ejemplo de jboss-app.xml, con la configuración de
loader-repository (debe ser adaptado para las necesidades de cada aplicación):
<jboss-app>
<loader-repository>
es.caib.aplicacion:loader=aplicacion.ear
<loader-repository-config>
java2ParentDelegation=false
http://dgtic.caib.es > 10
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
</loader-repository-config>
</loader-repository>
</jboss-app>
2. Usando el descriptor jboss-classloading.xml (para war, ejb-jar y ear). A continuación se
muestran ejemplos para el ear y el war respectivamente (deben ser adaptados para las
necesidades de cada aplicación).
<classloading xmlns="urn:jboss:classloading:1.0"
domain="aplicacion.ear"
export-all="NON_EMPTY"
import-all="true"
parent-first="false">
</classloading>
<classloading xmlns="urn:jboss:classloading:1.0"
domain="aplicacion.war"
parent-domain="aplicacion.ear"
export-all="NON_EMPTY"
import-all="true">
</classloading>
Context root
•
En caso de tener un único context root, éste deberá coincidir con el código de la
aplicación.
•
Si la aplicación tiene un frontoffice (público) y un backoffice (privado), el ear deberá
contener dos war, y la nomenclatura del context root será:
◦ Nombre de la aplicación seguido de la palabra front ('nombreaplicación'front)
para el context root del frontoffice.
◦ Nombre de la aplicación seguido de la palabra back ('nombreaplicación'back)
para el context root del backoffice.
•
Si la aplicación tiene servicios web, el context root de publicación será
'nombreaplicación'front/ws, 'nombreaplicación'back/ws o en caso de solo tener
backoffice 'nombreaplicación'/ws.
•
En ninún caso se dará acceso a otros contextos que no sean los especificados
anteriormente.
Generación de logs de aplicación
En cuanto a la generación de logs de usará siempre la librería estándar de JBoss: log4j. Además,
los mensajes de depuración generados por la aplicación deberán aparecer en la categoría
DEBUG o TRACE, nunca INFO o WARN (usando siempre log4j).
Por otro lado, en ningún caso se deberá mostrar información confidencial por log (por ejemplo
datos protegides por la LOPD). Nota: queda prohibido el uso de System.out (los mensajes generados
utilizando System.out no son guardados por el sistema de log configurado en los servidores).
http://dgtic.caib.es > 11
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
Propiedades de configuración
Las propiedades de configuración, o ficheros adicionales propios de cada aplicación se
deberán definir en un fichero <código-aplicacion>-service.xml (mediante el mbean
SystemPropertiesService, cuyo atributo name tenga como subatributo name el formato codigoaplicacionProperties).
•
Las propiedades tendrán como prefijo es.caib.<código-aplicacion>.
•
El fichero se desplegará directamente en el directorio deploycaib.
Ejemplo: La aplicación necesita acceder a un almacén de claves, por lo que establece una
propiedad que indicará la ruta del fichero que estará dentro del mismo fichero .sar.
Ejemplo (aplicacion-service.xml):
<server>
<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="jboss:type=Service,name=AplicacionProperties">
<attribute name="Properties">
es.caib.aplicacion.propiedad1=valor1
es.caib.aplicacion.propiedad2=valor2
es.caib.aplicacion.propiedad3=valor3
</attribute>
</mbean>
</server>
Rendimiento del acceso a elementos estáticos
Para mejorar el uso de la cache, los elementos estáticos de la parte web que no requieran
especial protección (imágenes usadas para el diseño de la web, por ejemplo) no deberán ser
protegidos por rol dentro del fichero WEB-INF/web.xml de los paquetes WAR.
Utilización de MAVEN
Para las nuevas aplicaciones desarrolladas cumpliendo los estándares de desarrollo de la
DGIDT será obligatoria la utilización de Maven para la construcción de los proyectos.
Se deberán utilizar siempre repositorios públicos y en caso de que haya librerías que no estén
disponibles en dichos repositorios, se deberá informar a la DGIDT por si estima oportuna su
inclusión en el repositorio interno de la DGIDT (Archiva).
Consideraciones adicionales
Para todas aquellas funcionalidades no especificadas en este documento, se recomienda la
utilización de estándares JEE, evitando en la medida de lo posible soluciones particulares que
solo funcionen sobre JBoss.
•
Las aplicaciones deberán utilizar el juego de caracteres UTF-8:
<?xml version=... encoding="UTF-8" ?>
•
Siempre que se requieran librería de terceros se utilizarán preferiblemente aquellas que
estén disponibles en la distribución de Jboss modificada por la DGIDT (disponible en
http://dgtic.caib.es/estandards/index.html).
http://dgtic.caib.es > 12
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
•
Los beans serán preferentemente stateless session beans.
•
Los stateful session beans deberán implementar adecuadamente los métodos activate y
passivate al efecto de minimizar el consumo de memoria y recursos. Nota: se deberá
comunicar a la DGIDT antes de utilizarlos.
• Todo acceso a un recurso localizable vía JNDI debe estar referenciado de forma relativa a
java:comp
Aplicación de los parches CAIB
Para asegurar que se desarrollan las aplicaciones para un entorno como el de la CAIB, es
necesario aplicar diversas modificaciones a la versión de Jboss 5.1.2 EAP. Se trata del parche de
seguridad (que configura los aspectos de acceso al módulo de autenticación de la CAIB, Seycon),
de la librería CXF para soporte a Web Services, y por otro lado algunas optimizaciones
propuestas para optimizar el rendimiento de JBoss, quitando los servicios que no van a ser
usados.
A continuación se indican los pasos a seguir para aplicarlos.
Aplicación del script de Seguridad
Para instalar las modificaciones de seguridad se tiene que usar el script jboss-patch-1.4.jar.
Concretamente la sentencia a ejecutar es:
java -jar jboss-patch-1.4.jar <directori> <configuració> <tipus>
<directori> es el directorio raiz del jboss (el que contiene los directorios bin, client, server ...)
<configuració> indicar default (la otra opción, jetty, se usa para configurar un servidor de
autenticación)
<tipus> Entorno para el cual va destinado el jboss: development, preproduction, production
Exemple: java -jar jboss-patch-1.4.jar /app/jboss-eap-5.1.1/jboss-as default development
Parches suministrados por Red Hat
Para el uso de Web Services, será obligatorio el uso de la librería CXF suministrada por Red
Hat (JBoss EAP 5.1.2 Web Services CXF ).
Cualquier otro parche que pueda suministrar Red Hat que solvente fallos de rendimiento o de
seguridad, podrán ser instalados en los servidores de aplicaciones alojados en el Govern.
Optimizaciones
Como ya se ha comentado, el script de Serveis Web elimina ciertos aspectos de la
configuración, funcionalidades y módulos que no son usados por las aplicaciones del Govern,
el objetivo es optimizar el rendimiento de Jboss 5.1.2. Concretamente:
1. Eliminar las políticas de autenticación que no se usen (se tiene que usar la de seycon) de
conf/login-config.xml
2. Eliminar el servicio BSH (deployers/bsh.deployers)
http://dgtic.caib.es > 13
Estándar de desarrollo de aplicaciones > Estándares de Sistemas JEE
3. Eliminar el servicio de mensajería
4. Eliminar el servicio de Scheduling Quartz (deploy/quartz-ra.rar)
5. Eliminar el servicio uuid-key-generator (deploy/uuid-key-generator.sar)
6. Eliminar el servicio XNIO (deploy/xnio-provider.jar i deployers/xnio.deployer)
7. Eliminar la Base de dades Hypersonic (i las referencias en los servicios que la usen)
8. Configurar el jboss para que borre el directorio temp automáticamente cuando se reinicie
el servidor
http://dgtic.caib.es > 14
Descargar