Foto de Cesar Schutz

Arquiteto de Solução

Cesar Schutz

Estudos de arquitetura e engenharia de software, organizados para consulta.

  • Arquitetura de sistemas
  • Sistemas distribuídos
  • Java e JVM
  • Engenharia de software
  • IA aplicada

Artigos recentes

25 artigos publicados

Arquitetura15 min

Bloqueio otimista e pessimista

Como impedir que gravações simultâneas se atropelem: detectar o conflito com uma coluna de versão ou evitá-lo travando a linha. Com SQL testado no PostgreSQL e Spring Data JPA, FOR UPDATE com NOWAIT e SKIP LOCKED, deadlocks, níveis de isolamento e o UPDATE condicional.

#Arquitetura#Banco de Dados#Concorrência

Java24 min

Virtual threads no Java 21: pinning e CLOSE_WAIT

Por que um serviço Java 21 com virtual threads congela sem erro no log: pinning por synchronized (Java 21 a 23, corrigido no Java 24 pela JEP 491), com CLOSE_WAIT como rastro. Carrier threads, thread dump, JFR e por que bulkhead e circuit breaker continuam necessários no Java 25.

#Java#Virtual Threads#Resiliência

Arquitetura9 min

Cobrança duplicada no retry

Por que consultar antes de gravar não impede que um retry cobre o cliente duas vezes, e como resolver com chave de idempotência, restrição única no banco e resposta guardada. Com SQL testado no PostgreSQL, a condição de corrida verifica-e-age, a entrega pelo menos uma vez e as alternativas de bloqueio.

#Arquitetura#Idempotência#Pagamentos

Java14 min

AOP no Spring — JDK Dynamic Proxy, CGLIB e aspects custom

Como o Spring aplica log, transação e métricas sem misturar esse código com a regra de negócio: o vocabulário de AOP, quando ele usa JDK Dynamic Proxy ou CGLIB (e por que o Spring Boot prefere CGLIB), a pegadinha da self-invocation e como escrever seu próprio aspect.

#Java#Spring#AOP

Java7 min

AopUtils.getTargetClass() — desembrulhando os proxies do Spring

Quando o Spring envolve um bean em um proxy, bean.getClass() devolve a classe do proxy, e leitura de anotações, logs e mapas por classe passam a falhar. Como AopUtils.getTargetClass() recupera a classe real e quando usar AopProxyUtils.ultimateTargetClass().

#Java#Spring#AOP

Java9 min

AtomicBoolean — o sinalizador thread-safe da parada graciosa

Por que um boolean comum pode nunca ser visto pela outra thread, quando volatile basta e por que preferir AtomicBoolean, e como ligar o shutdown hook do SIGTERM ao loop de um job sem deixar a JVM encerrar no meio de um lote.

#Java#Concorrência#Kubernetes