Projeto criado para estudo prático dos conceitos fundamentais de JavaServer Faces (JSF) com PrimeFaces, utilizando Maven, CDI (Weld), JPA (Hibernate) e MySQL.
O objetivo é compreender a arquitetura básica de aplicações web Java EE (Jakarta EE) e exercitar boas práticas de persistência e camadas.
Aprender o desenvolvimento de aplicações JSF integradas a banco de dados, com foco em:
- Criação de páginas dinâmicas com XHTML e componentes PrimeFaces;
- Integração JPA/Hibernate para persistência de entidades;
- Uso de CDI (Weld) para injeção de dependência e escopos;
- Boas práticas em camadas
model,repositoryeview; - Configuração de schemas automáticos e dados iniciais via
persistence.xml.
| Camada | Tecnologia / Versão |
|---|---|
| Linguagem | Java 8 |
| Framework Web | JSF 2.2 (GlassFish implementation) |
| Componentes UI | PrimeFaces 6.0 |
| Persistência | JPA / Hibernate Core 5.2.3.Final |
| Validação | Hibernate Validator 5.3.0.Final |
| Injeção de Dependência | Weld (CDI 2.4.0.Final) |
| Banco de Dados | MySQL 8.0.33 |
| Servidor de Aplicação | Tomcat 9+ |
| Build Tool | Maven |
src/
├── main/
│ ├── java/com/jsfprimefaces/erp/
│ │ ├── model/
│ │ │ ├── Empresa.java # Entidade principal (Empresa)
│ │ │ ├── RamoAtividade.java # Entidade auxiliar (Ramos de atividade)
│ │ │ └── TipoEmpresa.java # Enum (MEI, LTDA, EIRELI, SA)
│ │ └── repository/
│ │ ├── Empresas.java # CRUD e consultas com JPA
│ │ ├── RamoAtividades.java # Consultas com CriteriaBuilder
│ │ ├── CamadaPersistencia.java # Teste de inserção e listagem
│ │ └── SchemaGeneration.java # Teste de geração de schema
│ └── resources/
│ └── META-INF/
│ ├── persistence.xml # Configuração do JPA e schema generation
│ ├── beans.xml # Ativação do CDI (Weld)
│ └── sql/
│ └── dados-iniciais.sql # Script de dados de exemplo
└── webapp/
├── META-INF/
│ └── context.xml # Configuração de recursos
├── WEB-INF/
│ ├── web.xml # Configuração do JSF e CDI
│ └── templates/ # Layout base e fragments
└── pages/ # Páginas JSF (ex: empresas.xhtml)
Configuração no arquivo src/main/resources/META-INF/persistence.xml:
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/erpjsfprimefaces" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="root" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
<property name="javax.persistence.sql-load-script-source" value="META-INF/sql/dados-iniciais.sql" />O script dados-iniciais.sql é automaticamente executado ao iniciar a aplicação, criando registros de exemplo para:
- RamoAtividade (Distribuição de alimentos, Telecomunicações, Vestuário, etc.);
- Empresa (Mercado do João, Fale Mais, Maria de Souza da Silva...).
A camada de repositórios utiliza EntityManager diretamente, com métodos simples e expressivos:
public class Empresas {
private EntityManager manager;
public Empresa guardar(Empresa empresa) {
return manager.merge(empresa);
}
public List<Empresa> pesquisar(String nome) {
String jpql = "from Empresa where nomeFantasia like :nomeFantasia";
return manager.createQuery(jpql, Empresa.class)
.setParameter("nomeFantasia", nome + "%")
.getResultList();
}
}Também há suporte a Criteria API para consultas dinâmicas em RamoAtividades.
- Importe o projeto Maven no Eclipse ou VS Code (com extensão Java).
- Configure o Tomcat 9+ como servidor.
- Certifique-se de que o MySQL está ativo e acessível (usuário
root/ senharoot). - Faça o deploy do
.wargerado pelo Maven. - Acesse no navegador:
👉http://localhost:8080/jsfprimefaces-essencial
Durante a inicialização:
- As tabelas são criadas automaticamente (
drop-and-create); - O script
dados-iniciais.sqlé executado; - O log exibirá as queries SQL (
hibernate.show_sql=true).
- POO (Programação Orientada a Objetos): entidades modelam objetos do mundo real (
Empresa,RamoAtividade,TipoEmpresa); - JPA/Hibernate: abstração do acesso ao banco de dados via mapeamento objeto-relacional (ORM);
- CDI (Weld): injeção de dependência e ciclo de vida controlado;
- DAO/Repository Pattern: classes específicas para persistência (
Empresas,RamoAtividades); - Camadas de Arquitetura: separação entre domínio, persistência e visão;
- Enumeração: controle de tipos fixos (
TipoEmpresa).
Baseado no curso JSF e PrimeFaces Essencial da AlgaWorks.
Adaptado para fins de estudo, prática individual e aprofundamento em arquitetura Java EE.
- Adicionar camada Service/Bean para controle via Managed Beans JSF;
- Criar interface com PrimeFaces DataTable e formulários de cadastro;
- Implementar mensagens de validação (
FacesMessage+ Hibernate Validator); - Evoluir para Payara / Jakarta EE 10 futuramente.