6 Apéndices



6.1 Arquitectura y Tecnologías de Compiere



6.1.1 Arquitectura


Compiere es una solución 100% Java, originalmente basada en tecnología Oracle para bases de datos, pero actualmente alcanzó la independencia de bases de datos.






Figura 2: Arquitectura de Compiere


6.1.1.1 Cliente

El componente cliente de la aplicación está totalmente escrito en Java y diseñado para utilizar la capacidad de los PCs actuales. El cliente en Java provee una interfaz de usuario amigable. Se comunica con el servidor de aplicaciones vía RMI (Remote Message Invocation). El cliente accede a los servidores vía Internet o Intranet, y requiere un ancho de banda de 128kbps.

Como alternativa, existe acceso Web a la aplicación a modo de "cliente fino" en caso de que los recursos del puesto de trabajo no sean apropiados. Esta parte está implementada con Servlets Java (especificación 2.4) y JSP (Java Server Pages 1.3) hosteadas en Tomcat como Servlet Server1 (se accede al servidor de aplicaciones mediante HTTPS).



6.1.1.2 Servidor de aplicaciones

El servidor de aplicaciones está basado en JBOSS. Puede instalarse en un servidor independiente o con el servidor de base de datos; JMX (Java Management Extensions) se usan para administrar el servidor. Se comunica vía JDBC (Java Database Conectivity, tipo 2 si la base es local o tipo 4 si la base es remota) con la Base de Datos.

En resumen, Compiere usa Apache como servidor Web, Tomcat como servidor de Servlets, y JBOSS como contenedor de EJB (Enterprise Java Beans).

Se puede administrar el servidor de aplicaciones vía una interfaz web y consultar el estado tanto local como remotamente, y agregar extensiones y otras aplicaciones J2EE.



6.1.1.3 Servidor de base de datos

El servidor de base de datos hostea los datos y la lógica de la aplicación. Se accede a través de JDBC (Java Database Communication). La funcionalidad a nivel de base de datos se implementa en PL/SQL.




Figura 2: Otra visión de la arquitectura de Compiere


6.1.1.4 Software incluido

Junto a Compiere viene incluido software indispensable para su funcionamiento.



6.1.2 Diccionario de Aplicaciones


Compiere usa un diccionario de datos central, un repositorio de información, que contiene meta-datos (información sobre los datos).

Sabe como acceder a los datos y como éstos se relacionan. Contiene definiciones de entidades (tipo, validación, etc.) y como se despliega esa información (etiqueta en pantallas y reportes, ayudas, posición relativas a otros campos) y reglas para mostrarse (por ejemplo reglas de acceso y seguridad).

Activo significa que se usa en tiempo de ejecución y que es dependiente del contexto. Las aplicaciones acceden a los datos a través del ADD. Por ejemplo, el ADD sabe que las ventas de mostrador no tienen fecha de vencimiento y no la muestra. Si en cambio, si se trata de otra venta la fecha de vencimiento se convierte en un dato obligatorio.

El usuario puede extender el diccionario de datos e incluir reglas específicas.



6.1.3 Interfaz de usuario inteligente

Tanto la interfaz de usuario del cliente Java como las pantallas HTML son generadas en tiempo de ejecución basadas en el diccionario de aplicaciones. El resultado es una interfaz de usuario consistente, que permite a los usuarios navegar rápidamente en áreas poco familiares de la aplicación.

Este método de generar una interfaz de usuario permite un desarrollo más rápido y el sistema resultado es mucho más estable comparado con aplicaciones de otro tipo.

La interfaz del cliente Java es mejor porque utiliza el poder del PC y es preferible en situaciones en que es importante la navegación rápida. En cambio la interfaz del cliente HTML permite usar la aplicación desde cualquier máquina con un navegador web.

El diccionario de datos (ADD) sabe sobre estructura y dependencias. Esto permite que el usuario con el acceso adecuado pueda acceder a la ventana donde pueda ingresar o actualizar datos. Por ejemplo, los usuarios pueden ingresar un nuevo cliente o actualizar la información de un cliente existente mientras está entrando una orden de venta sin abandonar la ventana original.

