Skip to content

Latest commit

 

History

2,238 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demoiselle

Demoiselle 4

CI Maven Central

=============

O framework Demoiselle implementa o conceito de framework integrador. Seu objetivo é facilitar a construção de aplicações minimizando tempo dedicado à escolha e integração de frameworks especialistas, o que resulta no aumento da produtividade e garante a manutenibilidade dos sistemas.

Disponibiliza mecanismos reusáveis voltados as funcionalidades mais comuns de uma aplicação (arquitetura, segurança, transação, mensagem, configuração, tratamento de exceções, etc).

Primeiros passos

Pré-requisitos: Java 21+, Maven 3.9+ e um runtime compatível com Jakarta EE 10. Importe o BOM para manter todos os módulos na mesma versão:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.demoiselle.jee</groupId>
            <artifactId>demoiselle-parent-bom</artifactId>
            <version>4.1.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.demoiselle.jee</groupId>
        <artifactId>demoiselle-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.demoiselle.jee</groupId>
        <artifactId>demoiselle-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.demoiselle.jee</groupId>
        <artifactId>demoiselle-crud</artifactId>
    </dependency>
</dependencies>

Snapshots exigem o repositório Sonatype OSS. Para detalhes de configuração, exemplos CRUD e segurança, consulte o guia completo.

Versão 4.1.0-SNAPSHOT

A versão 4 do Demoiselle Framework traz as seguintes mudanças principais:

  • Jakarta EE 10: Migração completa do namespace javax.* para jakarta.*
  • Java 21: baseline mínimo LTS, verificado pelo Maven Enforcer
  • CDI 4.0: Atualização para Jakarta Contexts and Dependency Injection 4.0
  • JUnit 5: Migração completa dos testes para JUnit Jupiter
  • OpenAPI 3.0: Substituição do Swagger 1.x por MicroProfile OpenAPI
  • GitHub Actions: Pipeline CI em Java 21 com build completo, cobertura e credenciais de checkout desabilitadas
  • Supply chain: plugins Maven com versões explícitas e SBOM agregado CycloneDX em JSON/XML
  • Remoção do WildFly Swarm: Framework agnóstico de runtime (compatível com WildFly 27+, Quarkus, Open Liberty)
  • Remoção do DeltaSpike: Substituído por implementação própria baseada em CDI 4.0

Modernização Jakarta EE 10

A versão 4 inclui modernizações que aproveitam plenamente Java 21 e Jakarta EE 10:

  • Records para DTOs imutáveis (SortModel, DemoiselleRestExceptionMessage, ResultSet)
  • Sealed Classes + Pattern Matching para filtros CRUD type-safe (FilterOp)
  • CDI 4.0 Lite Build-Compatible Extensions compatíveis com GraalVM native image
  • Coleções imutáveis com cópias defensivas via List.copyOf() / Map.copyOf()
  • Preparação para Virtual Threads com ReentrantReadWriteLock e eliminação de campos estáticos mutáveis
  • JPA 3.1 CriteriaUpdate type-safe e suporte a EntityGraph no AbstractDAO

Melhorias no Módulo CRUD

O módulo demoiselle-crud inclui funcionalidades modernas de persistência e proteção:

  • Soft Delete — exclusão lógica declarativa via @SoftDeletable com suporte a LocalDateTime, Boolean e Instant
  • Auditoria Automática — preenchimento automático de @CreatedAt, @UpdatedAt, @CreatedBy, @UpdatedBy via JPA EntityListener
  • Specification Pattern — composição declarativa de consultas JPA com and(), or(), not()
  • Operações em BatchpersistAll(), removeAll(), updateAll() com flush/clear automático
  • PageResult<T> — record imutável com metadados de paginação (totalPages, currentPage, hasNext, hasPrevious)
  • Operadores de Comparaçãogt:, lt:, gte:, lte:, between:, in: via query string
  • Cache de Consultas@Cacheable com invalidação automática via eventos CDI
  • Limites contra abuso — teto global de paginação, filtros, valores e campos de ordenação

📖 Documentação completa com exemplos

Segurança por padrão

  • Respostas REST incluem headers nosniff, DENY, no-referrer e uma Permissions-Policy conservadora sem sobrescrever valores definidos pela aplicação.
  • O header Demoiselle-Version fica oculto por padrão e pode ser reativado explicitamente.
  • JWT mantém o perfil compat como default e oferece recommended e strict para exigir iss, aud, typ, iat, jti, idade máxima e, no modo estrito, sub.
  • Algoritmos JWT continuam em allowlist (RS256 por padrão) e kid desconhecido é rejeitado.

