Pessoal, estou em uma equipe onde tenho que procurar desenvolver uma aplicação que rode tanto na web como no desktop.
Porque isso?
Bom, hoje nós temos duas aplicações, uma na web que é usada internamente e outra que é usada offline(desktop) nos clientes. As duas aplicações fazem a mesma coisa, porém são códigos diferentes. A aplicação web é feita usando J2EE e a desktop é feita em VB. O problema desse sistema é que as duas aplicações devem ser homologadas sempre que uma atualização é feita. Queremos saber se há algum jeito de utilizar a aplicação web no desktop, ou se pelo menos dá para reaproveitar todo ou grande parte do código fonte da web numa aplicação desktop. É claro que se formos usar o reaproveitamento do código, teremos que homologar as duas aplicações de qualquer jeito, porém com muito pouca probabilidade de que alguma funcionalidade seja diferente entre os dois ambientes.
A idéia também é fazer com que o cliente usando a aplicação desktop opte por querer trabalhar online ou offline, pois nem sempre o cliente pode estar conectado à internet e que também possa sincronizar as informações quando estiver conectado.
Vc pode criar toda uma aplicação baseada em web-services (REST por exemplo) com o core da aplicação, criar uma aplicação web para acessar esses web-services e um cliente Swing que faça o mesmo. No lugar de web-services pode ser qq coisa que dê pra invocar remotamente.
Vc pode ser mais radical e criar uma aplicação java hermafrodita que seja desktop mas, com um parametro especial vc inicie um servidor web embutido escrito em java também, que forneça uma interface web criada na unha. Ai vc tem uma aplicação só, mas acho q isso é um tanto complexo demais do que a primeira sugestão.
Só não vejo muito o funcionamento de uma aplicação que tenha uma base de dados funcionar off-line.
Vc vai jogar o banco de dados dentro da máquina cliente?
É pq alguns clientes não ficam conectados na internet direto e precisam acessar essas aplicações para depois nos mandar as informações.
Agora eu só fiquei na dúvida se caso eu fosse usar webservices, eu entendi que teria q colocar esse webservice na máquina cliente tb.
[quote=mlecar]É pq alguns clientes não ficam conectados na internet direto e precisam acessar essas aplicações para depois nos mandar as informações.
Agora eu só fiquei na dúvida se caso eu fosse usar webservices, eu entendi que teria q colocar esse webservice na máquina cliente tb.
Alguém tem uma dica?[/quote]
Se vc for utilizar WebServices teria que estar on-line com o servidor.
Entre utilizar WebServices e a sua aplicação que já funciona via Web, fique com sua aplicação.
WebServices em aplicações Desktops com o intuito de fazer a “camada intermediária” se justifica quando vc não tem uma aplicação Web ou quer utilizar uma aplicação com uma interface mais rica. Mas é conectado do mesmo jeito.
[quote=Quinger]Acho que a melhor situação mesmo é vc disponibilizar serviços “webservices” da aplicação web, para utilizar na desktop.
E referente a deixar off-line para depois sincronizar.
Vc vai ter que salvar local e criar uma forma de sincronização que através de um controle do tipo “data ultima alteração” vc realiza a operação.[/quote]
IMHO, com a Internet cada vez mais acessível em qualquer lugar eu não ficaria perdendo tempo com aplicações off-line. Operadoras de celular já têm aqueles modens USB com velocidade “razoável” para o Brasil. Isto requer uma programação mais detalhista, o usuário não tem acesso à informação real, dá trabalho pra integrar e manter. Cada caso é um caso, mas talvez seja a hora de rever esta situação.
[quote=mlecar]Pessoal, estou em uma equipe onde tenho que procurar desenvolver uma aplicação que rode tanto na web como no desktop.
(…) As duas aplicações fazem a mesma coisa, porém são códigos diferentes. A aplicação web é feita usando J2EE e a desktop é feita em VB. [/quote]
O que vc quer é uma aplicação desktop sometimes-connected. Esta aplicação não é em tempo real como uma aplicação cliente-servidor (always-connected)
Se a sua aplicação desktop tem que funcionar offline esqueça webservices porque eles precisam de conectividade para funcionar. O que vc deve fazer é uma aplicação em camadas de forma que a unica coisa diferente seja a apresentação e a persistencia. Em web vc cria uma apresentação html, em desktop swing. Sim, swing. Não se meta com SWT que vai se dar mal. Swing não é complexo, é poderoso.
A camada de persistencia tb deve ser diferente. No desktop tlv precise usar uma banco embutido como o JavaDB.
A logica de negocio/dominio deve ser independente e funcionar nos dois contexto. Dessa forma a homologação será simples pois a logica é exactamente a mesma ( são as mesmas classes).
Depois, no desktop, precisa ter um modulo de sincronismo que detecta a ligação ao servidor e se sincroniza conforme. O servidor deve ter uma logica compativel com isto. Não faça sincronismo de banco, faça uma logica de sincronismo via java. Vc pode usar XML e HTTP para transferir os dados, mas isso não tornas as coisas webservices.
[quote=marciosantri]
IMHO, com a Internet cada vez mais acessível em qualquer lugar eu não ficaria perdendo tempo com aplicações off-line. Operadoras de celular já têm aqueles modens USB com velocidade “razoável” para o Brasil. Isto requer uma programação mais detalhista, o usuário não tem acesso à informação real, dá trabalho pra integrar e manter. Cada caso é um caso, mas talvez seja a hora de rever esta situação.[/quote]
Concordo! mas teve casos aqui no lugar que trabalho, onde o operários iam fazer uma revizões periódicas em equipamentos que ficam metros abaixo, de toneladas de concretos, onde não tinha conexão! e a aplicação foi desenvolvida salvando dados locais em um coletor de dados, para mais tarde efetuar a sincronia com a base de dados original.
[quote=sergiotaborda]
O que vc quer é uma aplicação desktop sometimes-connected. Esta aplicação não é em tempo real como uma aplicação cliente-servidor (always-connected)
Se a sua aplicação desktop tem que funcionar offline esqueça webservices porque eles precisam de conectividade para funcionar. O que vc deve fazer é uma aplicação em camadas de forma que a unica coisa diferente seja a apresentação e a persistencia. Em web vc cria uma apresentação html, em desktop swing. Sim, swing. Não se meta com SWT que vai se dar mal. Swing não é complexo, é poderoso.
A camada de persistencia tb deve ser diferente. No desktop tlv precise usar uma banco embutido como o JavaDB.
A logica de negocio/dominio deve ser independente e funcionar nos dois contexto. Dessa forma a homologação será simples pois a logica é exactamente a mesma ( são as mesmas classes).
Depois, no desktop, precisa ter um modulo de sincronismo que detecta a ligação ao servidor e se sincroniza conforme. O servidor deve ter uma logica compativel com isto. Não faça sincronismo de banco, faça uma logica de sincronismo via java. Vc pode usar XML e HTTP para transferir os dados, mas isso não tornas as coisas webservices.[/quote]
Concordaria com vc se fosse desenvolver o sistema a partir do zero!
Mas o fato é que já existem as aplicações em diferentes plataformas, que devem ser integradas…