153 lines
3.4 KiB
Markdown
153 lines
3.4 KiB
Markdown
# 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
|
|
<dependency>
|
|
<groupId>org.postgresql</groupId>
|
|
<artifactId>postgresql</artifactId>
|
|
<version>42.7.4</version>
|
|
</dependency>
|
|
```
|
|
|
|
### 🔄 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
|
|
<!-- Java 17+ com suporte a Unix Sockets -->
|
|
<properties>
|
|
<maven.compiler.source>17</maven.compiler.source>
|
|
<maven.compiler.target>17</maven.compiler.target>
|
|
</properties>
|
|
```
|
|
|
|
### 🔄 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.
|