📌 Pull Request — Implementação da Issue #54: Exceções e concorrência no capítulo 09 - #55
Merged
Merged
Conversation
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


🎯 Objetivo
Implementar os exemplos iniciais do capítulo 09 do projeto, com foco em exceções verificadas, exceções personalizadas, propagação de exceções e criação de threads em Java. A implementação também adiciona testes automatizados e uma tarefa Gradle específica para executar os testes do capítulo de forma isolada.
Issue relacionada: #54
🧱 Principais Alterações
Adição da tarefa
chapter09no Gradleoca.chapter09.*.oca-chapters.Implementação do exemplo
CEExampleRunnable.Thread.IOExceptioneInterruptedException).Thread.currentThread().interrupt().generateNewThread(Runnable)para centralizar a criação da thread.Criação da exceção personalizada
RecordExceptionException, caracterizando uma checked exception.Implementação da propagação em cascata com
Throwerthrow1() -> throw2() -> throw3() -> throw4().IOExceptiondos métodos inferiores para o método superior.throw4()e realiza o tratamento emcascading().Adição dos testes de
ExamplesTestIOExceptionporCEExample.RecordException.ThrowerlançamIOException.@Order.📁 Arquivos/áreas impactadas
build.gradlechapter09para execução isolada dos testes do capítulo.src/main/java/oca/chapter09/exceptions/example01/CEExample.javaRunnablee criação de threads.src/main/java/oca/chapter09/exceptions/example02/RecordException.javasrc/main/java/oca/chapter09/exceptions/example03/Thrower.javasrc/test/java/oca/chapter09/ExamplesTest.javadocs/prompt-issues-chapters.mdissue-54.md🧪 Testes
Foram adicionados testes JUnit 5 para os três exemplos do capítulo:
Thread.IOExceptionlançada pelo construtor deCEExample.RecordException.IOExceptionemthrow1(),throw2(),throw3()ethrow4().Para executar somente os testes do capítulo 09:
Para executar toda a suíte de testes:
./gradlew testOs testes não dependem de geração aleatória: os cenários utilizam comportamentos e exceções determinísticos.
🗂 Logs e artefatos
CEExamplecria threads temporárias para fins didáticos.✅ Checklist de revisão
📌 Exemplos e snippets
Criação de uma thread
Declaração de exceções verificadas
Propagação da exceção
ℹ️ Notas adicionais / Riscos
CEExampleinicia uma thread antes de lançarIOException. Portanto, mesmo quando a construção falha, a thread criada pode continuar executando.CEExampleenvolve esperas de cinco segundos e pode gerar threads durante a execução da suíte.SimpleDateFormatcomo estado compartilhado entre a thread principal e a thread criada. Como o exemplo é didático, esse comportamento representa o uso apresentado no capítulo, mas deve ser reavaliado caso o código seja reutilizado em produção.docs/prompt-issues-chapters.mdfoi criado, mas ainda não contém documentação adicional.Labels sugeridas:
enhancement,tests,chapter09Milestone sugerida:
Chapter09