Releases: KrystianYCSilva/min-java6-webapp
Adicionando Zk no Front
What's Changed
- Java com zk 3.6.2 by @KrystianYCSilva in #1
New Contributors
- @KrystianYCSilva made their first contribution in #1
Full Changelog: V1.2.0...V2.0.0
Adicionando JPA
Migração concluída para padrão JPA completo na camada de persistência.
- Dependência JPA do Hibernate adicionada em pom.xml:48 (hibernate-entitymanager).
- Bootstrap JPA padronizado com persistence.xml em src/main/resources/META-INF/persistence.xml:6 (PU RESOURCE_LOCAL, classes explícitas e exclude-unlisted-classes).
- Provedor de persistência migrado para EntityManagerFactory/EntityManager em src/main/java/br/gov/inep/censo/config/HibernateConnectionProvider.java:39.
- Template transacional JPA criado em src/main/java/br/gov/inep/censo/dao/AbstractJpaDao.java:13.
- Todos os DAOs migrados de Session/Transaction para EntityManager/EntityTransaction, incluindo JPQL e SQL nativo onde necessário:
- src/main/java/br/gov/inep/censo/dao/AlunoDAO.java:16
- src/main/java/br/gov/inep/censo/dao/CursoDAO.java:16
- src/main/java/br/gov/inep/censo/dao/CursoAlunoDAO.java:17
- src/main/java/br/gov/inep/censo/dao/DocenteDAO.java:15
- src/main/java/br/gov/inep/censo/dao/IesDAO.java:15
- src/main/java/br/gov/inep/censo/dao/LayoutCampoDAO.java:16
- src/main/java/br/gov/inep/censo/dao/OpcaoDAO.java:17
- src/main/java/br/gov/inep/censo/dao/UsuarioDAO.java:11
- Legado removido:
- src/main/java/br/gov/inep/censo/dao/AbstractHibernateDao.java
- src/main/resources/hibernate.cfg.xml
- Documentação atualizada para o novo baseline JPA:
- README.md:7
- docs/ARCHITECTURE.md:21
- docs/HIBERNATE-MIGRATION.md:29
- docs/TEST-PLAN.md:24
Validação executada:
- mvn clean '-Dmaven.repo.local=.m2/repository' '-Dmaven.compiler.source=1.7' '-Dmaven.compiler.target=1.7' test
- Resultado: BUILD SUCCESS
- Testes: 38 executados, 0 falhas, 0 erros, 1 skipped
- JaCoCo check: aprovado (All coverage checks have been met)
Adicionado Hibernate
Migração concluída para Hibernate nativo (sem JPA), mantendo compatibilidade com Java 6 e H2.
O que foi implementado
-
Removida dependência hibernate-entitymanager em pom.xml.
-
Consolidada infraestrutura Hibernate em src/main/java/br/gov/inep/censo/config/HibernateConnectionProvider.java (SessionFactory/Sessions, dialeto por URL, ciclo de vida).
-
Evoluída src/main/java/br/gov/inep/censo/config/ConnectionFactory.java para resolver driver por URL (H2/PostgreSQL/MySQL/DB2).
-
Criada base transacional src/main/java/br/gov/inep/censo/dao/AbstractHibernateDao.java.
-
Removido legado JDBC base src/main/java/br/gov/inep/censo/dao/AbstractJdbcDao.java.
-
DAOs migrados para Session/Transaction:
- src/main/java/br/gov/inep/censo/dao/AlunoDAO.java
- src/main/java/br/gov/inep/censo/dao/CursoDAO.java
- src/main/java/br/gov/inep/censo/dao/DocenteDAO.java
- src/main/java/br/gov/inep/censo/dao/IesDAO.java
- src/main/java/br/gov/inep/censo/dao/MunicipioDAO.java
- src/main/java/br/gov/inep/censo/dao/OpcaoDAO.java
- src/main/java/br/gov/inep/censo/dao/LayoutCampoDAO.java
- src/main/java/br/gov/inep/censo/dao/UsuarioDAO.java
-
Adicionado relacionamento ORM em src/main/java/br/gov/inep/censo/model/CursoAluno.java (Aluno/Curso via many-to-one, preservando alunoId/cursoId).
-
Criados mapeamentos XML *.hbm.xml em src/main/resources/br/gov/inep/censo/model/ para entidades principais.
-
Adicionado teste de regressão de cascade em src/test/java/br/gov/inep/censo/dao/AlunoDAOTest.java.
Docs e contexto atualizados -
README.md
-
docs/ARCHITECTURE.md
-
docs/TEST-PLAN.md
-
docs/HIBERNATE-MIGRATION.md (reorganizado para Fase 1 -> Fase 2)
-
docs/HIBERNATE-NATIVE-WHAT-CHANGED.md (novo documento solicitado)
-
Contexto: .context/_meta/tech-stack.md, .context/_meta/key-decisions.md, .context/_meta/project-overview.md, .context/patterns/architecture.md, .context/standards/architectural-rules.md, .context/standards/code-
-
Comando executado:
- mvn '-Dmaven.repo.local=.m2/repository' '-Dmaven.compiler.source=1.7' '-Dmaven.compiler.target=1.7' test
-
Resultado:
- BUILD SUCCESS
- Tests run: 38, Failures: 0, Errors: 0, Skipped: 1
- JaCoCo check: aprovado
Java puro, sem freamwork
ARCHITECTURE
1. Objetivo
Descrever a arquitetura do censo-superior-webapp, um monolito web Java 6 para cadastro e processamento dos registros do Censo Superior.
Modulos atuais:
Aluno(Registro 41)Curso(Registro 21)CursoAluno(Registro 42)Docente(Registro 31)IES(Registro 11 - laboratorio)
2. Visao Arquitetural
O sistema segue arquitetura em camadas com separacao clara de responsabilidades:
web: entrada HTTP, navegacao e renderizacao JSP.service: regras de negocio, validacoes e import/export TXT pipe.dao: persistencia JDBC e SQL.model: entidades e enums de dominio.util: utilitarios transversais (hash, validacoes, mapeamento).
flowchart LR
A[Browser] --> B[AuthFilter]
B --> C[CsrfFilter]
C --> D[Servlets]
D --> E[Services]
E --> F[DAOs]
F --> G[(H2 Database)]
D --> H[JSP Views]3. Estrutura de Componentes
| Camada | Pacote principal | Responsabilidade | Exemplos |
|---|---|---|---|
| Web | br.gov.inep.censo.web |
Controller HTTP e roteamento | AbstractActionServlet, AlunoServlet, CursoServlet, CursoAlunoServlet, DocenteServlet, IesServlet |
| Filtro | br.gov.inep.censo.web.filter |
Protecao de rotas autenticadas e anti-CSRF | AuthFilter, CsrfFilter |
| Service | br.gov.inep.censo.service |
Regra de negocio e orquestracao | AlunoService, CursoService, CursoAlunoService, DocenteService, IesService |
| DAO | br.gov.inep.censo.dao |
SQL, mapeamento, CRUD e consultas | AlunoDAO, CursoDAO, CursoAlunoDAO, DocenteDAO, IesDAO, MunicipioDAO |
| Modelo | br.gov.inep.censo.model |
Entidades persistidas | Aluno, Curso, CursoAluno, Docente, Ies, Municipio, Usuario |
| Dominio auxiliar | br.gov.inep.censo.domain |
Constantes de dominio/layout | CategoriasOpcao, ModulosLayout |
| Utilitarios | br.gov.inep.censo.util |
Funcoes de apoio reutilizaveis | ValidationUtils, PasswordUtil, RequestFieldMapper |
| Configuracao | br.gov.inep.censo.config |
Infra de banco e bootstrap | ConnectionFactory, DatabaseBootstrapListener |
4. Fluxos Principais
4.1 Autenticacao
- Usuario acessa
login.jsp. LoginServletvalida credencial viaAuthService.- Senha e validada por
PasswordUtilcom formato PBKDF2 (PBKDF2$iter$salt$hash) e compatibilidade com hash legado SHA-256. - Em login bem-sucedido com hash legado, o sistema faz upgrade transparente para PBKDF2.
- Sessao HTTP recebe
usuarioLogado. AuthFilterprotege/app/*e redireciona sem sessao.CsrfFiltervalida token para requisicoesPOSTem/app/*.
4.2 Operacoes de modulo
- Servlet recebe acao (
lista,form,salvar,mostrar,excluir,importar,exportar). AbstractActionServletdespacha a acao para comando registrado (Map<String, ActionCommand>).- Service valida regras e consistencia.
- DAO executa operacao JDBC no H2.
- JSP renderiza saida com escape HTML via
ViewUtils.e(...). - Servlet encaminha para JSP de lista, formulario ou visualizacao.
Observacao: CursoAluno foi separado em curso-aluno-list.jsp e curso-aluno-form.jsp para melhorar legibilidade.
4.3 Importacao e exportacao TXT pipe
- Entrada no formato pipe (
|). - Services fazem parse e mapeamento por registro (
11,21,31,41,42). - Persistencia cobre campos fixos e complementares de layout.
- Exportacao gera TXT individual ou em lote.
- Registro
10pode ser usado como cabecalho no fluxo de importacao deIES.
5. Persistencia e Modelo de Dados
Tabelas centrais:
usuarioaluno(Registro 41)curso(Registro 21)curso_aluno(Registro 42)docente(Registro 31)ies(Registro 11)municipio(tabela de apoio)
Tabelas auxiliares:
dominio_opcaoaluno_opcaocurso_opcaocurso_aluno_opcaolayout_campoaluno_layout_valorcurso_layout_valorcurso_aluno_layout_valordocente_layout_valories_layout_valor
Scripts de banco:
src/main/resources/db/schema.sqlsrc/main/resources/db/seed.sqlsrc/main/resources/db/seed_layout.sqlsrc/main/resources/db/seed_layout_ies_docente.sqlsrc/main/resources/db/seed_municipio.sql
6. Decisoes Arquiteturais Relevantes
- JDBC puro para controle explicito de SQL e compatibilidade com Java 6.
- Monolito em camadas para simplicidade de manutencao em stack legado.
- Modelagem de campos de layout por metadados para suportar evolucao de leiaute.
- Sessao HTTP + filtro para autenticacao sem dependencia externa.
- Tabela de apoio
municipiopara validar consistencia de UF/codigo de municipio emDocenteeIES. - Builder Pattern para construcao de entidades com muitos campos de formulario (
Aluno,Curso,CursoAluno,Docente,Ies). - Camada
webconsumindoservicepara acesso a dados de tela, evitando dependencia direta de DAO. - Synchronizer Token Pattern para CSRF em operacoes mutaveis de
/app/*. - Output Encoding centralizado com
ViewUtils.e(...)para mitigar XSS refletido/armazenado em JSP. - Migração progressiva de hash de senha: compatibilidade legado + rehash automatico para PBKDF2.
- Command Pattern no web layer para despacho de
acaosem cadeias extensas deif/else.
7. Qualidade, Build e Testes
Build:
mvn clean packageTestes (workspace atual):
mvn -Dmaven.repo.local=.m2/repository -Dmaven.compiler.source=1.7 -Dmaven.compiler.target=1.7 testQualidade:
- JaCoCo com gate minimo de 80% de cobertura de linha.
- Escopo do gate: pacotes
dao,serviceeutil. - Suite com testes unitarios, integracao e E2E (E2E desativado por padrao).
8. Restricoes e Riscos
- Stack legado (Servlet 2.5, JSP 2.1, Java 6) limita uso de recursos modernos.
- Mudancas de schema exigem sincronizacao entre SQL, DAO, service e testes.
- Acoplamento entre importacao/exportacao e metadados de layout exige regressao cuidadosa.
- Seguranca depende de manter
ViewUtils.e(...)em toda saida JSP e_csrfem todoPOSTde/app/*.
9. Referencias no repositorio
README.mddocs/TEST-PLAN.mdsrc/main/java/br/gov/inep/censo/websrc/main/java/br/gov/inep/censo/servicesrc/main/java/br/gov/inep/censo/daosrc/main/resources/db