3-Tier com front-end Swing: por onde começar e quais tecnologias

Pessoal,

Imaginem a seguinte situação: Sua empresa precisa desenvolver uma aplicação em Java, utilizando um banco de dados Oracle 10g e deseja utilizar swing no front-end. De nenhuma forma o client Swing conectará diretamente ao banco de dados. Ao invés disso, haverá uma camada intermediária para centralizar as regras de negócio e acesso aos dados.
Esta mesma camada poderá futuramente ser aproveitada em um cliente Web com Servlets e JSPs.
Quais tecnologias poderiam ser utilizadas na camada de negócios?
É possível desenvolver um front-end Swing que receba e envie dados à camada negócios, como uma típica interface de aplicativos de banco de dados (com tabelas de registros, master/detail, edição, consulta)?
Sei que a questão pode parecer evasiva demais, mais gostaria de saber quais tecnologias Java fornece para este tipo de solução, para então estudá-las mais detalhadamente.
Se alguém conhece Delphi e já ouviu falar em MIDAS, é exatamente este tipo de solução que procuro no Java.

Desde já agradeço!

Olá DMurr,
Nesses links vc. vai achar uma ampla discussão sobre o assunto.:
http://www.guj.com.br/posts/list/49174.java
http://www.guj.com.br/posts/list/44037.java
http://www.guj.com.br/posts/list/14068.java
http://fragmental.com.br/wiki/index.php?title=MVC_e_Camadas
http://www.guj.com.br/posts/list/47548.java

A respeito da tecnologia “MIDAS/DataSnap” encontrada no Delphi plataforma java possui vantagens muito superiores.

SDS
William Silva

Tecnologias:
EJB , WebServices ( Se quiser falar com outra linguagem , ou até com Java Mesmo ) , RMI.

Ai fica com voce a responsabilidade de projetar bem o sistema
pra que as regras de Servico / Negocio seja reaproveitadas.

Boa Sorte! :thumbup:

Uma questão que ainda não tenho muito clara, indepente da tecnologia utilizada (EJB, Web Services) é em relação a troca de dados.
Suponho a seguinte situação: no front-end o usuário informa alguns dados para consulta de clientes. Consigo imaginar a forma de resposta de 2 maneiras.

  1. O servidor efetua a consulta, com o ResultSet cria os objetos (no caso o bean Cliente) insere-os em uma Collection, serializa tudo e manda para o cliente que então deserializa e trabalha em cima dos objetos.

  2. O servidor efetuar a consulta, e transforma o resultado para XML (por exemplo), e enviar para o cliente.

Qual a melhor forma de se trabalhar? Considerando que é possível que uma consulta retorne um grande número de linhas.

Valeu!

Eu vejo assim…

(Client) GUI -> Controller -> (Servidor) EJB/WebServices/RMI -> Servico -> Banco.

Ah e uma aplicação 3 camadas nao resolve,
multicamadas ai siiimmm… :slight_smile:

Ou to viajando nao entendi a pergunta… :roll:

Olá gui,

[quote] Ou to viajando nao entendi a pergunta… [/quote] Vc. ta muito acelerado diminui o ritmo…, assim vai assutar o rapaz… :lol:

gui,

Talvez você não tenha entendido, ou eu tenha me expressado mal. A minha dúvida é em relação a forma como os dados são enviados pela camada de negócios e recebidas pelo cliente (no caso de uma consulta).
Quando desenvolver o EJB (se for este o caso), e implementar um método para consulta de clientes, por exemplo, qual a melhor forma de retornar estas informações? O método retorna uma collection? Poderia quem sabe retornar um XML, para então no front-end ler este XML e mostrar os dados de forma apropriada?

XML é padrão quando vc desenvolve Web Services ou SOA. Porém, dependendo da quantidade de chamadas à camada de aplicação, vc terá problemas de performance para serializar /deserializar XMLs. Escolha a solução que melhor atende seus requisitos …

[quote=DMurr]gui,

Quando desenvolver o EJB (se for este o caso), e implementar um método para consulta de clientes, por exemplo, qual a melhor forma de retornar estas informações? O método retorna uma collection? Poderia quem sabe retornar um XML, para então no front-end ler este XML e mostrar os dados de forma apropriada?

[/quote]

Se for usar EJB, é melhor devolver a Collection de clientes mesmo. Se vc for usar um WebService, também (na verdade, no final das contas vai virar um xml, mas a sua aplicação não precisa saber disso - vai ser um processo transparente).
No último caso, você pode criar o seu próprio protocolo que trabalhe sobre o protocolo HTTP, e retorne os dados separados por vírgula por exemplo, mas aí já vai dar muito mais trabalho.

Para Rede Interna em que eu tenho acesso a Máquina Servidor eu uso RMI.

Para Internet prefiro XML com comunicação via HTTP, mas ai atenção especial a segurança.

É muito treta usar XML com https ?
Outra coisa é interessante transportar objetos via HTTP ao invés de RMI ?

Estamos ainda em fase de definição. A princípio utilizaremos Web Services. Quais as principais vantagens/desvantagens entre EJB e Web Services?
Conheço muitos desenvolvedore que tem um certo receio de EJB.

EJB2:

Pense em dor.
Na verdade dói EntityBeans…
A certas funcoes de SQL que o EJB-QL nao faz.
Se eu nao to enganado “Group By” é uma delas.

Session Beans usando apenas um Bean como SessionFacade fica tranquilo.

WebServices:

Quando for usar por favor utilize os padroes e pense em reusabilidade.

Acho que é isso! Boa sorte! :thumbup:

gui,

Tenho percebido em vários fóruns esta mesma avaliação sobre Entiy Beans. Se várias pessoas concordam com isso, muito provável que seja complicado mesmo.
Em relação aos Session Beans, os mesmos apenas funcionariam como facades certo? Se for isso, o que estaria “por baixo” dos Session Beans? Seria recomdável fazer “na mão” mesmo os acesso aos dados, utilizando ResultSets, Statements, etc?

Obrigado pela ajuda!
:thumbup:

[quote=DMurr]gui,

Em relação aos Session Beans, os mesmos apenas funcionariam como facades certo? Se for isso, o que estaria “por baixo” dos Session Beans?
[/quote]

As regras de negocio ? :roll:
SessionFacade retorna as classes que tem as regras de negocio
No meu ver ficaria assim: SessionFacade -> BO -> DAO

Sim , mas nada te impede de usar Hibernate. :smiley:

Quer o numero da agencia e da conta agora? :lol:
Boa sorte! :thumbup: