Navegador ou Cliente Swing

Olá! Estou participando de um projeto no qual o cliente possui algumas poucas filiais de sua empresa e quer disponibilizar um sistema simples para controle de uma de suas atividades. Estou começando a desenvolver profissionalmente e por isso sugiram algumas dúvidas: A segurança das informações é essencial e por isso pensei se nesse caso seria melhor uma aplicação web rodando em um navegador ou um cliente swing acessando o banco pelo internet. Qual destes dois modelos iria expor menos a base de dados da empresa? E qual seria a indicação da galera mais experiente aqui do fórum levando-se em conta outros aspectos como desempenho, etc? Desde já agradeço a quem puder passar alguma dica.

att,
Fred

Sem uso de Ejb é mais seguro uma interface web, pois voce pode limitar o acesso ao bd, permitindo acesso apenas para o usuario vindo da maquina que mantem o web server (que em certos casos e ate a mesma do bd). No caso de clientes swing, uma solucao seria encapsular as operacoes em Ejbs e permitir acesso ao bd apenas para o usuario proveniente da maquina como o Ejb conteiner. Uma coisa que eu desaconselho e liberar acesso para usuarios provenientes de qualquer maquina, mesmo que os clientes utilizem ip dinamico.

Também depende do que o cliente vai fazer.

Se a interface gráfica precisar ser muito sofisticada, se o processamento dos dados obtidos da base de dados for intenso - por exemplo, você utilizará filtros, ordenamento, criará gráficos, relatórios em cima desses dados, tudo isso várias vezes ao dia - e se o cliente quiser “brincar” com o sistema off-line, é provável que seja melhor um cliente desktop.

Fiquei receoso em sugerir que a aplicação seja web baseada em navegador pois meu conhecimento nesse tipo de sistema é puramente teórico, sem uma experiência real. Diferentemente de aplicações Swing onde tenho mais prática. Começamos a firma agora (terminamos nosso 1º sistema desktop) e o restante da equipe (2 pessoas) está aprendendo Swing comigo. Tenho dúvidas se não seria precipitado obrigá-los a aprender JSP, Servlets e algum outro framework pra um projeto já com prazo definido (embora a princípio seja uma aplicação simples).

O problema que vejo em usar clientes desktop é que alguns clientes acessarão o sistema por banda larga e outros por acesso discado (sem IP fixo) e assim como o orlandocn eu não acho conveniente liberar o acesso ao BD pra qualquer IP.

É um sistema bem simples para uma prestadora de serviços. As interfaces gráficas tb não devem exigir nada sofisticado. Estou pensando seriamente em encarar esse desafio e sugerir que façamos um aplicação web. Obrigado pelas dicas pessoal, se alguém quiser dar mais alguma opinião será de grande ajuda.

Sistema web via conexão discada é complicado, ainda levando em consideração que vc já tem expriência em swing e tudo, por que não fazer como desktop então? quais as vantagens vc teria pra esse projeto sendo feito via web?
analise essas respostas… ai pode ver os prós e contras.

A princípio a idéia era fazer desktop mesmo (pelo fato de já termos mais experiência). Só me bateu essa dúvida porque pensei o seguinte: o sistema precisará ser acessado fora de uma rede local, então o banco terá que ser exposto na internet de qualquer forma. Em um sistema web pelo menos o acesso direto ao banco será feito apenas pelo servidor web como disse o orlandocn. Sem falar que rodando a aplicação no navegador se a máquina não for lá grande coisa o impacto negativo no desempenho será basicamente causado pela conexão (quando for discada), enquanto que uma aplicação Swing será afetada tanto pela máquina fraca quanto pela conexão.
Agora o problema é o tempo que vou levar pra me aprofundar em JSP e Servlets, aprender um framework MVC (conheço o Struts 1 mas não tava afim de usá-lo) e ainda por cima ensinar tudo isso pro resto do pessoal dentro do prazo!

Por isso estou inclinado a fazer esse sistema desktop e entrar nos servlets e jsps apenas no próximo projeto, quando teremos mais tempo disponível.

Nada impede de fazer um sistema desktop que converse com o servidor de aplicações, ao invés de ir direto ao banco de dados, por exemplo.

Como seria possível, neste contexto, utilizar o lazy loading do Hibernate sem trazer a lógica de sessions para o cliente?

Realmente, se você acessar a base de dados diretamente da aplicação Swing, você estará expondo mais sua base de dados.

Mas isso não significa que você não possa usar Swing para desenvolver sua aplicação com segurança. Ao invés de acessar diretamente a base de dados, acesse a base de dados indiretamente, através de um servlet. O cliente Swing faria uma requisição (por exemplo, uma lista de usuários) e o servidor acessa o banco de dados e devolve a resposta para o cliente Swing.

É como se fosse uma aplicação WEB mesmo, só que ao invés do browser, você tem a aplicação swing. Se você pensar bem o browser é uma aplicação desktop, e nem por isso acessa a base de dados diretamente.

Você teria que aprender servlet, mas não precisa de JSP, Struts, Hibernate, etc.

Eu já fiz uma aplicação desse tipo. Usei XStream para transformar os dados para XML antes de transportar do servidor para o cliente, e vice-versa.

Veja esse post que tem a ver com o que você está querendo:
http://www.guj.com.br/posts/list/40701.java

[quote=FredMP]Olá! Estou participando de um projeto no qual o cliente possui algumas poucas filiais de sua empresa e quer disponibilizar um sistema simples para controle de uma de suas atividades. Estou começando a desenvolver profissionalmente e por isso sugiram algumas dúvidas: A segurança das informações é essencial e por isso pensei se nesse caso seria melhor uma aplicação web rodando em um navegador ou um cliente swing acessando o banco pelo internet. Qual destes dois modelos iria expor menos a base de dados da empresa? E qual seria a indicação da galera mais experiente aqui do fórum levando-se em conta outros aspectos como desempenho, etc? Desde já agradeço a quem puder passar alguma dica.

att,
Fred
[/quote]

Fred,

Eu sinceramente optaria por utilizar uma aplicação Web, porém a minha situação é a inversa da sua, eu tenho conhecimento na parte Web e quase nenhuma na parte Desktop.

Porém, acho que a idéia do Java Player, é bem interessante para você.

Não sei, qual a sua disponibilizada de tempo (pelo visto, bem pouca) porque eu aconselharia você utilizar Hibernate (de preferência com Annotations) e se ver livre dos SQL’s. Sem dizer que caso seja necessário mudar de banco, você não terá problema algum.

Espero ter ajudado.