¿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

La generación de scripts de base de datos sigue siendo una tarea esencial. La capacidad y el rendimiento de los sistemas de información dependen en gran medida del diseño de base de datos y de cómo se implementa dicho diseño. Una buena parte de las plantillas de jee2 son plantillas de scripts para la definición de objetos de base de datos. Junto con las plantillas para generar scripts de objetos básicos, tales como tablas, índices, secuencias, restricciones, etc., hay plantillas avanzadas para generar disparadores, funciones de reglas de negocio, funciones de servicio de procesos de negocio, vistas actualizables de múltiples tablas, funciones de control de acceso, gestión de tareas, auditoría, generación de meta data y de datos de prueba, etc. Los scripts se generan para Oracle y para PostgreSQL.

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.

Entradas populares de este blog

¿Qué es Adalid?