Quais são os prós e os contras de usar RMI ou JMS entre as camadas web e empresarial?

StackOverflow https://stackoverflow.com/questions/71144

  •  09-06-2019
  •  | 
  •  

Pergunta

Para um aplicativo típico de cliente Web para Servlet/WS para Business Tier (Spring ou EJB), quais são as vantagens de abordagens como RPC remoto ou sistema de mensagens para camada Web (Servlet) para camada Business remota, além do aspectos básicos de sincronização/assíncrona?

Foi útil?

Solução

Por cliente web você quer dizer navegador web?Nesse caso, olhar para coisas como DWR ou JAX-RS são minhas recomendações.RMI ou JMS só funcionam realmente quando ambos os lados são código Java.

Com qualquer tecnologia remota, o maior problema ao usá-la tende a ser o quão intrusiva a tecnologia se torna em seus objetos de negócios.por exemplo.usando interface/exceções RMI em qualquer lugar ou usando APIs JMS dentro do seu código de negócios.

Minha recomendação é usar POJOs em qualquer lugar em Java e depois usar uma tecnologia como Primavera Remota para colocar em camadas seu middleware, seja RMI ou JMS ou qualquer outro - mas dissocie totalmente o código do middleware da sua lógica de negócios para que você possa alternar entre tecnologias a qualquer momento (e manter seu código de lógica de negócios mais simples e focado no seu problema de negócios).

Por exemplo veja o Implementação camelo do Spring Remoting que então permite que você use qualquer um desses transportes e protocolos como RMI, JMS ou até mesmo HTTP simples, email, arquivos ou XMPP - alterne entre eles trivialmente usando uma simples alteração de string URI.

Outras dicas

Usamos RMI via Spring e achamos muito fácil de usar, bastante robusto e rápido.Embora nossos requisitos fossem um link bastante responsivo e não houvesse necessidade real de adicionar um componente de mensagens.

SUN RMI quebrou para nós.

As configurações e a coleta de lixo para um aplicativo de execução muito longa com mensagens contínuas.Estamos corrigindo para que funcione continuamente.Os aplicativos JMS que executamos não apresentam erros de falta de memória ou problemas de GC que o RMI causa.Qualquer coisa que precise chamar System.gc() periodicamente e não funcione com coleta incremental para recuperar recursos está codificada incorretamente.

A confiabilidade do RMI melhora com o JDK 6 e as configurações de propriedade corretas, mas JHC é uma estrutura complicada.O RMI seria amplamente melhorado usando canais no nio e corrigindo os usos do sun nio em system.gc().

A resposta correta é comunicação (mecanismo) separada do código de domínio.O RPC está fortemente acoplado e o protocolo e o aplicativo podem interferir um no outro.JMS separa o protocolo da aplicação, um paradigma muito melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top