Skip to content

Commit ae566fe

Browse files
Adicionando Hibernate! Versão 1.1.0
1 parent de63c7e commit ae566fe

39 files changed

+1430
-1727
lines changed

.context/_meta/key-decisions.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ last_updated: 2026-02-10
1515
| ID | Decisao | Status | Racional | Impacto |
1616
| --- | --- | --- | --- | --- |
1717
| ADR-001 | Arquitetura em camadas (`web/service/dao/model/util`) | Aceita | Facilita manutencao em legado e separa responsabilidades | Evita acoplamento entre HTTP, regra e SQL |
18-
| ADR-002 | SQL explicito em DAO | Aceita | Controle explicito de SQL e compatibilidade com Java 6 | Mudancas de schema exigem ajuste manual de SQL |
18+
| ADR-002 | Hibernate nativo em DAO (Session/Transaction) com SQL nativo pontual | Aceita | Reduzir boilerplate JDBC e manter controle fino nas tabelas auxiliares | Mudancas de schema exigem alinhar mapeamentos ORM e SQL auxiliar |
1919
| ADR-003 | H2 embarcado para ambiente local e testes | Aceita | Rapidez de setup e execucao de suite automatizada | Aproxima testes de persistencia sem dependencia externa |
2020
| ADR-004 | Campos de layout modelados com metadados (`layout_campo` + `_layout_valor`) | Aceita | Cobrir variacao de leiautes sem inflar schema principal | Import/export permanece extensivel por configuracao |
2121
| ADR-005 | Autenticacao por sessao HTTP + `AuthFilter` | Aceita | Simplicidade operacional no stack servlet legado | Requer cuidado com protecao de rotas `/app/*` |
@@ -30,7 +30,8 @@ last_updated: 2026-02-10
3030
| ADR-014 | Escape de saida JSP centralizado em `ViewUtils.e(...)` | Aceita | Mitigar XSS em renderizacao de dados dinamicos | Padroniza renderizacao segura e reduz risco de regressao |
3131
| ADR-015 | Hash de senha PBKDF2 com migracao transparente de SHA-256 legado | Aceita | Elevar seguranca sem quebrar base existente de usuarios | Login bem-sucedido em hash legado dispara rehash para PBKDF2 |
3232
| ADR-016 | Command Pattern no web layer para despacho de `acao` (`AbstractActionServlet`) | Aceita | Reduzir encadeamento de `if/else` e facilitar extensao de operacoes por modulo | Mantem comportamento e melhora legibilidade/manutenibilidade dos servlets |
33-
| ADR-017 | Hibernate 4.2 introduzido como infraestrutura de conexao para DAOs | Aceita | Adicionar framework de persistencia compativel com Java 6 sem quebrar SQL legado | DAOs passam a usar `HibernateConnectionProvider` e base fica pronta para migracao ORM gradual |
33+
| ADR-017 | Hibernate 4.2 consolidado como ORM nativo por XML (`*.hbm.xml`) | Aceita | Estabilizar persistencia em Java 6 sem depender de JPA nesta versao | DAOs passam a usar `AbstractHibernateDao` e `SessionFactory` |
34+
| ADR-018 | JPA adiado para versao 1.2.0 | Aceita | Reduzir risco de mudanca dupla (ORM + API JPA) na mesma entrega | Baseline 1.1.x permanece Hibernate nativo sem `EntityManager` |
3435

3536
## Quando atualizar este arquivo
3637

.context/_meta/project-overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Aplicacao web legada para cadastro, consulta, importacao e exportacao de dados d
3030

3131
1. Codigo de producao deve permanecer compativel com Java 6.
3232
2. Camadas devem manter isolamento (`web`, `service`, `dao`, `model`, `util`).
33-
3. Persistencia com SQL explicito em DAO e conexao gerenciada por Hibernate 4.2.
33+
3. Persistencia com Hibernate 4.2 nativo (`Session`/`Transaction`), sem JPA nesta versao.
3434
4. Banco principal de desenvolvimento/teste: H2 embarcado.
3535