El diccionario de datos permite que el usuario pueda acceder rápidamente a la información, cuando el usuario necesita más información para tomar una decisión. Por ejemplo, si hay que ingresar información extra sobre una empresa cliente, se invoca la funcionalidad Info que despliega rápidamente información sobre la empresa: dirección, límite de crédito, etc. (o para productos, que despliega precios, margen y disponibilidad).

También permite el filtrado de resultados, a saber, el ingreso de criterios para reducir el número de registros en una ventana. Los resultados pueden ser ordenados.

El usuario también puede adecuar la disposición de los elementos de una pantalla para una situación o cliente específico.



6.1.4 Reportes inteligentes


Para la mayoría de las aplicaciones, hacer reportes es un agregado o una aplicación separada. En el caso de Compiere, se basa en el diccionario de datos, lo que permite acceder a cualquier nivel de granularidad de entidades siempre y cuando las definiciones de acceso y seguridad lo permitan.

Toda la salida de los reportes puede verse en pantalla antes de enviarla a una impresora o generar archivos en diferentes formatos (p.ej. HTML, XML, Excel, Word, PDF, etc.). También se puede acceder a todas las entidades referenciadas (p.ej. a información de un artículo que aparece en una línea de una factura, o a las ordenes de compra que están relacionadas con ese artículo).

Todas las reglas de seguridad son aplicadas automáticamente. Esto incluye control de acceso a tablas, columnas e incluso registros (p.ej. No incluir la cuenta 123). También se puede evitar hacer reportes sobre ciertos datos o evitar que se impriman o exporten.

Compiere tiene tres tipos de reportes: listados, formularios, reportes financieros, declaración de cuentas.

Los listados están disponibles en todas las ventanas y tienen parámetros de selección predefinidos que pueden modificarse. Los formularios (p.ej. Facturas, permite cambiar la disposición de los formatos de impresión); Compiere soporta formularios múltiples (p.ej. Diferentes tipos de formato de factura para una organización, para un socio de negocios específicos, o para un tipo de factura específico). Los reportes financieros incluyen modelos con varios parámetros de selección. Una declaración de cuentas para un período o fecha lista todas las transacciones de la cuenta o un segmento de esa cuenta.

Compiere diferencia la 'vista' del 'modelo'. El modelo (los datos) los provee Compiere y cada usuario puede elegir como desplegar, sumarizar y ordenar esos datos. Compiere permite definir el reporte tanto a nivel de sistema, cliente, organización y usuario, pudiéndose modificarse las siguientes características:

Está planeado poder incluir gráficos de barras, líneas y circulares.

El idioma del reporte está basado en el idioma del usuario, cada usuario puede, por lo tanto tener un diferente idioma. La estructura del reporte se copia de los niveles inferiores (sistema, cliente, organización).

Se puede generar fácilmente un reporte de granularidad más fina automáticamente a partir de un reporte basado en una entidad (drill-down). Por ejemplo un reporte que sumariza algún dato mensualmente se usa para generar un reporte de las transacciones originales.

También se puede crear un reporte basado en una entidad específica (drill-across). Por ejemplo, en un listado de productos, elijo un producto y después listo las líneas de los pedidos o de las facturas donde ese producto aparece.

Si estas funcionalidades no fueran suficientes (p.ej. No incluye gráficos) se pueden exportar los datos a una planilla donde embellecerlo. También se puede usar una herramienta para hacer reportes, p.ej. Crystal Reports, aunque difícilmente se tenga la flexibilidad, granularidad y seguridad que se tiene con las facilidades de Compiere.



6.1.5 Arquitectura sustentable


Las aplicaciones de negocios han cambiado con el tiempo. Ahora necesitan utilizar nueva tecnologías y siempre proveer más y mejores funcionalidades. Muy pocas aplicaciones están diseñadas para soportar cambios y adiciones. Por otro lado, si se espera que tengan una vida prolongada deben poder soportar esos cambios y adiciones.

Algunas de las características de Compiere que favorecen ese tipo de cambios son las siguientes:

Esto se debe a que fue originalmente desarrollado en los 80 usando Smalltalk, uno de los primeros lenguajes orientados a objetos.



