L'uso dell'iniezione di CDI e JPA insieme non è un accoppiamento, è solo ciò che hanno usato per l'iniezione delle dipendenze, AoP e persistenza (JPA).
JSF (JavaServer Faces) è una specifica Java per la creazione di interfacce utente basate su componenti per applicazioni Web.
jax-rs ti consente di supportare REST come servizio.
websocket è TCP vecchia scuola in entrambe le direzioni.
Hai identificato 3 responsabilità di cui si occupano questi ultimi 3: navigazione, notifica e chat. Non c'è nulla di intrinseco in nessuna delle tecnologie che hai menzionato che indica alcun accoppiamento, dipendenza o persino intercomunicazione.
L'unica ragione per integrare questi elementi a cui riesco a pensare è semplificare l'avvio e fornire un'interfaccia grafica integrata.
Se nessuno di questi è importante, certo puoi separarli. Purché non abbiate lasciato sorprese.
Il modo in cui attacco problemi come questo è iniziare con l'organizzazione del codice. Potrebbe già avere queste responsabilità separate suddivise in diversi progetti, pacchetti o classi. Se tutto è fitto insieme in un incubo interconnesso, hai un lavoro considerevole davanti a te.
Un altro fattore sono i test. Se sei fortunato, ci sono test che provano ciò che già funziona e cosa no. Puoi usare quelli per guardare ciò che si rompe mentre ti muovi.
Se il progetto è attualmente in fase di sviluppo (correzioni di bug e quant'altro) complicherà le cose se si avvia lo sviluppo parallelo, in particolare se non si esegue l'integrazione continua o si utilizza il controllo del codice sorgente. Molto meglio non frammentare.
Se lo sviluppo attuale è in corso, trova un modo per fermarlo se puoi, cambia, quindi avvia la nuova versione. Farlo funziona bene solo se sai quanto tempo impiegherà l'interruttore. Per questo, puoi esercitarti con il passaggio per fare un piano di transizione che ti dia un'idea di quanto tempo ci vorrà. Questo è necessario solo se le correzioni dei bug non possono aspettare. Se sei fortunato, puoi semplicemente avviare il passaggio e completarlo prima che sia necessario un ulteriore sviluppo.
Nel momento in cui ti ritrovi a riparare lo stesso bug in due punti sei frammentato. Esci da quella situazione il prima possibile. Non porta dove va bene.
Evita di frammentare e mantieni il passaggio dei test e dovresti essere in grado di separare facilmente queste responsabilità.