Bom, tenha a incumbência de produzir o material que definirá a arquitetura e design das aplicações Java para atender ao conceito de SOA.
A empresa caminha para a compra de um caro software de ESB.
Minha preocupação inicial é definir como as aplicações Java deverão ser construídas para estarmos compliant com esta arquitetura.
O ponto aqui vai ser o desenvolvimento das aplicações.
Como empacotar?
Como distribuir?
Como implementar segurança?
Como usar contingência para os serviços?
Não vejo uma outra forma de implesmentar os serviços a não ser usando EJB.
Crio o core do meu sistema/serviço e através de Session Façades eu crio as interfaces dos serviços, propriamente ditos.
Através de Business Delegates eu possibilito meus clientes Java acessarem esses serviços, remotos ou não.
Um exemplo inicial que fiz aqui estava assim:
app1.jar (classes de negócio, VOs, DAOs)
app1-modulo1.jar (Façade expondo um serviço específico, implementado no jar acima)
Esses dois JARs eu disponibilizei no deploy do JBoss. As aplicações cliente que rodam na mesma instância podem usar o serviço diretamente, pois as classes estão carregadas no mesmo classloader geral (UCL).
Aplicações remotas devem adicionar um JAR com as classes e interfaces necessárias (delegate, VO, exceptions).
Funciona bem.
Minha dúvida é se esse é mesmo o melhor caminho num ambiente puro Java.
E como fica a questão de segurança? Qual sistema pode acessar que funcionalidades de um determinado serviço? Usar a implementação de segurança do próprio JBoss me proporcionaria o que eu pretendo? Posso delegar a configuração disso pra um BD em invés de um XML?
Depois, com interoperabilidade, o meu ESB pode cuidar de publicar o serviço ou eu mesmo posso disponibilizar meu serviço como um Web Service. Enfim!
Se alguem tem alguma experiência parecida e puder contribuir com as soluções adotadas, eu agradeço!