Qual a arquitetura mais adequada?

Galera, gostaria de ter a opinião de vocês para a seguinte situação:

Um cliente quer um sistema que possa ser acessado tanto localmente quanto remotamente. Ele gostaria de uma interface gráfica (Swing) para uso local, e a interface para consulta remota seria Web mesmo (Html, JSP, XML, …).
Porém, não é uma exigência que a interface do sistema local seja Swing, pode ser totalmente Web.

Diante disso pergunto a vocês:

Qual a melhor maneira de distribuir minha aplicação?

Faço tudo Web mesmo?
Caso queira fazer a parte Swing, o que seria mais adequado?

Em ambos os casos é adequado deixar o banco de dados em um servidor remoto (host de hospedagem), ou em uma máquina dedicada, no ambiente do cliente?

Até hoje só fiz aplicações cliente/servidor em Java, com Swing, mas sei programar em Servlets/JSP (e me viro com Struts).
O que me sugerem?

Obrigado aquem puder dar uma opinião.

[]'s

Depende. Se os requisitos funcionais te levam a concluir que vc precisa de uma interface rica, pq fazer Web? Não conheço seus requisitos para sugerir a melhor.

Tb depende. Se seus requisitos funcionais te levam a concluir que vc pode trabalhar com um servidor no cliente, pq não!? Se, pelo contrário, vc precisa que os dados estejam centralizados e sempre atualizados, a centralização é a melhor opção.

A melhor arquitetura é aquela que resolve os requisitos da maneira mais simples possível.

Na sua situação, se os requisitos permitirem, acho que Web seria melhor. Acho que seria bom ser ou tudo web ou tudo swing.

Concordo com o rodrigo, a não ser em pequenas execessões (por exemplo base swing e relatorio via web).
Mas quanto ao caso de usar um o outro, veja estas diretivas:

Se sua interface com o cliente precisa ser rica (navegações, filtros, buscas avançadas, etc) use desktop (swing), a parte visual web (Java Server Faces, Struts, etc) está muito forte, mas ainda não tem o poder do desktop.

Se sua aplicação usa muitas atualizações com o banco e de layout, use swing, pois a carga visual será no cliente, e portanto mais rápida (é lógico cada caso é um caso, se sua maquina cliente for ruim e seu servidor uma maravilha, está afirmação precisa ser repensada).

Tem muitas outras caracteriscas do sistema que pode interfir na sua decisão, mas acho que estas duas são as principais. Mas lembre-se tudo tem excessão.

Obrigado pelas opiniões galera!!

Estarei atento às novas que surgirem!

valeus

[quote=rodrigoy]A melhor arquitetura é aquela que resolve os requisitos da maneira mais simples possível.

Na sua situação, se os requisitos permitirem, acho que Web seria melhor. Acho que seria bom ser ou tudo web ou tudo swing.

[/quote]

Concordo, e voto que tudo seje Web. Você pode deixar uma parte da aplicação funcionando totalmente offline (ou seja, mesmo que o cara tá sem conexão, ele consegue trabalhar) e outra, totalmente online (isso dá o poder de acesso a qualquer computador em qualquer lugar), aí, elas se integram conforme a sua utilização. :roll:

Hoje existem muitas tecnologias e conceitos que nos permite construir aplicações web muito melhores e mais produtivas do que em swing, como exemplo, a utilização de AJAX através de frameworks poderosos (cabe a você escolher: dojo, gwt, dwr, etc.).

[]s.

Tb concordo com ser totalmente web.
Se o problema for interface rica, temos o Open Lazlo para aplicações RIA, o que possibilita maior interação.

[quote=agsilva]

Concordo, e voto que tudo seje Web. Você pode deixar uma parte da aplicação funcionando totalmente offline (ou seja, mesmo que o cara tá sem conexão, ele consegue trabalhar) e outra, totalmente online (isso dá o poder de acesso a qualquer computador em qualquer lugar), aí, elas se integram conforme a sua utilização. [/quote]

