Este projeto foi desenvolvido com o propósito de experimentar, explorar e demonstrar o uso prático e eficiente das novas funcionalidades introduzidas no Java 21. Através da resolução de problemas do mundo real, como processamento assíncrono de arquivos e manipulações geométricas avançadas, a aplicação serve como uma prova de conceito de como as atualizações da linguagem simplificam a escrita de código concorrente, reduzem a verbosidade e melhoram a manutenibilidade.
O projeto foi dividido em duas áreas principais de experimentação:
- Cálculo de Hashes (SHA-256): Capacidade de mapear diretórios e calcular concorrentemente o hash do conteúdo de arquivos de ponta a ponta.
- Alto Desempenho e Concorrência Escalável: Emprega a arquitetura de Virtual Threads (
Executors.newThreadPerTaskExecutor(Thread.ofVirtual()...)), lidando paralelamente com divisões de blocos em requisições de E/S de múltiplos arquivos sem os bloqueios e os altos custos de uso da "Platform Threads" convencionais ligadas ao núcleo do Sistema Operacional. - Gerenciamento de Escopo Assíncrono: Utiliza Semáforos concorrentes aliados a coleções assíncronas (
ConcurrentLinkedQueueeAtomicInteger) para orquestrar corretamente e limitar múltiplas leituras em IO simultâneas sem saturação de memória, além de agrupar o resultado computado fragmentado adequadamente.
- Reconhecimento de Formas Dinâmico: Utiliza Pattern Matching for
switcha fim de identificar de modo limpo e fluído qual o tipo da geometria que está sendo validada (Type Of); podendo calcular em tempo real características de formas como Círculos, Retângulos e diferenciar Triângulos entre Equiláteros, Isósceles ou Escalenos. - Cálculo e Análise Métrica: Processamento matemático para descobrir as distâncias entre pontos geográficos (num plano cartesiano de vetores), identificar área das superfícies geométricas e ângulos de interseção valendo-se da precisão e regras rigorosas através da classe
BigDecimal. - Coleções Eficientes: Emprego prático das Sequenced Collections recém criadas a partir das interfaces do Java 21, tornando muito mais lógico o ato de percorrer o conjunto com previsibilidade e acesso instantâneo das pontas dos dados através de métodos canônicos (tais como invocando
cartesianPoints.getFirst()e.getLast()).
Os códigos-fontes seguem uma organização altamente coesa direcionada por pacotes:
src/main/java/com/herculanoleo/entrypoint/: Concentra os executáveis centrais via linha de comando e classes principais para rodar testes manuais em processadores de arquivos e formas de acordo com o cenário almejado (FileEntrypoint,ShapeEntrypoint).models/: Detém as classes de domínio dos artefatos da aplicação (Pontos no plano representados por record/classes imutáveis, geometrias, tipos enum, abstrações para retornos processados e exceções de negócio personalizadas).processor/: O cerne funcional do projeto, onde residem os motores lógicos e onde o uso das novas features fica bem explícito:ProcessorFile.java: Encapsula a lógica agnóstica de conversão para Hashes e o uso massivo arquitetural em concorrência leve de Virtual Threads.ProcessorShape.java: Contém os cálculos complexos baseados em Pattern Matching sobre classes hierárquicas e interações diretas em coleções ordenadas.
A aplicação mantém a simplicidade em suas dependências do pom.xml, contando apenas com frameworks pontuais:
- Java 21 (JDK 21): Alicerce do projeto contemplando suporte completo ao compilador moderno, Virtual Threads (JEP 444), Pattern Matching (JEP 441) e Sequenced Collections (JEP 431).
- Apache Commons IO (v2.15.0) / Apache Commons Codec (v1.16.0): Utilitários padronizados para simplificarem operações rotineiras e manipulações complexas de Input/Output no sistema de diretórios assim como lidar com criptografia rápida de checksums (SHA-256).
- Lombok (v1.18.30): Facilita a definição de abstrações gerando boilerplate de baixo nível como logs
Log4j2, construtores e empacotadores da classe via anotação sem necessidade de verbosidade no arquivo final. - Log4j 2 Core (v2.21.1): Motor resiliente de logs transacionais para suportar e escrever traços sem atrasos bloqueantes dentro das threads em execução.
- Mockito e JUnit Jupiter (v5.6.0): Ecossistema maduro empregado no escopo de runtime de testes para execução da suíte visando certificar as matemáticas rigorosas dos processadores através de Testes Unitários.
O repositório e suas validações representam o estado da arte do quão fácil se tornou escalar rotinas outrora engessadas, garantindo legibilidade da orientação ao objeto usando recursos maduros oferecidos diretamente na sintaxe da própria linguagem.