¿Qué es jee2?
Adalid está
diseñado para que usted pueda construir sus propios generadores, lo que le da
control total sobre el proceso de generación y los documentos resultantes.
Usando artefactos y plantillas específicas es posible generar código fuente
para cualquier plataforma de software, o tantas variantes como usted necesite
para una plataforma específica.
jee2 es un generador de aplicaciones construido con Adalid, que cuenta con más de 1.200 plantillas. jee2 genera aplicaciones Web militarizadas, transaccionales, centradas en base de datos, que ejecutan en la plataforma Java Enterprise Edition, con el servidor de aplicaciones GlassFish o WildFly, y con el servidor de bases de datos Oracle o PostgreSQL, bajo Linux o Windows. Entre los componentes más relevantes generados por jee2 están los siguientes:
- Scripts de base de datos, configuración del ambiente e instalación
- Interfaz de usuario Web
- Archivos e Informes
- Reglas de negocio e Interfaces de Servicio
- Control de Acceso, Gestión de Tareas y Auditoría
Scripts de base de datos, configuración del ambiente e instalación
Además de los scripts de base de datos, jee2 también incluye plantillas de scripts para la configuración del servidor de aplicaciones GlassFish y WildFly, y para la instalación y administración de la aplicación generada en ambientes de prueba y producción.
Todos los scripts se generan para Linux y para Windows.
Interfaz de usuario Web
Con jee2 se generan diferentes tipos de
páginas web para cada clase de entidad. Las páginas de de
consulta y registro (CRUD)
pueden ser cualquier combinación de las presentaciones, Tabular, Árbol
y Forma con o sin asistentes (wizards), con o sin pestañas (tabs); de los formatos, Independiente o Maestro/Detalle; y de los
modos disponibles, Lectura y Escritura o Sólo Lectura. Existe
además una plantilla de página para ejecutar procesos de negocio y otros
procesos, tales como generación de informes y archivos, carga y descarga de
archivos, etc.
También se
generan páginas de Inicio de Sesión, Menú y Favoritos. Por
lo general, cada usuario mantiene su propia lista de favoritos, pero los roles
definidos mediante el módulo de control de acceso también pueden tener estas
listas, de modo que puedan ser compartidos por todos los usuarios asignados al
rol.
Cada página
generada utiliza archivos de recursos (resource bundles) para implementar una interfaz de usuario
multilingüe. Las páginas se presentan a cada usuario en el idioma su elección,
siempre que el archivo correspondiente esté disponible. Actualmente jee2 genera
estos archivos en español e inglés. Traducir estos archivos es todo lo que
necesita hacer para agregar idiomas adicionales a su aplicación.
Cada página de
presentación tabular permite hacer consultas a la base de datos a través de
campos de búsqueda predefinidos o de filtros definidos por el usuario final en
tiempo de ejecución. Los resultados de la consulta se almacenan en un caché de
memoria, por lo tanto, se reduce la transferencia de datos entre el servidor de
aplicaciones y el servidor de base de datos. Los resultados de la consulta se
pueden almacenar de forma permanente como archivos o informes en formato PDF, o
en formatos editables tales como CSV, TSV, RTF, ODT, ODS, HTML, DOCX, PPTX y XLSX, que pueden descargarse para ser
procesados con la aplicación de oficina de su elección (OpenOffice, Microsoft
Office, etc.). Los resultados de la consulta se pueden guardar como un informe
detallado, resumido o gráfico, utilizando la vista predeterminada de la clase
de entidad de la página o vistas definidas por el usuario final. Además de
permitir seleccionar las propiedades de la entidad que se muestran en el
informe, las vistas definidas por el usuario final también permiten especificar
operadores de agregación, criterios de agrupación, criterios de ordenamiento,
etc. Por lo general, cada usuario mantiene su propia lista de filtros y vistas,
pero los roles definidos mediante el módulo de control de acceso también pueden
tener estas listas, de modo que puedan ser compartidos por todos los usuarios
asignados al rol.
Todas las páginas
generadas cumplen con las reglas de negocio especificadas en el modelo. La
verificación de las reglas se lleva a cabo lo antes posible, mediante
JavaScript incrustado en la página y/o un componente de Java en el servidor de
aplicaciones y/o una función de SQL en el servidor de base de datos.
Las referencias a
otras entidades en una página web se manejan ya sea a través de listas
desplegables o de páginas de búsqueda. Estas páginas de búsqueda suelen ser de
presentación tabular y de sólo lectura; en ellas el usuario puede realizar
consultas a través de campos de búsqueda predefinidos o de filtros definidos
por el usuario final.
Como se mencionó antes, las páginas se generan para cada clase de entidad, no para cada tabla de la base de datos. Esta diferencia es particularmente importante en la generación de páginas para entidades en una jerarquía de clases para la que ha especificado una estrategia de herencia distinta a TABLE_PER_CLASS.
Archivos e Informes
Con jee2 se pueden generar diferentes tipos
de archivos e informes para cada clase de entidad. Los archivos se generan en
formato CSV y TSV, y pueden ser
detallados o resumidos. Los informes se generan en formato PDF, RTF, ODT, ODS, HTML, DOCX, PPTX y XLSX, y pueden ser detallados, resumidos o gráficos. Tanto para los archivos
como para los informes, el resultado de la correspondiente consulta se puede
acotar mediante campos de búsqueda predefinidos.
Cada informe generado utiliza archivos de recursos (resource bundles) para implementar una interfaz de usuario multilingüe. Los informes se presentan a cada usuario en el idioma su elección, siempre que el archivo correspondiente esté disponible. Actualmente jee2 genera estos archivos en español e inglés. Traducir estos archivos es todo lo que necesita hacer para agregar idiomas adicionales a su aplicación.
Reglas de negocio e Interfaces de Servicio
Como parte de su
modelo, puede definir reglas de negocio de varias maneras. Existen métodos
sencillos para definir reglas simples, como campos opcionales o requeridos,
campos únicos, valores iniciales y por defecto, valores mínimos y máximos,
longitudes mínimas y máximas de una cadena de caracteres, patrones de cadenas
de caracteres, etc.
Adalid
proporciona también métodos más sofisticados para definir sus reglas de
negocio. Ellos son: expresiones, transiciones y disparadores.
Hay varias clases
de expresiones, por ejemplo: Comparación, Condicional, Escalar, Agregados de
datos y de filas. Y en cada una de estas clases de expresiones existe una
expresión para cada tipo de datos, por ejemplo: booleanos,
caracteres, datos numéricos y
temporales. Pero es con expresiones booleanas que se logra definir la mayor
parte de las reglas de negocio. Adalid ofrece un conjunto de operadores booleanos
en el que además de los operadores fundamentales AND, OR y NOT, se encuentran otros como NAND, NOR, XOR, XNOR e IMPLIES.
Las expresiones
booleanas se utilizan para definir las restricciones, segmentos y estados de
cada clase de entidad. Las restricciones son expresiones que deben ser
verdaderas en todas las instancias de la clase. Los segmentos son expresiones
que son verdaderas sólo en algunos casos. Y los estados son un tipo especial de
segmentos, el tipo que le permite definir transiciones, que son caminos válidos
entre dos estados. Al definir las operaciones de la clase de entidad pueden
especificar las transiciones realizadas por cada operación, y así se define una
máquina de estados. También puede definir directamente restricciones para las
operaciones de la entidad. Por último, es posible utilizar un disparador para
definir las operaciones que se deben realizar cuando una instancia de la
entidad llega a un estado específico.
En cuanto a los procesos de negocio, jee2 no genera el código de proceso en sí, sino sus interfaces de servicio, es decir todo lo necesario para comprobar los privilegios para acceder al código de negocio, ejecutarlo, grabar las correspondientes pistas de auditoría y devolver una respuesta. Los procesos de negocio se codifican ya sea como un método de un Enterprise Java Bean (EJB) o como una función de SQL. En el modelo se define la forma cómo se debe ejecutar el proceso de negocio. Podría ser sincrónica o asincrónica. La ejecución sincrónica se implementa a través de EJB, y la ejecución asíncrona a través de Java Message Service (JMS), que es la manera ortodoxa de implementar múltiples hilos (multi-threading) en la plataforma Java EE. Finalmente, tanto las operaciones de negocio como las de consulta y registro de cada entidad, pueden ser expuestas mediante servicios Web RESTful.
Control de Acceso, Gestión de Tareas y Auditoría
El módulo de
control de acceso de jee2 se basa en
el modelo de control de acceso por roles, donde se asignan funciones
(operaciones) y usuarios a roles, y los permisos de un usuario son la suma de
los permisos de los roles a los que se ha asignado el usuario. Con jee2 se extiende el modelo para
incorporar autorizaciones de lectura y/o escritura a nivel de campos y también
los conceptos de personalización, segmentación y supervisión. La
personalización consiste en definir un propietario para una clase de entidad y
luego otorgar permisos para ejecutar una función solo sobre las instancias de
la clase que pertenezcan al usuario. La segmentación consiste en definir
conjuntos de segmentos para una clase de entidad y luego otorgar permisos para
ejecutar una función solo sobre las instancias de la clase que pertenezcan al
conjunto seleccionado. La supervisión es una combinación de personalización y
segmentación, que permite otorgar permisos para ejecutar una función solo sobre
las instancias de la clase que pertenezcan al usuario o a alguno de sus
supervisados, directa o indirectamente. Además, al asignar una función a un rol
se puede especificar si la función es o no una tarea de los usuarios asignados
al rol; esto permite diferenciar quien puede y quien “puede y debe” ejecutar
una función. El módulo provee un mecanismo de autenticación, muy útil para ambientes de
desarrollo y pruebas. En el ambiente de producción se recomienda utilizar un
mecanismo de autenticación estándar, tal como LDAP. Las aplicaciones generadas para WildFly son fácilmente controladas con KeyCloak.
La gestión de tareas
consiste en llevar el control de las tareas
que cada usuario debe realizar. Mediante el uso de restricciones, estados y
disparadores, se pueden especificar las operaciones (funciones) que deben
ejecutarse cuando una instancia de una clase de entidad llega a un estado
determinado. El gestor de tareas evalúa el estado
de la instancia después de agregarla o actualizarla, y también después de
ejecutar una función de negocio sobre la instancia. Se evalúan todos los
estados finales de las transiciones definidas para la operación. Si la entidad
alcanzó un estado para el cual existe un disparador, entonces el gestor procede a notificar a los usuarios
que deben ejecutar la operación especificada en el disparador. El gestor envía una notificación a todos aquellos
usuarios que "pueden y deben" ejecutar la operación. Además, al
notificar se toma en cuenta si la autorización es personalizada y/o segmentada.
Cuando el usuario recibe una notificación puede asumir la responsabilidad de
ejecutar la tarea. Automáticamente el
gestor de tareas oculta la
notificación de los demás usuarios que "pueden y deben" ejecutar la tarea.
Si después de asumir una tarea, un usuario decide
que no puede ejecutarla, entonces puede abandonarla. Automáticamente el gestor
de tareas vuelve a mostrar la notificación a
todos los usuarios que "pueden y deben" ejecutar la tarea.
Además, si cuenta con la autorización correspondiente, un usuario podrá asignar
o quitar la responsabilidad de ejecutar una tarea
a otro usuario; y cancelar la ejecución de una tarea
cuando no sea posible o no sea necesario realizarla. Las notificaciones también
se envían después de un período de tiempo específico cuando una tarea no se ha
asignado y/o finalizado. Dichas notificaciones se escalarán a través de la
cadena de supervisores, si así se define. Finalmente, el gestor de tareas
también actualiza automáticamente la condición de la tarea
a "ejecutada" cuando se ejecuta exitosamente la correspondiente
operación.
Por último, pero no menos importante, el módulo de Auditoría mantiene un registro detallado de la ejecución de todas las funciones, procesos e informes de la aplicación y de todos los archivos cargados (uploaded) al servidor.