Chamadas Remotas - App Desktop

7 respostas
G

Pessoal, preciso desenvolver uma aplicação Desktop com Swing e eu gostaria de centralizar os procedimentos num servidor e fazer as máquinas clientes enviarem suas requisições para este servidor tratar e lhes devolter tudo mastigado devolta.

Pesquisei muito no fórum e no google durante alguns dias mas ainda não cheguei a uma conclusão do que seria melhor de usar neste situação.

Vi recomendações para Web Services, HttpClient/URLConnection, EJB (Vi muita gente jogando pedras tb), RMI, bla bla bla, etc…

Pois bem, em nenhum caso encontrei material suficiente para entender como cada uma funciona (O que mais encontrei é Web Services).

Montei um Web Service com Apache Axis (achei bastante fácil) e consumi este WS numa aplicação bem simples usando Swing.

Pois bem, meus problemas estariam resolvidos exceto pelo fato das seguintes questões :

1 ) Web Service é recomendado para este tipo de situação ? ( Cliente / Servidor em Java ).
2 ) Como eu poderia tratar da segurança usando Web Service ? ( Gostaria de evitar que qqer um tenha acesso aos meus métodos, fora da minha aplicação, sei que isso pode ser paranóia, mas já que é pra fazer, melhor fazer bem feito ).
3 ) E o ponto em que fiquei mais em dúvida, Web Service tornaria minha aplicação lenta caso ela fosse bastante solicitada em vários terminais simultâneos por exemplo ?

A princípio minha aplicação não será usada na WEB, é uma aplicação interna da empresa, portanto a vantagem do Web Service não teria serventia neste caso.

Agradeço muito a quem puder me ajudar.

7 Respostas

T
  1. Pode usar sem problemas. Ainda mais que é uma aplicação interna, onde não deve haver problemas de latência de rede.
  2. Você poderia criar um web service login e uma chave de sessão (que deve ser enviada nas próximas requisições), e se não for muito difícil, usar https (SSL) em vez de http. Não é preciso usar aquela parafernália de WS-Security (WS-Encryption, WS-Signature) que no seu caso não deve ser necessário.
  3. Depende de como você criou seu web service.
    Como você sabe, o melhor web service é aquele que recebe todos os dados de entrada de uma vez e retorna todos os resultados de uma vez (exceto no caso de paginação, é claro).
    Se seu web service é estúpido (ou seja, é só uma casca muito fina sobre uma classe Java, tendo métodos separados para getters e setters) então você vai estar em maus bocados.
G

Obrigado thingol.

Você indicaria eu dar uma olhada em mais alguma alternativa ?

Tipo, para este tipo de situação, normalmente usa-se… ???

E outra dúvida, é possível passar por parametro ou retornar algum objeto atravez de um web service ?

Digo isso pois fiquei em duvida no seguinte:
Tenho um WS feito em Java que retorna um tipo em java, como em php eu interpretaria aquele retorno ?

Obrigado.

T

Você pode passar e retornar objetos complexos através de web services. Mas a passagem de objetos “por referência” em vez de "por valor’ pode dar problemas.

Aliás é normalmente assim que se faz:
criar um objeto grandão contendo todos os dados necessários como um parâmetro, chamar o web service, e este
criar outro objeto contendo todos os valores de retorno. Essas classes são específicas para passar parâmetros ou receber parâmetros desse web service.

Só tomar o seguinte cuidado: você não pode, normalmente, passar um ArrayList<Cliente> para um Web Service ou retornar um ArrayList<Cliente>. Isso dá problemas de interoperabilidade (exemplo: Java x .NET x PHP, ou então mesmo Java x Java).
Você tem de converter seu ArrayList<Cliente> para um Cliente[] e vice/versa. Outras estruturas de dados, como HashMap ou TreeMap, também dão problemas de interoperabilidade; melhor usar os velhos e antiquados arrays.

Normalmente se você só trabalhar com String, double e int é suficiente; tipos mais complicados podem dar problemas com outras linguagens.

G

Ok, thingol, obrigado pelas respostas.

Sendo chato na pergunta novamente. Se você fosse implementar uma aplicação deste tipo o que usaria se não fosse usar Web Service ?

Estou procurando alternativas mais “profissionais”.

T

Acho que eu ainda iria usar Web Service (não precisa ser SOAP, pode ser REST, que costuma ser mais rápido e eficiente, e mais fácil de implementar), principalmente porque o servidor não precisa ter um cliente Java. Ou seja, EJB com acesso remoto e RMI estariam fora de questão, e sockets puros normalmente dão mais problemas* que soluções - principalmente se o sistema não vai ser mantido por você, e sim por outra pessoa.

  • Em particular eu não recomendaria usar ObjectInput/OutputStream como um encapsulamento simples sobre sockets. Eu já vi gente ser demitida por causa disso; não cometa o mesmo erro.
O

Se for usar Spring, pode usar remoting:
http://static.springframework.org/spring/docs/2.0.x/reference/remoting.html

Mas tudo que o thingol falou, está mapeado em algum dos modos do remoting.

G

Thingol, obrigado mais uma vez.

Vou adotar WS como estratégia.

Eu só gostaria de saber se vc tem alguma recomendação sobre algum outro framework para geração de WS que não fosse o Axis.

Gostei do Axis, mas eu gostaria de ter mais liberdade caso seja necessário mudar de servidor, e como vi no axis, se eu fizer isso terei que recompilar minhas classes clientes de acesso ao WS para apontarem para o novo endereço do servidor.

Eu gostaria de algo mais prático. Por exemplo um arquivo de config onde eu seto o servidor.

É possível ou estou viajando ?

Obrigado!

Criado 8 de outubro de 2007
Ultima resposta 9 de out. de 2007
Respostas 7
Participantes 3