O getManager() aparece em vários lugares do CRUD — Action, XtPage, DAO, MdFactory e Model. Este episódio explica o fio invisível que conecta essas peças: como o cartão temporário (o Manager) é montado quando um pedido chega, e como ele é passado de peça em peça pra que todo mundo tenha o mesmo contexto do request.
Nota: esta é uma página conceitual — não tem arquivo Java pra modificar. Entender esse fio é o que conecta tudo que a gente construiu nos episódios anteriores.
O Jasap tem dois momentos distintos em que lida com Managers — importante não confundir:
Fase 1 — Inicialização (prédio acordando):
config() em cada um — é aí que cada Manager registra seus serviços (regAction) e crachás (regFun) no mapa global do prédioNessa fase não tem agente, não tem cartão de verdade. Só o sistema preparando o prédio.
Fase 2 — Requisição (pedido chegando):
AppManager + PnlManager + DepartamentoManagerui() — tudo do contexto deste requestgetManager() aparece
O mesmo cartão (Manager) é passado pra várias peças. Cada uma o acessa com getManager() — mas vem de lugares diferentes:
| Peça | De onde getManager() vem | Pra que usa |
|---|---|---|
| Action (ex: List) | Herdado de JasapAct — framework injeta no início do request | Passar pro new XtPage(getManager()), pro getFactory(), pra buscar o WBean |
| XtPage | Passado no construtor da Action new XtPage(getManager()) | Acessar ferramentaria, configurar a página com contexto |
| DAO | Configurado via setManager(manager) no construtor | Acessar o banco: getDataBase() |
| MdFactory | Recebido no construtor: DepartamentoMdFactory(AppManager manager) | Passar pros Models que a factory fabrica |
| Model | Herdado do DAO (via super(manager)) | Mesmo que o DAO — acesso ao banco |
É SEMPRE O MESMO cartão passando de mão em mão. Não tem dois cartões diferentes rodando ao mesmo tempo no mesmo request.
O cartão não é um objeto único — são 3 camadas encaixadas como País > Estado > Cidade (um endereço, não pessoas diferentes):
| Camada | Tipo | Fornece |
|---|---|---|
| 1 | AppManager (framework) | Sessão, conexão com banco, contexto do request — a infraestrutura básica |
| 2 | PnlManager (projeto) | Permissões do Painel de Controle, regFun, verificação de ok() |
| 3 | DepartamentoManager (módulo) | Actions registradas do módulo, F_ACESSO_MODULO, config específica |
Quando uma Action chama getManager(), o que ela recebe é a camada mais externa (DepartamentoManager), que tem TUDO das camadas de baixo por herança. É um só objeto com todo o contexto junto.
O DAO não fala com o banco direto — ele passa por um LEITOR DE CARTÃO. O leitor precisa do cartão pra:
DataBaseFilter) no início do requestSem o cartão, o DAO não tem acesso ao banco. Por isso o construtor do DAO faz setManager(manager) + setDataBase(manager.getDataBase()) — extrai a conexão do cartão e guarda.
Veja uma chamada típica que um setor de listagem faz pra buscar produtos:
getFactory().departamento().proModel().daoList(lv.getData());
Seguindo o fio do cartão:
getFactory() — herdado de AppsRootAction. Devolve a AppsRootModelFactory configurada com o cartão do request atual.departamento() — a factory central cria uma DepartamentoMdFactory passando o mesmo cartão pro construtor.proModel() — na primeira chamada, a factory local cria o DepartamentoProdutoModel passando o mesmo cartão. Construtor do Model faz super(manager) — o cartão chega no DAO. DAO faz setManager + setDataBase.daoList(lv.getData()) — agora o DAO tem o cartão e consegue chamar getDataBase() pra rodar a queryO cartão passou por 4 peças diferentes nessa única linha de código. Nenhuma criou um cartão novo — todas receberam o mesmo que o agente tinha na mão.
Em cada request:
getManager()/getDataBase()/getFactory()Saber que é sempre o MESMO cartão passando de mão em mão é o que faz tudo fazer sentido junto.