# Componentes Reutilizáveis - Detalhes ## 1. Database Connection Pool ### 📍 Localização `src/main/java/com/mediamanager/database/DatabaseManager.java` ### 🎯 Objetivo Gerenciar pool de conexões PostgreSQL/Supabase com: - Padrão Singleton para instância única - Validação de conexão - Graceful shutdown - Thread-safe ### 💻 Exemplo de Uso ```java // Obter instância única DatabaseManager db = DatabaseManager.getInstance(); // Obter conexão Connection conn = db.getConnection(); // Usar conexão PreparedStatement stmt = conn.prepareStatement("SELECT * FROM media"); ResultSet rs = stmt.executeQuery(); // Fechar ao terminar db.close(); ``` ### 📦 Dependências Maven ```xml org.postgresql postgresql 42.7.4 ``` ### 🔄 Refatorações Aplicadas - Padrão Singleton para evitar múltiplas instâncias - Adição de graceful shutdown com hooks - Validação de conexão antes de retornar ### ♻️ Reutilizável em Qualquer projeto Java que precise conectar com PostgreSQL/Supabase --- ## 2. Unix Socket IPC Server ### 📍 Localização `src/main/java/com/mediamanager/ipc/IPCServer.java` ### 🎯 Objetivo Servidor IPC usando Unix Domain Sockets com: - Thread pool para múltiplos clientes - Graceful shutdown - Error handling robusto ### 💻 Exemplo de Uso ```java // Criar servidor IPCServer server = new IPCServer("/tmp/myapp.sock"); // Definir handler de mensagens server.setMessageHandler((client, message) -> { // Processar mensagem client.sendResponse("OK"); }); // Iniciar servidor server.start(); // Shutdown limpo server.shutdown(); ``` ### 📦 Dependências Maven ```xml 17 17 ``` ### 🔄 Refatorações Aplicadas - Implementação de thread pool (ExecutorService) - Graceful shutdown com timeout - Separação de concerns (server vs handler) ### ♻️ Reutilizável em Aplicações desktop que precisam comunicação IPC local eficiente --- ## 3. Graceful Shutdown Manager ### 📍 Localização `src/main/java/com/mediamanager/shutdown/` (ou integrado nos componentes) ### 🎯 Objetivo Garantir cleanup ordenado de recursos ao encerrar aplicação: - Database connections - Thread pools - File handles - Network sockets ### 💻 Exemplo de Uso ```java // Registrar shutdown hook Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.out.println("Shutting down gracefully..."); // Fechar recursos na ordem correta ipcServer.shutdown(); databaseManager.close(); System.out.println("Shutdown complete"); })); ``` ### 🔄 Refatorações Aplicadas - Centralização de shutdown logic - Ordenação de cleanup - Timeout handling ### ♻️ Reutilizável em Qualquer aplicação Java que precise gerenciar shutdown de múltiplos recursos --- ## Como Adaptar para Outro Projeto ### Passo 1: Copiar Código Navegue até o arquivo no repositório mediamanager-core e copie. ### Passo 2: Ajustar Package ```java // De: package com.mediamanager.database; // Para: package com.seuprojeto.database; ``` ### Passo 3: Configurar Ajuste variáveis de ambiente, paths, etc. conforme seu projeto. ### Passo 4: Testar Execute testes unitários para garantir funcionamento.