Arquitetura de Protótipo Prevalente

Pessoal,estou fazendo um Protótipo Swing que persistirá as informações comforme forem
salvas num sistema prevalente.Esse componente cadastrará esses itens:


Aluno(long matricula,String nome,String situacao,String idCurso,String senha)
Professor(long matricula,String nome,String situacao,String idCurso,String senha)
Curso(String idCurso,String descricao,String[] disciplinas)
Disciplina(String idDisciplina,String DesDisciplina,String preRequisito)
Turma(String idTurma,Professor matricula,int[] diaSemana,int[] horario,
long[] matriculasAluno,String sala,String campus)

Depois,irei enviar esses dados via web por meio de um controlador(servlet),para deixá-los
acessíveis aos seus respectivos usuários.

Informação persistível na forma que será enviada via Web:
Ao Aluno:
Conteúdos de Aluno,Curso,Disciplina e Turma(menos campo matriculasAluno)
Ao Professor:
Conteúdos de Professor,Curso,Disciplina e Turma

O problema é:Qual a melhor forma de carregar esses dados via controlador?Pensei em usar um
DTO(tb conhecido como VO-essas nomenclaturas…argh!)para carregarem tudo direto,mas não sei se seria a melhor abordagem.
NOTA:Os dados prevalentes não serão instanciados comforme o usuário se loga e solicita eles,
eles já deverão estar todos em memória quando o usuário logar no sistema.Por isso penso num meio de manter a carga dos dados “coesa”,e uma forma de distribuí-la para seus respectivos
usuários.(Deveria usar índices,para distribuí-los comforme a matrícula de cada um?)

Ops…esqueci de falar…haverá uma única informação persistível via Web,que será a
matrícula!Ainda não pensei ao certo,mas acho q o ideal seria fazer algo como um array de
booleans associado a uma String para identificação das respectivas matérias(no caso poderia ser a teh um HashMap…)…aí seria fácil de persistir,pois qdo o usuário selecionasse as
CheckBox e enviasse,seria enviado para o sistema apenas um Id(para identificação) e um array
do tipo{false,true,true,false,true,false},onde true seria as matérias matriculadas entre as que foram disponibilizadas para ele…(Com controle pelos índices do array para sua identificação)
Isso é uma boa idéia?

Qto a enviar os dados de uma vez só,ainda não estou conciso de como fazer…(a melhor estratégia)
Como serão carregados uma vez que o sistema entre em execução,o lance do meu “MegaDTO” é válido?(Lembrem-se que não será enviado comforme a solicitação do user e sim para a memória via servlet controlador!)

Bom, não sei se entendi muito bem, mas vamos ver.

A sua dúvida é sobre como o controlador (servlet) passa os dados necessários para o cliente (swing)?

Se você usar HTTP, minha primeira sugestão é usar o que o protocolo se propõe [Hyper Text Transfer Protocol]. Transforma seus objetos em XML e passa pro cliente, assim você ganha até independência de cliente [considerando que algum dos professores sequelados da escracho vai perguntar porque voce nao usa delphi…].

O importante é você estar com seu domínio bem conciso e usar um pouco de lazy-loading consciente. Não fique passando o que não vai usar frequentemente, ams o carinha não pdoe esperar muito pra saber a nota dele [mesmo proque se demorar muito é bem capaz de algum coordenador louco -leia-se: Badim :slight_smile: - mudar no meio do caminho].

De repente até mesmo SOAP, ams prefira algo mais simples, só passe para um protocolo destes se perceber que vai reinventar a roda.

Ganha mais um ponto no projeto e põe como webservice :slight_smile:

[]s

ps.: voltei pro buteco, ops, facudlade, tô lá hj em todos os turnos da noite :stuck_out_tongue:

Valeu pelo reply Phillip!
O cliente,na verdade eh a nossa “Secretaria”,digamos assim,por isso perguntei se seria válido a utilização da carga completa dos dados no construtor da servlet de modo “bruta”,isto é,instancia tudo de uma vez só qdo o sistema entrar em operação…(rápido,mas porco,mas lembre-se que é só um protótipo…)
A intervenção do usuário é quase nula(a não ser na hora de matrícula em disciplinas no sistema…)
O resto é navegação pura…
Ao professor tb eh dado o poder de lançar as notas,mas ele lançará para a secretaria e esta para o SIAP…

Boa! :smiley:

Voltou para a Creysson University?(repare na sigla)
Eu soh to lah segundas e sextas…(só faço 3 matérias!)

Nao entendi onde ta a duvida aqui…

Request:
Swing -> XStream -> Servlet -> Prevayler -> Objetos de Negocio

Response:
Objetos de Negocio -> Prevayler -> Servlet -> XStream -> Swing

Nao fica muito mais simples que isso :wink:

Bom,valeu pelo esqueminha…mas na verdade o problema tem mais a ver com acoplamento e quantidade de dados…Vou tentar ser mais claro:
No nosso cliente swing,aquela loira gostosona da secretaria,cadastrará Turma,Aluno,Disciplina,Professor,…(tudo separadamente!),ou seja,serão gerados diferentes snapshots para os diferentes tipos de Entidades(Não gosto muito desse termo,mas não veio algo melhor na cabeça)…
Para exibição na Web nosso controlador pegará essa massa de dados,levará para a Ram e Pronto.Mas aí é q está o problema.Como juntar os Diferentes componentes prevalentes num todo só(sem virar uma bagunça…).(Por isso a pergunta do Uso do TO).Aluno algum terá acesso ao componente swing.Isso é interno.Talvez seja mais prático fazer um mecanismo para anotar as matrículas em separado(pois eh a única coisa q poderá ser persistida por um Aluno),e o mesmo se aplicaria as notas enviadas pelos Professores.Fui claro, Cv?

Nem um pouco, mas pelo que eu consegui pegar da sua ideia, eu so tenho uma recomendacao: servidor central, e UM prevalent system soh. Nao reparta prevalent systems a nao ser que vc tenha uma razao muito, mas muito boa mesmo pra isso, ou a nao ser que voce goste de ficar descobrindo pq a RAM tah indo pro saco e os objetos estao se duplicando. :wink:

Bom cv,eu tava tentando me iludir,mas precisava ouvir isso para chegar a conclusão(do q eu jah sabia…e vc tinha me avisado antes!):A modelagem foi pro saco… :?
huahauhhau…
Vou desfazer umas paradas aqui e repensar essa estrutura…shit!

Cv,na sua citação anterior vc falou em usar o XSTREAM…nunca o utilizei,mas jah tô testando aqui…
Minha dúvida é:Qdo vc citou SWING->XSTREAM vc quis dizer para salvar todos os dados em XML?E depois eu “faço prevalecer” esse XML?Utilizo XMLSnapshotManager?(Manteria o coesão do XStream???)…Explique melhor a sua idéia Cv… :?:

Por aih. Joga os objetos de negocio via rede usando XStream sobre HTTP (POSTs e GETs em URLs amigaveis ;)) e usa XMLSnapshotManager (use sempre a ultima versao CVS do Prevayler, estamos fazendo alguns ajustes nessa area ;))

Peraí Cv,não é mais negócio após salvar os XMLs,prevalecer e enviar para a servlet uma instância do SistemaPrevalecido ao invés de fazer isso de dentro dessa servlet(Foi o q entendi do q vc disse…),para salvar dados(Quando um aluno faz uma matrícula ou um professor lança uma nota-que ocorre relativamente poucas vezes no sistema),aí eu jah pensei em usar XStream para enviar esses objetos para não ficar “disparando” Snapshots a rodo.Talvez para salvar dados,seja melhor fazê-los em forma de requerimento,criando tipo um TEMP para não deixar essa mudança ser efetuada DIRETO no SistemaPrevalente em si,e sim de tempos em tempos(ou quando a secretaria receber esse dado e liberá-lo para o Snapshot).Como vc faria CV?

Da uma lida nesse artigo, acho que explica melhor o que eu quero dizer: http://www.xfront.com/REST-Web-Services.html

A ideia eh usar HTTP + XML (gerado pelo XStream) como forma de RPC com uma maquina central, que contem o sistema prevalente.

E, porra ironlynx, KEEP IT SIMPLE! 70% das suas ultimas mensagens foram saliva :stuck_out_tongue:

Bom,q foram “saliva” não vou negar,mas convenhamos,um sistema Prevalente possui uma arquitetura diferente de um BD(Acoplamento,escrever as regras de negócio,dimensionamento de hardware…)e eu jah estou na hora do “writing”,ou seja jah tô escrevendo a parte de inserçao e de dados e,posteriormente,a parte WEB.Um MAL passo pode me fazer escrever tudo de novo…se eu puder evitar…
Valeu pelo link…Vou ler! :wink:

Hmmm…
A idéia de usar o XStream parra serializar os objetos e mandar para um servlet via HTTP é boa, mas é um pouco complicada. Por que você não usa RMI para isso?
Tipo:
Swing <-> RMI <-> Lógica do seu sistema <-> Prevayler
Servlet <-> RMI <-> Lógica de seu sistema <-> Prevayler

Daniel,eu gostaria de poder codar de diferentes formas e testar todas as possíveis,mas obviamente é inviável…a minha pergunta eh:
Qual a mais rápida no ponto de vista de execução?Vou te dar uma situação hipotética:
Existem 1000 alunos fazendo matrícula concorrentemente(digamos q hard e servidor aguentam bem…),eu pensei em fazer algo do tipo(usando XStream):

Matricula mat=new Matricula&#40;&quot;matDoAluno&quot;,&quot;idRequisição&quot;&#41;; mat.setTurma&#40;new Turma&#40;numTurma,disciplina,horario&#41;&#41;; mat.setTurma&#40;blablabla&#41;;
E depois enviar esse xml…
Se for reparar,isso ficará um XML simples e relativamente pequeno(e de fácil manipulação),apesar de eu ter dúvidas qto a velocidade de execução…
Acho q capitei sua idéia,mas explicite-a um pouco mais para eu ver…
(pequenos trechos de código seriam interessantes…)

Po, a idéia é simples: toda a lógica de negócios do seu sistema é exportada como serviços via RMI e você os acessa seja através da sua aplicação Swing ou do seu Servlet. Nada muito complicado.

A ideia do RMI tambem eh perfeita pra esse caso - eu so insisti um pouco em usar REST (em cima de HTTP e XML) pq as coisas ficam mais visiveis, afinal, HTTP eh um protocolo text-based, e isso te da uma facilidade de depuracao muito boa. Alem disso, o XStream eh rapido pacas.