Como vc faz isso com HTML? Vc consegue trazer uma lista de produtos (por exemplo) para seu cliente e trabalhar com ela sem acesso remoto?

Olá

Para que fazer duas vezes a camada de apresentação?

Faça uma vez só e logo em Swing. Deixe na máquina local só a camada de apresentação. Faça o sistema tudo separadinho enviando mensagens para o servidor via HTTP/HTTPs através de URLConnection (use HttpClient). No servidor separe também a persistência.

Estando tudo bem separadinho, nada impede de você instalar TUDO em servidor na rede local ou até tudo na mesma máquina. Já fica com tudo pronto para no futuro colocar na Internet.

Swing não é tão difícil assim. Na minha opinião, Swing é tão difícil quanto (JSP+JSTL+EL+boas práticas+um framework MVC) e menos difícil do que JSF+(todo o conteúdo dos parêntesis anteriores)

[]s
Luca

Há um grande problema entre os profissionais de TI: conceber a solução antes de conhecer o problema. :roll:

Há um grande problema entre os profissionais de TI: conceber a solução antes de conhecer o problema. :roll: [/quote]

Tem outro, mais irritante ainda: escrever mal… (‘seje’!?) :roll:

[quote=agsilva]
Concordo, e voto que tudo seje Web. Você pode deixar uma parte da aplicação funcionando totalmente offline (ou seja, mesmo que o cara tá sem conexão, ele consegue trabalhar) e outra, totalmente online (isso dá o poder de acesso a qualquer computador em qualquer lugar), aí, elas se integram conforme a sua utilização[/quote]

E como seria isso? Por exemplo, se eu fizer assim, deixar uma parte funcionando offline e outra online, e deixar o banco remoto, num host de hospedagem, quando o cara não tiver conexão como fica o acesso ao banco a partir da aplicação offline?
E se eu deixar o banco numa máquina dedicada no cliente, com a aplicação web acessando o banco… se o cliente perder a conexão por um tempo, como ficaria o acesso ao banco a partir da aplicação remota (que está no host).
Seria o caso de ter as bases replicadas (uma local e uma remota) e fazer a sincronização de tempos em tempos?

Desculpem se estou falando besteira… :smiley:

… mas eu ainda chego lá hehehhee

Aí está… eu não sabia como fazer a aplicação Swing “conversar” com o servidor… vou dar uma pesquisada sobre HttpClient (vou recorrer ao amigo google, mas aceito sugestões)

O que não me impediria de já colocar somente a camada de apresentação nas máquinas locais logo de cara, e o restante em um host remoto, certo?

Eu também não acho Swing difícil não, na verdde trabalho mais com ele…

Galera… muito obrigado a quem está postando sugestões… todas estão sendo proveitosas, podem ter certeza.

Continuo na “escuta” do lado de cá
:smiley:

[]'s

olha q doido:

http://www.webstreamsystem.com/wss/demosFrame.htm

pena que não seja Free :roll:

Pq esse surto de ‘e se o usuario estiver offline?’

A internet so funciona quando se esta online, e nao vejo ninguem reclamando - pelo contrario, ficar online esta cada vez mais facil, e azar pros que ainda nao se tocaram disso :wink:

A menos que a sua base de usuarios alvo seja extremamente leiga, afastada dos grandes centros ou pobre (que talvez seja a pior base de usuarios pra arrumar), nao faz sentido.

hhehehehehe… acho que essa neura é devido ao fato de eu só ter feito aplicações (locais) cliente servidor, onde tudo funciona independentemente de conexão com internet.
Na verdade o que acontece é o seguinte: há uma empresa que já tem um sistema feito em Delphi/Paradox, e eles querem migrar o sistema para Java. Eu particularmente não conheço a infra-estrutura do cliente, mas sei que o mesmo quer acessar a aplicação pela web também (digamos que num final de semana ocioso, a partir de casa :P).
Como disse, não vejo problema em fazer tudo baseado em uma arquitetura web, mesmo que com uma camada de apresentação em Swing, ou até mesmo baseada em outras tecnologias… mas diante da sugestão do colega, de fazer uma aplicação que também operasse offline me deparei com essa dúvida…

