Caros, qual a alternativa para os sistemas monolíticos? O que vcs acham de partitions + restful? Seria uma boa escolha mesmo sabendo que os módulos estariam no mesmo servidor fisicamente?
O topico promete hein…
mas como vc define o que seria uma boa escolha??
Joel, tai um bom artigo pra você escrever…
(e realmente não acho que esse assunto terá audiência aqui, se fosse repositórios com REST daria mais Ibope)
Utilizar REST para comunicação entre os módulos de um mesmo sistema que fica no mesmo servidor físico? Não conheço o seu projeto, mas não acho uma boa idéia.
Será que não da pra criar uma subcamada em cada módulo pra isolar as dependências entre um módulo e outro pra chamar “direto”? (Se a idéia é os módulos serem independentes e cada um ter o seu ciclo de vida)
De qualquer forma, eu acredito que o ideal seja criar uma abstração para não deixar cravado do sua lógica de neǵocio uma tecnologia de comunicação específica.
(PS: @yoshima compartilho o seu sentimento…)
Rubem, acho que a passagem de mensagens é um aspecto a ser considerado.
Não entendi muito bem o que você quis dizer… Alguma coisa em particular eu deveria ter considerado na minha sugestão?
[quote=Rubem Azenha]Utilizar REST para comunicação entre os módulos de um mesmo sistema que fica no mesmo servidor físico? Não conheço o seu projeto, mas não acho uma boa idéia.
Será que não da pra criar uma subcamada em cada módulo pra isolar as dependências entre um módulo e outro pra chamar “direto”? (Se a idéia é os módulos serem independentes e cada um ter o seu ciclo de vida)
De qualquer forma, eu acredito que o ideal seja criar uma abstração para não deixar cravado do sua lógica de neǵocio uma tecnologia de comunicação específica.
(PS: @yoshima compartilho o seu sentimento…)[/quote]
Criar uma abstração pra isolar os módulos funciona mas com alguns problemas - é assim q trabalho hoje - por exemplo, p algumas alterações em um módulo eu preciso re-compilar e empacotar tudo.
Um EJB de um módulo acessando outro EJB de outro módulo está “cravado” uma tecnologia de comunicação. A diferença é que com REST eu não tenho dependência com tecnologia. Estou apenas utilizando um protocolo de aplicação.
Por isso perguntei o que seria uma boa escolha pra vc. Mas sabendo que vc usa EJB remoto para comunicacao local, porque nao REST?
[quote=joellobo]
Um EJB de um módulo acessando outro EJB de outro módulo está “cravado” uma tecnologia de comunicação. A diferença é que com REST eu não tenho dependência com tecnologia. Estou apenas utilizando um protocolo de aplicação. [/quote]
Ambos o torna depende de alguma tecnologia de comunicacao. A diferenca que a web é baseada em padroe abertos. Porque ser independente de tecnologia é tao importante pra vc? Me parece um caso de “otimizacao prematura”.
[quote=joellobo]
Criar uma abstração pra isolar os módulos funciona mas com alguns problemas - é assim q trabalho hoje - por exemplo, p algumas alterações em um módulo eu preciso re-compilar e empacotar tudo.[/quote]
There ain’t no such thing as a free lunch
Mas recompilar e empacotar tudo é um custo tão grande assim?
Se você usa REST, você TEM dependência com a tecnologia
Não existe milagre, você ter que colocar em algum lugar do seu código algo que chame o outro módulo. Pode ser um HTTPClient, um lookup JNDI para um EJB ou usar algum framework como Restifulie. Você pode fazer isso direto no código que fica na tua camada de negócios ou criar uma abstração para isso.
[quote=Rubem Azenha][quote=joellobo]
Criar uma abstração pra isolar os módulos funciona mas com alguns problemas - é assim q trabalho hoje - por exemplo, p algumas alterações em um módulo eu preciso re-compilar e empacotar tudo.[/quote]
There ain’t no such thing as a free lunch
Mas recompilar e empacotar tudo é um custo tão grande assim?[/quote]
Eu tenho uma situação parecida, os gerentes tem alergia extrema a deixar qualquer sistema indisponível, o que afeta o atendimento de algumas centenas de milhares de pessoas, logística no estado inteiro, e outras empresas que se integram conosco.
Daí imagine o que é atualizar um subsistema que quase todos os sistemas dependem, que espere aquela janela semanal de deploys, ou reze.
Nesta realidade de querer indisponibilidade zero que concordo em ter sistemas integrados via rede, independente do método usado, mesmo com seus módulos estando num mesmo lugar fisicamente.
Agora entendi melhor o problema. Mas se você tem que empacotar e recompilar tudo, provavelmetne você esta com um problema de dependencia circular, não?
Se não você deveria ter que empacotar e recompilar apenas os módulos alterados e os modulos afetados, caso a alteração quebre algum contrato. Mas não tem muito segredo não… você vai ter que fazer isso independente do protocolo de comunicação entre os módulos. Se o contrato for quebrado, você vai ter que corrigir o problema nos módulos que antes seguiam o contrato.
Acho que modularização é uma das coisas mais complexas que podemos enfrentas no desenvolvimento de software, mas se optarmos por não modularizarmos, o problema pode ser ainda pior. Não acho uma boa idéia lidar com um módulo gigante e complexo. Prefiro lidar com o problema de dependencias entre modulos do que lidar com as complexidades de alterar um uniico modulo gigantesco.
[quote=joellobo]…
Criar uma abstração pra isolar os módulos funciona mas com alguns problemas - é assim q trabalho hoje - por exemplo, p algumas alterações em um módulo eu preciso re-compilar e empacotar tudo.
… [/quote]@joellobo,
Q tal “transportar” seus Módulos para ficarem cada um deles em um Projeto Java, empacotando-os em um .JAR, importando-os em um “Projetão maior”, um .WAR, p/ex.??! (separação física p/ facilitar atualizações/manutenções)
Ah, e logicamente, vc poderia definir “a comunicação” entre os Módulos através de ‘Camada Anti-corrupção’, como orientado p/ DDD, porem neste caso, seriam “stubs” de um Módulo para outro. O q acham??!