Ho una build di app con JSF2.x Spring IoC, transazioni e JPA su Hibernate. Questa è un'app call center completamente funzionale.
La sfida è che ora voglio aggiungere alcune funzionalità HR in cui il team delle risorse umane svolgerà varie attività. Il mio pensiero iniziale era di creare questo come un modulo per poterlo distribuire / annullare in modo indipendente dall'app madre. La comunicazione tra l'app principale e il modulo HR verrà implementata tramite REST / SOAP WS o qualsiasi altra tecnologia di comunicazione asincrona (JMS).
Con questo nella mia mente vedo già un problema: la replica del database. Perché il modulo HR funzionerà con oggetti profilo utente o utente dalla mia app principale. Quindi in questo scenario invierei questi oggetti al modulo HR e probabilmente lì avrei un database locale dove queste informazioni saranno duplicate e difficili da mantenere sincronizzate.
L'altro approccio sarebbe avere 2 app che condividono lo stesso database, e suppongo che ciò eliminerà la necessità di un livello di comunicazione (WS / JMS ...), perché entrambe le app leggono / scrivono nello stesso database . ma come previsto, questo ha anche alcuni inconvenienti:
- l'esecuzione di operazioni dal modulo HR a un'entità utente interromperà il livello di cache che viene utilizzato dall'app principale;
- condividendo lo stesso database si presenteranno alcuni scenari in cui alcune funzionalità HR devono essere forzate ad alterare lo schema DB e a ridistribuire l'app principale.
Come devo procedere per ottenere un alto livello di indipendenza tra l'app principale e vari moduli e senza replicare alcuni dati per ciascun modulo?