6.1.6 Tolerante a fallos


En general las aplicaciones están diseñadas para asumir que todo funciona bien y todos los datos son ingresados correctamente y son consistentes. En caso de fallo hay que buscar la causa e identificar los daños.

En contraste Compiere está diseñadas de modo de ser tolerante a fallos, cada transacción puede ser repetida y regenerada, la mayoría de los fallos son identificados por el sistema y el usuario puede intentar corregir el problema y si la recuperación no es posible, el error es aislado del resto del sistema que continúa trabajando. Esto es posible debido al desacoplamiento de las transacciones.

Por ejemplo, la subestructura de la transacción 'venta en efectivo al mostrador de un producto' sería:

Este procedimiento es más confiable y rápido que el abordaje tradicional. Cuando se hace el commit, solamente dos subtransacciones son realizadas, la de material y la de facturación. Esto asegura que rápidamente el usuario pueda continuar ingresando las siguiente transacción. Las sub-transacciones restantes son planificadas (y opcionalmente corridas en lote) y son ejecutadas y corridas en paralelo. Esto permite utilizar reglas de balance de carga para asegurar tiempos de actualizaciones rápidos para el usuario.

Cada transacción realiza solamente una tarea, por lo que el impacto de un fallo es aislado y fácil de identificar. La comunicación entre transacciones individuales se hace mediante mensajes, permitiendo como se dijo, ejecutar las transacciones en lote de forma asincrónica.

El sistema controla regularmente si una transacción está completa. Si no está completa y es consistente debido a fallo del sistema, el administrador y el usuario son informados.

Por lo dicho arriba, es más fácil de implementar funcionalidades adicionales. A medida que las aplicaciones se vuelven más complejas, la probabilidad de errores crece. Compiere provee un marco de validación y en caso de que algo falle, aísla el problema asegurando alta disponibilidad de las funciones principales.



6.1.7 Seguridad

Compiere provee una infraestructura de seguridad que soporta seguridad por función (o sea basada en roles de usuarios que controla el acceso a ventanas, reportes y procesos) y por datos, basada en el cliente y la organización.

También es posible asegurar tablas, columnas y hasta registros individuales que impidan a los usuarios crear reportes o exportar ciertos datos.

Y las claves en los clientes se almacenan en forma encriptada.



6.1.8 Configuración

Además de poder modificar las interfaces de usuario inteligentes y los reportes, Compiere provee otros tipos de parámetros configurables.

Hay preferencias de login, como ser la organización, la fecha y la impresora. Y también hay preferencias por usuario, como tipos específicos de transacción (p.ej. Ventas).

La barra del menú permite que cualquier entrada del menú se guarde como un atajo.

La terminología puede modificarse, por ejemplo en vez de usar 'productos' se pude usar 'items' y en vez de organización, se puede usar p.ej. Sucursales.

La ayuda contextual puede modificarse y extenderse.

La configuración se pude hacer a diversos niveles, p.ej. A nivel del sistema, de una ventana (p.ej. las preferencias), a nivel de cliente, de organización, de usuario específico. Niveles más específicos sobrescriben los parámetros de niveles de configuración más generales.



6.1.9 Utilidad para importar datos

Esta funcionalidad es especialmente útil en el caso de migrar datos de otro sistema, así como convertir datos (p.ej. la lista de precios de un proveedor) al esquema de la empresa.

Compiere provee tablas de interfaz para productos, socios de negocios, ordenes, facturas, stock, etc. Se puede cargar la información directamente (mediante SQL) o vía el Cargador de Datos de Compiere, que extrae datos de archivos de texto plano (p.ej. separado por comas), o en XML.

El proceso consiste en asociar cada elemento a importar con una columna de una tabla, después se verifica el formato y se cargan los datos.

Compiere puede, por defecto, importar los siguientes datos:

La utilidad permite visualizar los datos a ser importados para poder corregirlos de ser necesario. El proceso de importar los datos verifica la correctitud de éstos antes de cargarlos en las tablas.





1JBOSS incluye Tomcat como servidor de servlets.

Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.