Como usar RMI em aplicações que usando MVC e HIBERNATE

Pessoal, estou fazendo uma aplicação e ela precisa ser cliente/servidor, pelo que vi usar RMI é uma boa alternativa, mas ai surge a duvida: como usar RMI em minha aplicação que usa mvc, hibernate, os tutorias que ACHEI é só sobre bate papo, mas nenhum exemplo mostra na pratica, com vemos no mundo real, a minha aplicação é para uma clinica e já estar toda pronta só faltando se comunicar com as estacoes de trabalho. Fico grato pela ajuda de vocês.

Ola, bom dia considere o uso de jee6 com ele vc pode usar ejb lite que resolve pra você a parte de comunicação remota o ejb utiliza rmi por baixo dos panos e ja ganha o CDI pra injeção de dependências, além do controle transacional fornecido pelo container.

Pra fazer a sua aplicação funcionar você vai acabar tendo de desenvolver alguma coisa pra receber as solicitações e processar as requisições ao banco, e regras não é ?
o ejb ja faz isso e muito, não reinvente a roda.

RMI não é uma boa pela simples razão que não passa na porta 80 :slight_smile: Isto significa que sua comunicação vai ser bloqueada a toda a hora o que é um saco.
Se sua aplicação usa MVC isso é irrelevante. Vc vai ter que criar uma outra aplicação web que comunique com o cliente. REST é uma boa para isso. Ou se quiser algo melhor vc pode usar o padrão Command e Serialização com seu frameworks MVC. Contudo, sempre vc vai se basear no protocolo HTTP de POST e GET, sobretudo post, porque o GET tem um tamanho limitado ( ao tamanho da url).

Dentro desta app web vc irá comunicar com a camada service que a sua outra camada web já utiliza. E a partir dai para dentro é tudo o mesmo e reaproveitável (pelo menos deveria), inclusive o hibernate.

Pelo que percebo, a aplicação é desktop.
Creio que utilizar EJBs ou alguma tecnologia que esteja montada em web é meio complicado.
O mais adequado seria utilizar sockets, no meu ponto de vista, pois, cada vez que precisasse persistir, buscar, alterar ou excluir, apenas faria a comunicação com o servidor socket e pronto.
Isso permitiria isolar a camada de persistência, com o hibernate (ou qualquer tecnologia), resolvendo teu problema quanto a isso e, ainda, permitindo o uso mais adequado de um esquema MVC.

Fale mais um pouco sobre seu projeto, por que na verdade pensou em RMI ?

A aplicação deve mesmo ser Desktop ?

Se deve ser Desktop então porque RMI, não seria mais fácil que cada terminal fizesse acesso ao banco de dados em um servidor?

A aplicação vai rodar somente em uma rede interna, dentro de uma empresa ou preciso de acesso remoto ao banco de dados ?

Sua aplicação atual terá que ser dividida em duas. Uma que será o servidor e outra que será o cliente.

Toda a parte visual ficará no cliente e a parte da base de dados (junto com o Hibernate) ficará no servidor.

Caso você tenha criado DAOs onde, internamente, usem o Hibernate, você terá que fazer esses DAOs acessarem métodos remotos (RMI) e nesses, que a implementação atual de persistência ficará.
Entretanto, essa mudança deverá ser feita com cautela pq você pode não ter se preocupado com múltiplos acessos.

Ao fazer essa alteração não se esqueça de rever o que fez e verificar possíveis problemas que possam ocorrer.

[quote=toncarvalho@gmail.com]Ola, bom dia considere o uso de jee6 com ele vc pode usar ejb lite que resolve pra você a parte de comunicação remota o ejb utiliza rmi por baixo dos panos e ja ganha o CDI pra injeção de dependências, além do controle transacional fornecido pelo container.

Pra fazer a sua aplicação funcionar você vai acabar tendo de desenvolver alguma coisa pra receber as solicitações e processar as requisições ao banco, e regras não é ?
o ejb ja faz isso e muito, não reinvente a roda. [/quote]
Eu achei o EJB lite um tanto limitado.
Eu preferiria, se seguir nessa linha, colocar logo um Application Server e implementar EJBs e publicá-los no AS.