modularização, osgi, serviços, vraptor, jetty, etc

Tenho a seguinte situação, sistema desenvolvido por alguns anos, está estável, mas complexo de fazer manutenções, a empresa deseja expandir, incluir vários funcionalidades extras, automatizar, etc

Atualmente são certa de 5 aplicativos cada um num war separado, não tem SSO, mas os sistema são relativamente isolados, mas isto tende a mudar devido a uma restruturação interna, onde uma parte dos funcionários terá acesso aos vários sistemas.

Analisando o que já foi desenvolvido, temos inúmeras partes duplicadas entre os aplicativos o que gera um problema na manutenção. E dentro de cada um destes aplicativos há diversos serviços os quais são desenvolvidos em ritmos diferentes.

A ideia modularizar e cada um dos serviços ter uma maior separação e independencia, eliminando partes duplicadas. Fomos atrás de soluções para modularização e chegamos em OSGi e começamos a estudar sobre.

As dúvidas são: quais as outras soluções de modularização que existe e podem ser usadas, vale a pena explorar o OSGi, já vimos que a curva mais alta de aprendizado, porém temos a vantagem de que o sistema atual está estável o que nos dá a possibilidade de investir numa solução melhor e mais robusta para abarcar o plano de crescimento.

Algumas das aplicações estão em maquinas separadas, estamos usando jetty+maven+vraptor e usamos apenas css+jquery no frontend, pq na época foi simples para implementar, vale a pena mudar ?

Hoje também temos alguns problemas em relação a parte visual, como são várias aplicações qq mudança de css tem de ser replicada em vários lugares, uma solução simples seria usar um cdn, isto resolve o css, mas as diversas páginas jsp em muitos casos tb são duplicadas (um determinado jsp é usado em vários locais, mas como são várias aplicações qq mudança tem de ser feita em vários locais tb, o que as vezes atrapalha bastante), isto pode ser melhorado de alguma forma ?

Qq sugestão seria bem vinda, o sistema é interno apenas, então o numero de acessos não é um problema, temos liberdade para escolher tecnologias dentro do universo java e estamos aproveitando o tempo para discutir, explorar ideias e rascunhar as diretrizes que irão delimitar o desenvolvimento.

Pelo que entendi, o real problema é a duplicação de código e o paralelismo no desenvolvimento. Isso o OSGi não resolve (porque não é o foco dele), pois você pode ter uma porrada de bundles com duplicação de código, por exemplo.

O OSGi é uma solução muito bacana, mas pode ser complicado para equipes que não tenham experiência e, pelo menos até onde eu observei no mercado, não é fácil encontrar profissionais especializados. Logo, se vocês não tem pelo menos um par de pessoas com uma boa experiência nisso, pode ser arriscado usar OSGi.

Eu tentaria continuar com o VRaptor e não considerar o OSGi a princípio. O problema da duplicidade pode ocorrer em qualquer tecnologia ou framework, pois ele é algo que vem com a maturidade da equipe. Se optarem por usar OSGi, creio que seria muito interessante aproveitarem o middleware JBoss, já que o AS 7 já conta com suporte a bundles OSGi. Uma opção bacana seria adotar uma arquitetura orientada a serviços (podendo até aproveitar melhor o protocolo HTTP e usar uma solução baseada em REST - que é bem tranquila de usar com o VRaptor).

É até meio complicado dar um norte melhor porque esse tipo de decisão envolve mais do que somente a tecnologia em si (eu, por exemplo, prefiro tentar manter algo que a equipe já domine). Os requisitos não-funcionais também podem ser decisivos na adoção de uma ou outra tecnologia (lembrando que a arquitetura do sistema deverá resolver esses requisitos e não os requisitos estarem de acordo com a arquitetura).

Outra coisa: não subestime o número de acessos, já vi soluções onde isso não foi considerado e o resultado foi um tanto quanto trágico. Como há a tendência de crescimento da solução, ela pode ficar mais pesada e precisará de mais recursos computacionais, mesmo que o número de acessos se mantenha.