[quote=cv]Pq esse surto de ‘e se o usuario estiver offline?’

A internet so funciona quando se esta online, e nao vejo ninguem reclamando - pelo contrario, ficar online esta cada vez mais facil, e azar pros que ainda nao se tocaram disso :wink:

A menos que a sua base de usuarios alvo seja extremamente leiga, afastada dos grandes centros ou pobre (que talvez seja a pior base de usuarios pra arrumar), nao faz sentido.[/quote]

Ainda existem muitas aplicações locais que necessitam ser locais ou por confiabilidade ou porque a infra-estrutura não pode atender uma conexão internet. Atualmente isso ocorre muito no comércio. Ex. Redes de Lojas distribuídas. Nesse cenário uma aplicação local que sincroniza com um servidor via linha discada a noite é a realidade. Pelo menos aqui no BR, conexão internet é de baixa confiabilidade e uma loja não pode parar de vender porque o link está fora do ar. Isso é uma necessidade comum e muito pouco explorada.

Há um grande problema entre os profissionais de TI: conceber a solução antes de conhecer o problema. :roll: [/quote]

Concordo que é irritante, mais não tanto quanto se achar o bom e postar mensagens só pra criticar os outros.

Isso é só pra incrementar o seu contador de mensagens?

Exato. E esta aplicação a que me refiro não poderia deixar o usuário na mão no caso de uma eventual queda de conexão.

Não é contexto da aplicação a que me refiro, mas imagine uma livraria, que tenha uma loja em uma cidade, e ainda um sistema de compra on-line.
Digamos que o gerenciamento todo da loja física (as compras feitas em balcão, controle de estoque etc…) esteja também no host remoto. Apesar da alta disponibilidade oferecida hoje em dia pelos hosts nada me dá a certeza de que a conexão não possa falhar lá na loja, por uma razão qualquer (tá… nada me garante que ninguém vai derrubar o gabinete também… ou que o HD vai paular… tudo isso também prejudicaria da mesma forma). Mas em se tratando dessa questão de disponibilidade da aplicação, o que seria mais viável?
De repente seria viável manter a aplicação e a base de dados localmente, e uma parte da aplicação no host remoto, acessando a base local? (pelo menos nesse caso, se a conexão viesse a passar por um problema, mesmo que momentâneo, o fluxo de trabalho local seria mantido, e somente a aplicação WEB ficaria mometaneamente indisponível).

E olha, eu não estou pedindo a solução definitiva galera… gostaria de saber a opinião de vocês mesmo… o que cada um vê como uma solução para o que foi apresentado (e até onde foi apresentado). Alguns colegas estão criticando o fato de alguns tentarem dar uma solução antes de conhecer o problema… mas repito… eu não quero a solução definitiva, como se o que fosse sugerido aqui fosse ser aplicado de cabo-a-rabo… são só pistas do que seria possível ou absurdo.

Luiz_Gustavo, ja vi algo parecido com o que você precisa em sistemas bancários, o problema e a solução foi a seguinte:
Um determinado banco precisa sinvronizar seus dados com a central em outro país, caso a conexão esteja on-line esse sincronismo é na hora, senão, ele é feito quando a conexão é re-estabelecida, pois os usuários não podem ficar sem o sistema.
Para isso, a solução foi uma aplicação local, utilizando JEE com banco e servidor de aplicação local, mais que utilizava mensagens para sincronizar os dados com a central. Se não me engano, eles utilizavam TIBCO para esse sincronismo, mais nada impede de usar o JMS.
Acho que no seu caso talvez seja interessante algo do tipo, com uma aplicação local(seja swing ou web, apesar de ser partidário de web) fazendo um sincronismo com uma central via JMS. Aí se a conexão com a central cair, o JMS se encarrega de enfileirar e enviar quando a conexão voltar.
Não sei se atende ao seu caso, mais é uma idéia.