Segurança e contratos operacionais

  • MCP fail-closed — sessões vinculadas ao principal, revalidação Bearer no POST, expiração, teto de sessões e rate limit de tools.
  • Rate limit e brute force atômicosSecurityStore com TTL/teto e forwarded headers confiáveis somente para proxies configurados.
  • HashCash mantido — módulo no reactor/BOM, desafio assinado e vinculado ao recurso, segredo obrigatório e proteção contra replay.
  • SPIs extensíveisJwtKeyProvider, CacheBackend e SecretProvider, com providers locais limitados e sem infraestrutura externa obrigatória.
  • Dados resilientes@Idempotent, Transactional Outbox após commit, cursor/keyset assinado e headers de lifecycle/depreciação.
  • Contratos seguros — separação entre Result e MutableResult e locking compartilhado por engine no módulo Script.

Consulte o guia de migração 4.1, o roadmap com status das entregas, o guia das extensões de produção — com benefícios e critérios de adoção para produtos Demoiselle — e o inventário dinâmico do reactor.

Módulo de Observabilidade (demoiselle-observability)

Módulo transversal com métricas, health checks e tracing distribuído:

  • @Counted — CDI interceptor que incrementa contadores MicroProfile Metrics automaticamente
  • @Traced — CDI interceptor que cria spans OpenTelemetry com atributos do módulo
  • Health Checks — Liveness (CDI ativo) e Readiness (configuração carregada, chaves JWT disponíveis)
  • Degradação Graceful — Quando MicroProfile Metrics, Health ou OpenTelemetry não estão no classpath, o módulo usa implementações noop sem erro

Módulo OpenAPI (demoiselle-openapi)

Geração automática de documentação OpenAPI para endpoints do framework:

  • OpenAPIContributor — Interface para módulos contribuírem definições OpenAPI parciais
  • DemoiselleOASModelReader — Agrega contribuições via CDI com tolerância a falhas
  • Configurável — Ativação/desativação via demoiselle.openapi.enabled

Módulo MCP (demoiselle-mcp)

Suporte a servidores MCP (Model Context Protocol) para integração com clientes de IA:

  • @McpTool — Expõe métodos CDI como ferramentas MCP com geração automática de JSON Schema
  • @McpResource — Expõe dados como recursos MCP (arquivos, configurações, registros)
  • @McpPrompt — Expõe templates de prompt MCP com argumentos tipados
  • Transporte SSE — Comunicação HTTP via Server-Sent Events (JAX-RS)
  • Transporte stdio — Comunicação local entre processos via stdin/stdout
  • Integrações opcionais — ProblemDetail (RFC 9457), JWT, PageResult, @RateLimit, @Counted
  • Degradação Graceful — Funciona com dependências mínimas (demoiselle-core + demoiselle-configuration)

Testes de Integração (demoiselle-integration-tests)

Módulo dedicado a testes de integração entre módulos:

  • ConfigSecurityRestIT — Fluxo completo configuração → segurança JWT → REST
  • ConfigScriptIT — Fluxo configuração → execução de scripts
  • Testes Baseados em Propriedades — Invariantes de segurança, configuração, CRUD e integração validados com jqwik

📖 Documentação completa com exemplos

O nome Demoiselle é uma homenagem à série de aeroplanos construídos por Santos Dummont entre 1907 e 1909. Também conhecido como Libellule, as Demoiselles foram os melhores, menores e mais baratos aviões da sua época. Como sua intenção era popularizar a aviação com fabricação em larga escala, o inventor disponibilizou os planos em revistas técnicas para qualquer pessoa que se interessasse.

O framework Demoiselle usa a mesma filosofia do "Pai da Aviação", tendo sido disponibilizado como software livre em abril de 2009, sob a licença livre LGPL version 3. Mais informações no portal.

Links úteis

Repositório Maven

Releases publicadas no Maven Central não exigem configuração adicional. Para usar versões SNAPSHOT, configure explicitamente o repositório Sonatype OSS:

<repository>
    <id>sonatype-oss-snapshots</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    <releases>
        <enabled>false</enabled>
    </releases>
    <snapshots>
        <enabled>true</enabled>
    </snapshots>
</repository>

Contribuindo

  1. Faça o seu fork.
  2. Crie o seu branch (ramo) - (git checkout -b meu_framework)
  3. Commit seu código (git commit -am "Explicando o motivo/objetivo")
  4. Agora execute o Push para o branch (git push origin meu_framework)
  5. Dúvidas, problemas ou sugestões? Crie uma issue no GitHub com o link para o seu branch

About

Repositório principal contendo o Core e Extensions: JPA, Security, WS

Topics

Resources

Security policy

Stars

134 stars

Watchers

36 watching

Forks

Releases

Packages

Used by

Contributors

Languages