En 2014 una de las grandes noticias de ExpressoV3 es la disponibilidad de un sistema de plugins que permite añadir características en diversas partes de la aplicación. El objetivo de esta conferencia es mostrar a los desarrolladores lo que puede ser acoplado y donde esto se hace esto en la aplicación. También hacemos una aclaración y una orientación importante acerca de uso de la arquitectura de software para la reconciliación de los intereses comunes y privados, pensamiento que guió la arquitectura del sistema de plugins. Hechamos con la perspectiva de trabajo y posibilidades de más puntos de plugins.
1. Líder en soluciones de IT para el gobierno de Brasil
Orador: Flávio Gomes da Silva Lisboa
Coordenación Estratégica de Acciones Governamentales (CEAGO)
Sistema de
Plugins del
ExpressoV3
¡No espere, haga!
2. Sus preguntas pueden ser dirigidas a los siguientes
canales de comunicación :
e-mail cisl@serpro.gov.br
diáspora https://diasporabr.com.br/u/cislgovbr
twitter @CISLGovBR
facebook https://www.facebook.com/cislgovbr.
Puede ver otras conferencias técnicas en nuestro canal
youtube https://www.youtube.com/user/CISLGov.
Preguntas
3. Empresa pública del Ministério de
Finanzas de Brasil.
Serpro trabaja com la prestación de
servicios en tecnologias de la
información para el sector público. La
compañía desarrolla soluciones que,
además de contribuir a la
modernización y eficiencia de la
administración pública, busca
desarrollar la relación entre los
ciudadanos y el gobierno brasileño.
SERPRO
5. Numeros de SERPRO
● 3 Data Centers: São Paulo, Rio de
Janeiro y Brasília
● 2 Servicios - Mainframe (29.095 MIPS)
● Más de 2.500 servidores de plataforma
baja (Risc, Cisc e Epic) entre máquinas
físicas y virtuales
● 6 automated tape libraries con una
capacidad de 2 petabytes de
almacenamiento
● 1.353 petabytes de almacenamiento
(discos) con 945TB en São Paulo,
51TB en Rio de Janeiro e 357TB en
Brasília
● 12 millones de transacciones en-línea
procesadas por año
● Múltiple Base de Datos (Adabas, DB2,
Oracle, SQL Server, MySQL,
PostgreSQL, Lotus Notes, BRSearch,
MS Access Sybase, INFORMIX,
ZopePlone)
● 64.407 Microcomputadoras
Heinz Doofenshmirtz, by Disney
6. Líneas de negocio de SERPRO
Desarollo de Sistemas y Aplicaciones
Rede de Comunicación
Administración de correo electrónico
9. ExpressoV3 es un software de comunicación y
colaboración íntegralmente desarollado en software
libre.
Su objetivo principal es proporcionar una herramienta
económicamente viable que permite a las empresas,
dentro y fuera de Brasil tener dominio y autosuficiencia
en su mantenimiento.
ExpressoV3
10. ExpressoV3 se basa en la versión Kristina de Tine 2.0,
un groupware y CRM libre creado en Alemania.
ExpressoV3
11. ExpressoV3 es un software mantenido com
una amplia experiencia en la construcción y
mantenimiento de las herramientas de
trabajo en grupo.
Comunidad
http://comunidadeexpresso.serpro.gov.br
12. Las comunidades ExpressoV3 y Tine 2.0 colaboram
entre si, compartiendo un código base común a través
de presentaciones mutuas de cambios.
Colaboración y Integración
ExpressoV3 Tine 2.0
Admin
Addressbook
Calendar
Tasks
Tinebase
Setup
Expressomail
Messenger
Webconference
Courses
Crm
Felamimail
Filemanager
HumanResources
Inventory
Phone
Projects
RequestTracker
Sales
Timetracker
Voipmanager
13. En un proyecto de software mantenido en comunidad,
siempre hay un conflicto entre los intereses generales y
los intereses privados.
Los intereses generales son funciones de software que
todo el mundo va a usar y para que la discusión se limita
a la forma en que se llevarán a cabo.
Los intereses privados son características utilizadas
por sólo un grupo o un miembro de la comunidad que
son importantes para ellos, pero no son relevantes para
los otros.
Conflicto de intereses
14. Un software que debe satisfacer una variedad de
necesidades de los usuarios debe centrarse en los
intereses generales de estas personas.
Software en comunidad
Software en comunidad = Intereses generales
15. “El destino de uno es compartido por todos”
El Amo de los Calabozos
Software en comunidad
Dungeons & Dragons, 24th episode. Copyright CBS.
16. La unidad de un proyecto de software en comunidad
depende del mantenimiento de los intereses de sus
miembros.
Unidad de software
Intereses
privados
Intereses
privados
Intereses
privados
Intereses
privados
Intereses
generales
17. Si los intereses particulares no se tratan, ellos dan lugar
a softwares derivados, los forks.
Sectarismo
Fork
Fork
Fork
Fork
Software
original
18. Para permitir que intereses privados se cumplen sin
dejar que el software existe como una implementación
del interés general, es necesario que cada miembro del
grupo es capaz de añadir lo que quiere o cambiar el
comportamiento de una funcionalidad de acuerdo com
su específica necesidad.
Así, software en comunidad debe ser extensible y
configurable.
Mantenimiento de unidad
20. Por herencia do Tine 2.0, ExpressoV3 nació extensible
por módulos.
Extensibilidad
Módulo Módulo
Módulo
Módulo
Tine 2.0
21. Tine 2.0 tiene una arquitectura modular, que permite
añadir funcionalidades a través de módulos que
implementan el patrón de diseño MVC extendido.
Modularidad
Tine 2.0
Admin Addressbook Calendar Courses
Addressbook
Phone
Felamimail Filemanager
Projects RequestTracker
Human
Resources
Inventory
Sales
Crm
Phone
Setup
Tasks Timetracker RequestTracker Voipmanager New Module
22. Todos los módulos siguen el mismo patrón de aplicación,
lo que incluye apoyo a traducción y ajuste de
preferencias.
Patrón de módulos
23. Utilizando esta arquitectura, ExpressoV3 lanzó módulos
Expressomail, Messenger y Webconference.
Módulos de ExpressoV3
ExpressoV3
Admin Addressbook Calendar
Messenger Setup
Expressomail
Tasks Webconference
24. Qué módulos hacen
Módulos agregan funcionalidades.
Módulos pueden consumir servicios de otros módulos.
Qué módulos no hacen
Módulos no cambian funcionalidades existentes en otros
módulos.
Límites de los módulos
25. Ampliación de la diversidad de intereses
Comunidad
ExpressoV3 se está
expandiendo!
28. Qué plugins hacen
Plugins agregan funcionalidades.
Plugins pueden consumir servicios de cualquier módulo.
Plugins pueden cambiar funcionalidades existentes en
otros módulos.
Plugins son inyecciones de dependencias.
¡No extienda, haz un plugin!
29. ExpressoV3 apoya firma digital
La implementación de firma digital creada por Serpro se
hizo de acuerdo a las especificaciones de ICP-Brasil
(Infraestructura de Clave Pública de Brasil).
Esta implementación es de interés para las
organizaciones en Brasil, pero no encajan en otros
países.
Estudio de caso: la firma digital
30. Se implementó una rutina para control de firma en
módulo Tinebase.
Estudio de caso: la firma digital
Tinebase
Frontend_Json
public function verifyCertificate($_data)
31. Esta rutina es llamada por una clase que hereda de la
capa de frontend.
Estudio de caso: la firma digital
Tinebase
Frontend_Json
public function verifyCertificate($_data)
Módulo
Classe herdeira
32. La llamada al método se realiza mediante solicitud del
cliente según el protocolo JSON-RPC 2.0.
Estudio de caso: la firma digital
Cliente ExpressoV3
Tinebase.verifyCertificate
33. Esta rutina estaba utilizando clases que también se
agregaron a módulo Tinebase.
Estudio de caso: la firma digital
Tinebase
Auth_ModSsql_Certificate_Factory
Auth_ModSsl_Certificate_ICPBrasil
Auth_ModSsl_Certificate_X509
Auth_ModSsql_Exception_Openssl_NotLoaded
Auth_ModSsl_UsernameCallback_Abstract
Auth_ModSsl_UsernameCallback_Interface
Model_DigitalCertificateValidation Auth_ModSsl_UsernameCallback_Serpro
34. El problema es que el módulo Tinebase es el módulo de
que dependen todos los demás.
Tinebase: la dependencia
ExpressoV3
Admin Addressbook Calendar
Messenger Setup
Expressomail
Tasks Webconference
Tinebase
35. Tinebase es también el extensióne de las dependencias
de ExpressoV3.
Tinebase: la extensión
ExpressoV3
Tinebase
Syncroton
36. Tinebase debe ser genérico para todos los módulos, ya
que contiene los intereses generales de los módulos.
Tinebase: el interés general
Módulo Módulo
Módulo
Módulo
Tinebase
37. Tinebase
Por lo tanto debemos evitar el cambio de Tinebase, a
menos que el cambio es genérico.
Tinebase: el intocable
38. La verificación de firma digital según la norma ICP-Brasil
es un interés general en Brasil. Así ella no puede
permanecer dentro de un módulo específico, pero en el
módulo que proporciona las características esenciales.
Sin embargo, teniendo en cuenta la comunidad
internacional, esta implementación es específica.
Tinebase: el conflicto
39. La implementación de la verificación de firmas digitales
según norma ICP-Brasil debe ser desacoplada del
módulo Tinebase.
Tinebase: resultado
Pepper Potts & Tony Stark. Copyright Marvel.
40. ¿Pero, cómo mantener la respuesta a la solicitud?
Tinebase: el inevitable
Cliente ExpressoV3
Tinebase.verifyCertificate
41. Yo dependo de una funcionalidad, pero no puedo
conectá-la a mi software, porque no todo el mundo va a
hacer uso de ella porque no es genérica.
Tengo que hacer una llamada a un método que no
puede ser definido estáticamente.
En otras palabras, tengo que hacer una llamada a algo
que sólo debe estar disponible cuando lo necesito.
Problema arquitectónico
43. La respuesta fue la creación de una arquitectura de
plugin que permite la inyección de dependencias.
Tinebase: la solución
44. Una clase madre hace tres capas pluggable.
Tinebase_Pluggable
Frontend_Abstract Controller_Abstract Backend_Abstract
Pluggable_Abstract
45. En en script, init_plugins.php, se centra las inyecciones
de dependencias.
La inyección de dependencias
46. Creando un plugin
Para crear un plugin usted debe:
Crear una clase en una biblioteca que sigue el estándar
de Zend Framework 1, dentro de la carpeta library.
Registrar el plugin en la capa que debe recibir la
funcionalidad, añadiendo una línea como la siguiente:
Tinebase_Frontend_Abstract::attachPlugin('nombreDeMétodo', 'NomeDeClase');
Tinebase_Controller_Abstract::attachPlugin('nombreDeMétodo', 'NomeDeClase');
Tinebase_Backend_Abstract::attachPlugin('nombreDeMétodo', 'NomeDeClase');
47. Plugin de capa
Un plugin es una clase cuyo método se invoca
indirectamente por un objecto de una de las capas de
frontend, controller y backend.
Usted puede crear y añadir tantos plugins según sea
necesario utilizando el método addPlugin() de la clase
abstracta de la capa.
Todos sus herederos tienen acceso a métodos de plugins.
48. Así, la implementación de firma digital ha sido movida a
una biblioteca.
Dependencias se encuentran en la carpeta library
Serpro
Auth_ModSsql_Certificate_Factory
Auth_ModSsl_Certificate_ICPBrasil
Auth_ModSsl_Certificate_X509
Auth_ModSsql_Exception_Openssl_NotLoaded
Auth_ModSsl_UsernameCallback_Abstract
Auth_ModSsl_UsernameCallback_Interface
Model_DigitalCertificateValidation Auth_ModSsl_UsernameCallback_Cpf
49. Plugins son clases que forman
parte de las bibliotecas que son
dependencias de la aplicación.
Si desea agregar una funcionalidad
específica a una capa, crea su
propia biblioteca y dentro de ella
crea sus plugins.
Dependencias se encuentran en la carpeta library
50. Es posible inyectar otras dependencias en archivo,
init_plugins.php, distintas de las que afectan las capas.
Usted puede cambiar la regla de validación de la
dirección IP y estrategia de almacenamiento de
AccessLog.
Esto es para hacer ExpressoV3 configurable.
¡Y no sólo eso!
51. En las próximas versiones de ExpressoV3, estarán
disponibles plugins para:
●Inicio de la aplicación
●Sistema de usuarios y grupos
●Filtros de consultas
¡Más plugins están llegando!
52. Si necesita algún tipo de personalización, no espere que
sus necesidades se conviertan en intereses genéricos.
¡ESCRIBA SU PLUGIN Y USE!
¡Escriba tuyo!
53. ¿Tienes ideas para más puntos de plugins?
Visite el Foro del ExpressoV3 y exponga sus propuestas.
http://comunidadeexpresso.serpro.gov.br