Quais as letrinhas?

Olá pessoal,

Estou definindo o ambiente/arquitetura de um projeto que deve ser bem estruturado para ser escalonável … bem, na verdade ele vai sair meio as pressas por isso não vai ser um exemplo mas acho que da pra chegar lá.

O problema é que estou perdido na sopa de letrinhas do Java e queria uma ajuda.

O projeto
Deve ter a interface com o usuario em varios modos (a principio Handhelds (Palm OS, Pocket PC/WinCE), depois celular e depois o que mais inventarem) … uma camda de conexao, uma camada de regras e outra é a aplicação que vou interfacear (já existente, um monstro conhecido como ARS) onde algumas regras serao aplicadas tb.

A camada de conexao vai gerenciar os usuarios entrando inclusive validando …

A camada de regras faz algumas validacoes usando a aplicação ARS e tb retorna alguns dados quando requisitado (extraido do ARS).

Penso logo existo
Estou pensando em ter na UI apenas um cliente (com validacoes básicas do conteudo dos campos) …
As camadas no servidor podem ser EJB?!? (duvida :!:slight_smile:

a comunicacao entre a UI e o servidor (sendo EJB) tem algo a ver com Webservice?

No cliente para algumas consistencias poderia usar RMI, certo?
O EJB ficaria apenas pra aplicar as regras e efetivar acoes no ARS …

Ah … EJB não é só com web, é? a rede será mesmo TCP/IP (os aparelhos vão conectar via modem ou um canal wireless) e posso ter um server web (pra manter o AS) mas param ai as semelhancas (ehehe ta tudo igual).

essa aplicacao tera dezenas de solicitacoes simultaneas, não quero ter que usar threads (pesado) ou sockets pq cada usuario eh totalmente independente do outro … com EJB nao preciso me preocupar com sincronizacao, preciso?

aaaa que bagunça …

comentários?

Smota, aqui vai uma sugestao, e algumas consideracoes:

Client-side:
Palms, celulares, etc: J2ME, MIDP 1.0
Web: Velocity, JSP, JSTL, whatever

Server-side:
J2EE 1.3, com EJB CMP 2.0 ou connectors falando com o ARS

Os clientes moveis, desenvolvidos em J2ME, sao midlets com inteligencia pra desenhar todas as telas e falar com o servidor. Alguma validacao basica pode ser feita client-side, mas as validacoes mais pesadas vao acabar tendo que ser server-side. Esses midlets falam com o webserver usando HTTP e um protocolo XML simples, ou usam WebServices, caso vc esteja mais inspirado. Os EJBs podem falar direto com o tal do ARS, ou se vc estiver se sentindo feliz, vc pode escrever (ou tentar comprar) um Connector - a versao atual da JCA, 1.0, trabalha de forma sincrona, entao talvez nao seja o caso… dependendo de como voce quiser trabalhar, JMS pode ser uma boa…

Bom, é isso ae, espero que ajude :slight_smile:

Ae Cv … valeu, acho que é isso mesmo.

Alias, seu comentário Server-side: J2EE 1.3, matou a pau porque só agora caiu a ficha que J2EE é pra server simplesmente e não apenas aplicações Web (eu associava J2EE ao JSP+Servlets)

eheheh, é isso neh? (se não for eu me mato, ops, nem tanto, paro tudo e vou estudar)

[]s

Definitivamente, HTTP (que é a entrada favorita pra aplicacoes J2EE) nao eh um protocolo só pra passar HTML :slight_smile:

Antigamente, HTTP era sinonimo de protocolo de transmissao de HTML e imagens… hoje em dia, é muito comum ver aplicacoes nada-a-ver (tipo o MSN messenger ou Windows Media Player) usando HTTP pra falar com os servidores.

Agora, com a moda dos WebServices, voce provavelmente consegue achar uma implementacao de WS pra J2ME razoavelmente leve e que nao te obrigue a inventar as definicoes XML pra comunicacao…

o cliente eh web ou nao eh web?
se nao eh web, voce pode fazer por RMI. ai por RMI, voce pode escolher o que quiser: fazer chamadas a um SessionFacade remoto, ou entao fazer essa mesma chamada, por webservices. o kit de WS do java ja cria stubs pra voce que entendem e enviam SOAP, traduzem, e fazem a chamada como se fosse RMI normal. Voce NEM enxerga um xml.

Gracas a Deus, pq o SOAP eh uma zona. :smiley:

Sugestão: dê outro nome à sua camada. Se a camada é de conexão, ela deveria se preocupar só com isso.

Ainda mais se vc pensa em usar RMI, a camada de conexão ou nem vai existir, ou vai ser um parâmetro de todos os métodos.

Eu fiz uma vez um esquema de autenticação de usuário com RMI que ficou simples, porém eficaz. Um objeto remoto era meramente uma porta de entrada, pra fazer login. O método de login poderia falhar com uma exceção própria (tipo MyAuthenticationFailureException) ou retornar um outro objeto remoto, inacessível pelo Registry, esse sim provendo os serviços que o usuário queria.

Tem um lance que pode te impedir de fazer isso, relacionado a coleta de lixo distribuida do RMI, que (infelizmente devo dizer) é fraquinha. Se bobear alguém conhece um jeito de vc fazer “release” do objeto quando o cara der logout.

[]s!!