Tenho uma aplicação Desktop que tem q buscar dados, e gravar em um banco web. Tenho uma página web q interage com esse banco e preciso q uma aplicação desktop acesse esse banco, para gravar dados e ler… Não gostaria de colocar o acesso ao banco no programa desktop pq se descompilar o .class o usuario teria a senha e dados de login ao banco. Entao pensei em desenvolver algo para disparar funções em classes web e pegar resultados delas. Assim minha conexão ficaria somente nessas classes. Qual a melhor solução para isso? O que vcs sugerem?
O problema da senha é o menor deles. Integrar coisas via banco de dados é uma péssima esc0lha na maioria dos casos. Utilize um servidor com chamadas RPC como EJB ou webservices POX ou REST.
Eu recomendo que você use tecnologias no desktop que te permitam mudar essa integração de forma transparente (basicamente, use AOP em alguma forma). Para isso, você pode usar o Spring ou o genesis.
Eu já fui partidário de criar uma action que retorna XML ou ObjetoSerializadoEmBase64. Então o seu desktop faria uma requisição web e receberia um objeto Java (via xStream ou ObjectInputStream). A desvantagem é ficar construindo as requisições via java.net.URL, mas nada que uma boa abstração não resolva. Outra desvantagem seria duplicar actions que fazem a mesma coisa (para web e para desktop), mas aí vc pode criar um filtro que intercepta a mesma action e redireciona o Output para um forward (web) ou para um stream (desktop). São coisas para se analisar…
Mas agora que conheci o xFire, acho que de repente vale a pena “abstrair” isso na sua cabeça e deixar o xFire fazer esse trabalho sujo pra vc.