3636
## Fluxos criticos

.context/_meta/tech-stack.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ last_updated: 2026-02-10
2020
| Web | Servlet 2.5 + JSP 2.1 |
2121
| Container alvo | Tomcat 6/7 |
2222
| Banco | H2 (`com.h2database:h2:1.3.176`) |
23-
| Persistencia | Hibernate ORM 4.2 + SQL legado em DAO |
23+
| Persistencia | Hibernate ORM 4.2 nativo (`Session`/`Transaction` + `*.hbm.xml`) |
2424
| Empacotamento | WAR (`censo-superior-2025.war`) |
2525

2626
## Dependencias principais (pom.xml)
@@ -31,7 +31,6 @@ last_updated: 2026-02-10
3131
2. `javax.servlet.jsp:jsp-api:2.1` (provided)
3232
3. `com.h2database:h2:1.3.176` (runtime)
3333
4. `org.hibernate:hibernate-core:4.2.21.Final`
34-
5. `org.hibernate:hibernate-entitymanager:4.2.21.Final`
3534

3635
### Teste
3736

@@ -49,9 +48,11 @@ last_updated: 2026-02-10
4948

5049
## Observacoes de persistencia
5150

52-
1. DAOs continuam com SQL explicito para preservar compatibilidade de comportamento.
53-
2. Abertura de conexao dos DAOs e feita por `HibernateConnectionProvider`.
54-
3. Dialect e resolvido por URL JDBC (H2/PostgreSQL/MySQL/DB2).
51+
1. DAOs usam `AbstractHibernateDao` com transacao por `Session`.
52+
2. Mapeamento ORM e definido por XML (`hibernate.cfg.xml` + `*.hbm.xml`) sem JPA.
53+
3. SQL nativo fica restrito a tabelas auxiliares (`*_opcao`, `*_layout_valor`).
54+
4. Dialect e driver sao resolvidos por URL JDBC (H2/PostgreSQL/MySQL/DB2).
55+
5. JPA foi adiado para `1.2.0`.
5556

5657
## Comandos usuais
5758

@@ -64,7 +65,7 @@ mvn clean package
6465
### Testes recomendados no workspace atual
6566

6667
```bash
67-
mvn -Dmaven.repo.local=.m2/repository -Dmaven.compiler.source=1.7 -Dmaven.compiler.target=1.7 test
68+
mvn '-Dmaven.repo.local=.m2/repository' '-Dmaven.compiler.source=1.7' '-Dmaven.compiler.target=1.7' test
6869
```
6970

7071
## Gate de qualidade

