[quote=leopoldof]Estou estudando tecnologias para desenvolver um sistema (baseado em swing) em camadas (MVC) distribuído. (ordens he he he )
Pesquisei aqui no fórum e achei tópicos interessantes sobre esse assunto. Mas algumas dúvidas surgiram sobre o que se usar hoje em dia. Segundo a pesquisa, foi discutido e chegado a uma conclusão de separar a Visualisação (No Cliente) do Controle e Modelo (No servidor)…
[/quote]
Já começa mal… .oO(será que é tão dificil de entender que MVC não é separação em camadas ?! )
MVC não é separação em camadas. A visualização o controle o modelo estão todos no cliente. o servidor tem seu proprio modelo, controle e visualização.
com Swing distribuído vc pode usar JNLP (Java Web Start) para distribuir o cliente
o cliente pode comunicar com o servidor via HTTP. HTTP é bom porque atravesssa firewalls, mas vc pode usar outro protolo
se o sistema funcionar em uma rede interna.
O sistema tem vários andares : visualização (swing = muitos listeners, implementação de componentes proprios ,etc… )
Sistema de controle, aqui é uma classe normal que é invocada pelo swing (provavelmente em outroa thread).
Essa classe invocará serviços remotos do servidor.
O servidor acata os pedidos remotos , processa e responde. EJB é uma boa para isto, mas um simples Servlet com controle transacional tb funciona ( tlv não tão escalável, mas … )
Básciamente vc cria um objeto, serializa, manda para o outro lado, desserializa e processa. Se serializa em RMI, HTTP ou JMS não importa muito.
Se vc precisar que o servidor chame funções no cliente, use JMS.
Vc pode usar webservices tb, mas ai se o servidor precisa chamar o cliente ele precisa rodar um servidor HTTP para receber as chamadas. Neste caso pode usar o Jetty. O protocolo de webservice é bom que vc crie o seu. Use REST em vez de SOAP se for por este caminho.
Outra coisa que vc vai precisar é um cache no cliente. Sem ele é impossivel ter algo que funcione.
uma boa divisão de camada ajuda. O uso de serviços e repositorios com domainstores locais e sincronizados (JGroups, JXTA) tb ajuda muito. Aqui vc pode usar algo na linha do Prevayler ou do Space4J mas como “memoria cache” . Outra opção é usar banco embutidos apenas em memoria como o HSQL.
Hibernate só funciona no servidor. no cliente vc não vai poder usar, a menos que o servidor tenha comuniação directa com o banco, o que é uma porcaria de arquitetura …
É obvio que web é mais facil. So o fato de não ter cache de dados já poupa um monte de trabalho.
Se vc preciar integragir com hardware no cliente é melhor swing, mas depende muito do projeto real…