Archbase é um framework Java para aplicações empresariais construído sobre Spring Boot 3.5.6 e Java 17. Implementa Domain-Driven Design (DDD) com Onion Architecture, oferecendo uma base sólida e modular para aplicações complexas.
Versão 2.0.0 - Veja as notas de release para informações sobre atualizações.
- Domain-Driven Design - Suporte completo a entidades, agregados, value objects e repositórios
- Multi-tenancy - Isolamento de tenant com múltiplas estratégias de resolução
- Segurança - JWT com controle de permissões baseado em anotações
- Event-Driven - CQRS com buses separados para Commands, Queries e Events
- Query Flexível - Suporte a RSQL para filtros dinâmicos
- Validação - Framework de validação com fluent interface
- Workflow Engine - Orquestração de processos de negócio
- Plugin System - Carregamento dinâmico de extensões
<dependency>
<groupId>br.com.archbase</groupId>
<artifactId>archbase-starter</artifactId>
<version>2.0.0</version>
</dependency>Ou use módulos específicos:
<!-- Para apenas DDD básico -->
<dependency>
<groupId>br.com.archbase</groupId>
<artifactId>archbase-starter-core</artifactId>
<version>2.0.0</version>
</dependency>
<!-- Para segurança -->
<dependency>
<groupId>br.com.archbase</groupId>
<artifactId>archbase-starter-security</artifactId>
<version>2.0.0</version>
</dependency>
<!-- Para multi-tenancy -->
<dependency>
<groupId>br.com.archbase</groupId>
<artifactId>archbase-starter-multitenancy</artifactId>
<version>2.0.0</version>
</dependency>archbase:
security:
enabled: true
jwt:
secret: sua-chave-secreta-minimo-32-caracteres
expiration: 86400000 # 24 horas
multitenancy:
enabled: true
scan-packages: com.suaempresa
rsql:
enabled: true
case-insensitive: true@Entity
@DomainEntity
public class Cliente extends PersistenceEntityBase<Cliente, UUID> {
private String nome;
private String email;
@Override
public ValidationResult validate() {
return new Cliente.Validator().validate(this);
}
static class Validator extends AbstractArchbaseValidator<Cliente> {
@Override
public void rules() {
ruleFor(Cliente::getNome)
.must(not(stringEmptyOrNull()))
.withMessage("Nome é obrigatório");
ruleFor(Cliente::getEmail)
.must(emailAddress())
.withMessage("Email inválido");
}
}
}@DomainRepository
public interface ClienteRepository
extends Repository<Cliente, UUID, Long> {
// CRUD automático disponível
}@RestController
@RequestMapping("/api/clientes")
@HasPermission(action = "VIEW", resource = "CLIENTE")
public class ClienteController {
@Autowired
private ClienteRepository repository;
@GetMapping
public Page<Cliente> buscar(
@RequestParam(required = false) String filter,
Pageable pageable) {
ArchbaseSpecification<Cliente> spec = Specification.where(null);
if (filter != null) {
spec = ArchbaseRSQLJPASupport.toSpecification(filter, Cliente.class);
}
return repository.findAll(spec, pageable);
}
@PostMapping
@HasPermission(action = "CREATE", resource = "CLIENTE")
public Cliente criar(@RequestBody @Valid Cliente cliente) {
return repository.save(cliente);
}
}| Módulo | Descrição |
|---|---|
archbase-starter |
Starter completo com todos os módulos |
archbase-starter-core |
Configuração core (RSQL, Jackson, Swagger) |
archbase-starter-security |
Autenticação JWT e controle de permissões |
archbase-starter-multitenancy |
Suporte a multi-tenancy |
archbase-domain-driven-design |
Implementação base de DDD |
archbase-domain-driven-design-spec |
Padrão Specification para queries |
archbase-query |
Query handling e suporte RSQL |
archbase-security |
@HasPermission e autenticação programática |
archbase-multitenancy |
Isolamento de tenant e contexto |
archbase-event-driven |
CQRS com Command/Query/Event buses |
archbase-workflow-process |
Motor de workflow |
archbase-plugin-manager |
Carregamento dinâmico de plugins |
archbase-validation |
Framework de validação |
archbase-error-handling |
Tratamento centralizado de erros |
O framework segue Hexagonal Architecture (Ports & Adapters) com separação clara de responsabilidades:
@Entity
@DomainEntity
public class Produto extends TenantPersistenceEntityBase<Produto, UUID> {
// Tenant ID é adicionado automaticamente
}@Configuration
@HandlerScan(basePackages = "com.minhaempresa.handlers")
public class HandlerConfig {
}
@Component
public class CriarProdutoHandler {
@CommandHandler
public UUID handle(CriarProdutoCommand command) {
// Lógica do comando
return id;
}
@EventHandler
public void on(ProdutoCriadoEvent event) {
// Reage ao evento
}
}@Autowired
private SystemUserContext systemUserContext;
public void processarJob() {
systemUserContext.runAsSystemUser("[email protected]", () -> {
// Executa como usuário do sistema
});
}Workflow workflow = Workflow.builder()
.id("pedido-workflow")
.step("validar")
.step("processar-pagamento")
.step("enviar-confirmacao")
.build();
WorkflowEngine executor = new WorkflowEngine(workflow);
executor.execute(context);Para documentação completa e detalhada, visite:
- Java 17 ou superior
- Spring Boot 3.5.6
- Maven 3.6+
Copyright © 2024 Relevant Solutions
Para a versão 1.x do framework, use a branch V1.