.context/patterns/architecture.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ HTTP Request
3232
-> CsrfFilter (apenas POST em /app/*)
3333
-> Servlet (web, despacho por Command)
3434
-> Service (regra de negocio)
35-
-> DAO (SQL legado)
36-
-> HibernateConnectionProvider (SessionFactory)
35+
-> DAO (Hibernate nativo)
36+
-> AbstractHibernateDao / HibernateConnectionProvider (SessionFactory)
3737
-> H2 / tabelas
3838
-> Service
3939
-> Servlet
@@ -42,9 +42,9 @@ HTTP Response (JSP com output escaping via ViewUtils.e)
4242

4343
## Padroes adotados
4444

45-
1. DAO Pattern para isolamento de SQL.
45+
1. DAO Pattern para isolamento de persistencia.
4646
2. Service Layer para invariantes de negocio.
47-
3. Bridge de persistencia via Hibernate (`HibernateConnectionProvider`) para abertura de conexao.
47+
3. Template transacional de persistencia via Hibernate (`AbstractHibernateDao` + `HibernateConnectionProvider`).
4848
4. Filter para controle de autenticacao de sessao.
4949
5. Builder Pattern para montagem de entidades com muitos campos vindos de formulario.
5050
6. Synchronizer Token Pattern para protecao CSRF em operacoes mutaveis.
@@ -56,14 +56,14 @@ HTTP Response (JSP com output escaping via ViewUtils.e)
5656

5757
1. `web`: entrada/saida HTTP e navegacao.
5858
2. `service`: validacao, consistencia e orquestracao.
59-
3. `dao`: persistencia, query e mapeamento.
59+
3. `dao`: persistencia Hibernate, query e mapeamento ORM.
6060
4. `model`: representacao de entidades de dominio.
6161
5. `util`: hash, validacao e mapeamentos auxiliares.
6262

6363
## Pontos de atencao arquitetural
6464

6565
1. Fluxos de import/export devem manter consistencia entre modelo e metadados de layout.
66-
2. Mudancas de schema impactam DAO, service e testes em cascata.
66+
2. Mudancas de schema impactam mapeamentos ORM, DAO, service e testes em cascata.
6767
3. Dependencias devem ser unidirecionais para evitar acoplamento ciclico.
6868
4. Validacao de UF/municipio em `DocenteService` e `IesService` depende da tabela `municipio`.
6969
5. Pool interno do Hibernate e aceitavel para desenvolvimento, mas nao para producao.

.context/standards/architectural-rules.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ last_updated: 2026-02-10
1616

1717
1. `Servlet` deve apenas orquestrar HTTP e delegar para `service`.
1818
2. Regra de negocio deve ficar em `service`.
19-
3. SQL deve ficar apenas em classes `dao`.
20-
4. `dao` deve usar `PreparedStatement` e bind seguro de parametros.
19+
3. Persistencia deve ficar apenas em classes `dao`.
20+
4. SQL nativo em `dao` deve usar bind seguro de parametros.
2121
5. Classes `model` nao devem depender de `web` nem de `dao`.
2222
6. Novos fluxos autenticados devem passar por `AuthFilter`.
2323
7. Mudancas de schema devem manter compatibilidade com seeds e testes.
24-
8. DAOs devem abrir conexao via `HibernateConnectionProvider` (sem `DriverManager` direto).
24+
8. DAOs devem usar `AbstractHibernateDao`/`HibernateConnectionProvider` (sem `DriverManager` direto).
2525

2626
## Direcao de dependencias permitida
2727

.context/standards/code-quality.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@ last_updated: 2026-02-10
2121
## Regras para Java legado
2222

2323
1. Sem lambda, stream, try-with-resources ou APIs apos Java 6 em producao.
24-
2. Fechar recursos JDBC de forma explicita (usar infraestrutura existente em `AbstractJdbcDao`).
24+
2. Transacoes DAO devem usar infraestrutura comum (`AbstractHibernateDao`) para commit/rollback consistente.
2525
3. Evitar `catch` vazio; sempre registrar contexto do erro e propagar de forma controlada.
26-
4. Em DAO, obter conexao apenas por `HibernateConnectionProvider`.
26+
4. Em DAO, usar `Session` Hibernate e evitar `Connection`/`DriverManager` direto.
2727

2828
## Regras de seguranca e validacao
2929

3030
1. Entrada HTTP deve ser validada antes de persistir.
3131
2. Senhas devem usar utilitario central (`PasswordUtil`) e nao hash ad-hoc.
32-
3. Consultas SQL devem ser parametrizadas (nunca concatenar entrada do usuario).
32+
3. Consultas HQL/SQL nativas devem ser parametrizadas (nunca concatenar entrada do usuario).
3333
4. Nao registrar dados sensiveis em logs ou mensagens de erro.
3434

3535
## Regras de design por camada
3636

3737
1. `web`: parse de parametros, validacao basica e roteamento de resposta.
3838
2. `service`: regras de negocio, orquestracao e invariantes de dominio.
39-
3. `dao`: SQL, mapeamento e transacao local sobre conexao gerenciada por Hibernate.
39+
3. `dao`: mapeamento ORM, HQL/SQL nativo pontual e transacao por `Session`.
4040
4. `util`: funcoes reutilizaveis sem estado de request.
4141

4242
## Definicao de pronto para alteracao de codigo

.context/standards/testing-strategy.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ last_updated: 2026-02-10
2929
### Suite principal no workspace atual
3030

3131
```bash
32-
mvn -Dmaven.repo.local=.m2/repository -Dmaven.compiler.source=1.7 -Dmaven.compiler.target=1.7 test
32+
mvn '-Dmaven.repo.local=.m2/repository' '-Dmaven.compiler.source=1.7' '-Dmaven.compiler.target=1.7' test
3333
```
3434

3535
### E2E (quando houver container + driver)
@@ -42,7 +42,7 @@ mvn -De2e.baseUrl=http://localhost:8080/censo-superior-2025 -Dtest=CensoE2ETest
4242

4343
1. Mudanca em `util`: atualizar teste unitario correspondente.
4444
2. Mudanca em regra de `service`: adicionar/ajustar teste de service.
45-
3. Mudanca em SQL/DAO: atualizar teste de integracao DAO.
45+
3. Mudanca em DAO/HQL/SQL nativo: atualizar teste de integracao DAO.
4646
4. Mudanca em infraestrutura Hibernate (`config` de persistencia): executar suite completa `dao` + `service`.
4747
5. Mudanca em autenticacao/filtro: atualizar teste de `AuthFilter`.
4848
6. Mudanca de fluxo ponta a ponta: considerar ajuste de E2E.

.context/workflows/deployment.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ last_updated: 2026-02-10
2222
### 1. Executar testes
2323

2424
```bash
25-
mvn -Dmaven.repo.local=.m2/repository -Dmaven.compiler.source=1.7 -Dmaven.compiler.target=1.7 test
25+
mvn '-Dmaven.repo.local=.m2/repository' '-Dmaven.compiler.source=1.7' '-Dmaven.compiler.target=1.7' test
2626
```
2727

2828
### 2. Gerar pacote WAR

README.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ Prototipo funcional com:
44
- Java 6 (JDK 1.6)
55
- Servlet 2.5 / JSP
66
- Hibernate ORM 4.2 (compativel com Java 6)
7-
- SQL legado nos DAOs (via conexao gerenciada pelo Hibernate)
7+
- Hibernate nativo nos DAOs (`Session` + `Transaction` + HQL/SQL nativo)
8+
- Mapeamento ORM por XML (`*.hbm.xml`), sem anotacoes JPA
89
- Tomcat 6/7
910
- Maven 3.2.5 (compatibilidade de projeto)
1011
- H2 embarcado
@@ -14,7 +15,7 @@ Prototipo funcional com:
1415
### Camadas
1516
- `web` (Servlets): recebe request/response e delega para servicos.
1617
- `service`: validacoes e regras de negocio.
17-
- `dao`: persistencia SQL sobre conexao gerenciada por Hibernate (`SessionFactory`).
18+
- `dao`: persistencia Hibernate nativa sobre `SessionFactory`.
1819
- `model`: entidades de dominio.
1920
- `util`: utilitarios de seguranca/validacao/mapeamento de request.
2021

@@ -28,8 +29,9 @@ Prototipo funcional com:
2829
### Padroes de projeto utilizados
2930
- DAO Pattern (`AlunoDAO`, `CursoDAO`, `CursoAlunoDAO`, `DocenteDAO`, `IesDAO`, etc.).
3031
- Service Layer (`AlunoService`, `CursoService`, `CursoAlunoService`, `DocenteService`, `IesService`, `AuthService`).
31-
- Template-style base JDBC (`AbstractJdbcDao`) para fechar recursos e bind nulo.
32-
- Bridge de persistencia via `HibernateConnectionProvider` (Hibernate como primeiro framework de dados).
32+
- Template transacional Hibernate (`AbstractHibernateDao`) para padronizar `Session`/`Transaction`.
33+
- ORM mapping por XML (`hibernate.cfg.xml` + `*.hbm.xml`) para compatibilidade Java 6 sem JPA.
34+
- Bridge de persistencia via `HibernateConnectionProvider` (boot e ciclo de vida de `SessionFactory`).
3335

3436
## Modelagem de banco
3537

@@ -104,8 +106,9 @@ mvn -Dmaven.repo.local=.m2/repository -Dmaven.compiler.source=1.7 -Dmaven.compil
104106

105107
Cobertura:
106108
- JaCoCo com gate minimo de `80%` (linha) para `dao`, `service` e `util`.
107-
- Resultado atual da suite: acima do gate, com DAOs rodando sobre conexao gerenciada por Hibernate.
109+
- Resultado atual da suite: acima do gate, com DAOs rodando sobre Hibernate nativo (`Session`/`Transaction`).
108110

109111
Consulte `docs/TEST-PLAN.md` para detalhes da piramide de testes e roteiro E2E.
110112
Consulte `docs/ARCHITECTURE.md` para visao arquitetural detalhada do sistema.
111-
Consulte `docs/HIBERNATE-MIGRATION.md` para detalhes da introducao do Hibernate.
113+
Consulte `docs/HIBERNATE-MIGRATION.md` para historico da migracao de persistencia.
114+
Consulte `docs/HIBERNATE-NATIVE-WHAT-CHANGED.md` para o baseline atual (sem JPA; JPA previsto para `1.2.0`).

docs/ARCHITECTURE.md

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ O sistema segue arquitetura em camadas com separacao clara de responsabilidades:
1818

1919
1. `web`: entrada HTTP, navegacao e renderizacao JSP.
2020
2. `service`: regras de negocio, validacoes e import/export TXT pipe.
21-
3. `dao`: persistencia SQL com conexao JDBC gerenciada por Hibernate 4.2.
21+
3. `dao`: persistencia Hibernate nativa (`Session`/`Transaction`) com HQL e SQL nativo quando necessario.
2222
4. `model`: entidades e enums de dominio.
2323
5. `util`: utilitarios transversais (hash, validacoes, mapeamento).
2424

@@ -28,8 +28,8 @@ flowchart LR
2828
B --> C[CsrfFilter]
2929
C --> D[Servlets]
3030
D --> E[Services]
31-
E --> F[DAOs SQL]
32-
F --> I[HibernateConnectionProvider / SessionFactory]
31+
E --> F[DAOs Hibernate]
32+
F --> I[AbstractHibernateDao / SessionFactory]
3333
I --> G[(H2 Database)]
3434
D --> H[JSP Views]
3535
```
@@ -41,7 +41,7 @@ flowchart LR
4141
| Web | `br.gov.inep.censo.web` | Controller HTTP e roteamento | `AbstractActionServlet`, `AlunoServlet`, `CursoServlet`, `CursoAlunoServlet`, `DocenteServlet`, `IesServlet` |
4242
| Filtro | `br.gov.inep.censo.web.filter` | Protecao de rotas autenticadas e anti-CSRF | `AuthFilter`, `CsrfFilter` |
4343
| Service | `br.gov.inep.censo.service` | Regra de negocio e orquestracao | `AlunoService`, `CursoService`, `CursoAlunoService`, `DocenteService`, `IesService` |
44-
| DAO | `br.gov.inep.censo.dao` | SQL, mapeamento, CRUD e consultas | `AlunoDAO`, `CursoDAO`, `CursoAlunoDAO`, `DocenteDAO`, `IesDAO`, `MunicipioDAO` |
44+
| DAO | `br.gov.inep.censo.dao` | CRUD, transacao e consulta com Hibernate nativo | `AlunoDAO`, `CursoDAO`, `CursoAlunoDAO`, `DocenteDAO`, `IesDAO`, `MunicipioDAO` |
4545
| Modelo | `br.gov.inep.censo.model` | Entidades persistidas | `Aluno`, `Curso`, `CursoAluno`, `Docente`, `Ies`, `Municipio`, `Usuario` |
4646
| Dominio auxiliar | `br.gov.inep.censo.domain` | Constantes de dominio/layout | `CategoriasOpcao`, `ModulosLayout` |
4747
| Utilitarios | `br.gov.inep.censo.util` | Funcoes de apoio reutilizaveis | `ValidationUtils`, `PasswordUtil`, `RequestFieldMapper` |
@@ -64,7 +64,7 @@ flowchart LR
6464
1. Servlet recebe acao (`lista`, `form`, `salvar`, `mostrar`, `excluir`, `importar`, `exportar`).
6565
2. `AbstractActionServlet` despacha a acao para comando registrado (`Map<String, ActionCommand>`).
6666
3. Service valida regras e consistencia.
67-
4. DAO executa SQL usando `Connection` fornecida por `HibernateConnectionProvider`.
67+
4. DAO executa operacoes em `Session` Hibernate (HQL e SQL nativo para tabelas auxiliares).
6868
5. JSP renderiza saida com escape HTML via `ViewUtils.e(...)`.
6969
6. Servlet encaminha para JSP de lista, formulario ou visualizacao.
7070

@@ -113,8 +113,8 @@ Scripts de banco:
113113

114114
## 6. Decisoes Arquiteturais Relevantes
115115

116-
1. Hibernate 4.2 (compativel com Java 6) introduzido como primeiro framework de acesso ao banco.
117-
2. SQL de negocio permanece nos DAOs na fase atual da migracao para preservar comportamento legado.
116+
1. Hibernate 4.2 (compativel com Java 6) adotado como base de persistencia sem JPA.
117+
2. Mapeamento ORM por XML (`hibernate.cfg.xml` + `*.hbm.xml`) para compatibilidade com Java 6 e controle explicito.
118118
3. Monolito em camadas para simplicidade de manutencao em stack legado.
119119
4. Modelagem de campos de layout por metadados para suportar evolucao de leiaute.
120120
5. Sessao HTTP + filtro para autenticacao sem dependencia externa.
@@ -125,6 +125,7 @@ Scripts de banco:
125125
10. Output Encoding centralizado com `ViewUtils.e(...)` para mitigar XSS refletido/armazenado em JSP.
126126
11. Migracao progressiva de hash de senha: compatibilidade legado + rehash automatico para PBKDF2.
127127
12. Command Pattern no web layer para despacho de `acao` sem cadeias extensas de `if/else`.
128+
13. JPA/`EntityManager` adiado para versao `1.2.0`; baseline atual permanece Hibernate nativo.
128129

129130
## 7. Qualidade, Build e Testes
130131

@@ -149,7 +150,7 @@ Qualidade:
149150
## 8. Restricoes e Riscos
150151

151152
1. Stack legado (Servlet 2.5, JSP 2.1, Java 6) limita uso de recursos modernos.
152-
2. Mudancas de schema exigem sincronizacao entre SQL, DAO, service e testes.
153+
2. Mudancas de schema exigem sincronizacao entre mapeamentos Hibernate, DAO, service e testes.
153154
3. Acoplamento entre importacao/exportacao e metadados de layout exige regressao cuidadosa.
154155
4. Seguranca depende de manter `ViewUtils.e(...)` em toda saida JSP e `_csrf` em todo `POST` de `/app/*`.
155156
5. Pool embutido do Hibernate e adequado para desenvolvimento, mas nao para producao.
@@ -159,8 +160,9 @@ Qualidade:
159160
1. `README.md`
160161
2. `docs/TEST-PLAN.md`
161162
3. `docs/HIBERNATE-MIGRATION.md`
162-
4. `src/main/java/br/gov/inep/censo/web`
163-
5. `src/main/java/br/gov/inep/censo/service`
164-
6. `src/main/java/br/gov/inep/censo/dao`
165-
7. `src/main/java/br/gov/inep/censo/config`
166-
8. `src/main/resources/db`
163+
4. `docs/HIBERNATE-NATIVE-WHAT-CHANGED.md`
164+
5. `src/main/java/br/gov/inep/censo/web`
165+
6. `src/main/java/br/gov/inep/censo/service`
166+
7. `src/main/java/br/gov/inep/censo/dao`
167+
8. `src/main/java/br/gov/inep/censo/config`
168+
9. `src/main/resources/db`

0 commit comments

Comments
 (0)