Switch from `EntityManager` to `EntityManagerFactory` across repositories, managers, and services for improved resource management and thread safety.
This commit is contained in:
parent
32fff9c725
commit
f70c1e1d94
|
|
@ -60,7 +60,7 @@ public class MediaManagerApplication {
|
|||
default:
|
||||
}
|
||||
databaseManager.init();
|
||||
actionManager = new DelegateActionManager(databaseManager.getEntityManager());
|
||||
actionManager = new DelegateActionManager(databaseManager.getEntityManagerFactory());
|
||||
actionManager.start();
|
||||
ipcManager = new IPCManager(config,actionManager);
|
||||
ipcManager.init();
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.mediamanager.repository;
|
|||
|
||||
import com.mediamanager.model.Genre;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.EntityManagerFactory;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
|
|
@ -15,10 +16,10 @@ import java.util.Optional;
|
|||
public class GenreRepository {
|
||||
private static final Logger logger = LogManager.getLogger(GenreRepository.class);
|
||||
|
||||
private final EntityManager entityManager;
|
||||
private final EntityManagerFactory entityManagerFactory;
|
||||
|
||||
public GenreRepository(EntityManager entityManager) {
|
||||
this.entityManager = entityManager;
|
||||
public GenreRepository(EntityManagerFactory entityManagerFactory) {
|
||||
this.entityManagerFactory = entityManagerFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -26,16 +27,19 @@ public class GenreRepository {
|
|||
*/
|
||||
public Genre save(Genre genre) {
|
||||
logger.debug("Saving genre: {}", genre.getName());
|
||||
entityManager.getTransaction().begin();
|
||||
EntityManager em = entityManagerFactory.createEntityManager();
|
||||
em.getTransaction().begin();
|
||||
try {
|
||||
entityManager.persist(genre);
|
||||
entityManager.getTransaction().commit();
|
||||
em.persist(genre);
|
||||
em.getTransaction().commit();
|
||||
logger.debug("Genre saved with ID: {}", genre.getId());
|
||||
return genre;
|
||||
} catch (Exception e) {
|
||||
entityManager.getTransaction().rollback();
|
||||
em.getTransaction().rollback();
|
||||
logger.error("Error saving genre", e);
|
||||
throw e;
|
||||
} finally {
|
||||
if (em.isOpen()) em.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -44,9 +48,14 @@ public class GenreRepository {
|
|||
*/
|
||||
public List<Genre> findAll() {
|
||||
logger.debug("Finding all genres");
|
||||
return entityManager
|
||||
EntityManager em = entityManagerFactory.createEntityManager();
|
||||
try {
|
||||
return em
|
||||
.createQuery("SELECT g FROM Genre g ORDER BY g.name", Genre.class)
|
||||
.getResultList();
|
||||
} finally {
|
||||
if (em.isOpen()) em.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -54,8 +63,13 @@ public class GenreRepository {
|
|||
*/
|
||||
public Optional<Genre> findById(Integer id) {
|
||||
logger.debug("Finding genre by ID: {}", id);
|
||||
Genre genre = entityManager.find(Genre.class, id);
|
||||
EntityManager em = entityManagerFactory.createEntityManager();
|
||||
try {
|
||||
Genre genre = em.find(Genre.class, id);
|
||||
return Optional.ofNullable(genre);
|
||||
} finally {
|
||||
if (em.isOpen()) em.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -63,16 +77,19 @@ public class GenreRepository {
|
|||
*/
|
||||
public Genre update(Genre genre) {
|
||||
logger.debug("Updating genre ID: {}", genre.getId());
|
||||
entityManager.getTransaction().begin();
|
||||
EntityManager em = entityManagerFactory.createEntityManager();
|
||||
em.getTransaction().begin();
|
||||
try {
|
||||
Genre updated = entityManager.merge(genre);
|
||||
entityManager.getTransaction().commit();
|
||||
Genre updated = em.merge(genre);
|
||||
em.getTransaction().commit();
|
||||
logger.debug("Genre updated successfully");
|
||||
return updated;
|
||||
} catch (Exception e) {
|
||||
entityManager.getTransaction().rollback();
|
||||
em.getTransaction().rollback();
|
||||
logger.error("Error updating genre", e);
|
||||
throw e;
|
||||
} finally {
|
||||
if (em.isOpen()) em.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -81,21 +98,24 @@ public class GenreRepository {
|
|||
*/
|
||||
public boolean deleteById(Integer id) {
|
||||
logger.debug("Deleting genre by ID: {}", id);
|
||||
entityManager.getTransaction().begin();
|
||||
EntityManager em = entityManagerFactory.createEntityManager();
|
||||
em.getTransaction().begin();
|
||||
try {
|
||||
Genre genre = entityManager.find(Genre.class, id);
|
||||
Genre genre = em.find(Genre.class, id);
|
||||
if (genre == null) {
|
||||
entityManager.getTransaction().rollback();
|
||||
em.getTransaction().rollback();
|
||||
return false;
|
||||
}
|
||||
entityManager.remove(genre);
|
||||
entityManager.getTransaction().commit();
|
||||
em.remove(genre);
|
||||
em.getTransaction().commit();
|
||||
logger.debug("Genre deleted successfully");
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
entityManager.getTransaction().rollback();
|
||||
em.getTransaction().rollback();
|
||||
logger.error("Error deleting genre", e);
|
||||
throw e;
|
||||
} finally {
|
||||
if (em.isOpen()) em.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package com.mediamanager.service.database;
|
||||
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.EntityManagerFactory;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
|
@ -20,7 +19,6 @@ public abstract class DatabaseManager {
|
|||
protected Connection connection;
|
||||
protected String connectionUrl;
|
||||
protected EntityManagerFactory entityManagerFactory;
|
||||
protected EntityManager entityManager;
|
||||
protected static final Logger logger = LogManager.getLogger(DatabaseManager.class);
|
||||
|
||||
public DatabaseManager(Properties config) {
|
||||
|
|
@ -48,14 +46,6 @@ public abstract class DatabaseManager {
|
|||
}
|
||||
|
||||
public void close() {
|
||||
if (entityManager != null && entityManager.isOpen()) {
|
||||
try {
|
||||
entityManager.close();
|
||||
logger.info("EntityManager closed");
|
||||
} catch (Exception e) {
|
||||
logger.error("Error closing EntityManager: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
if (entityManagerFactory != null && entityManagerFactory.isOpen()) {
|
||||
try {
|
||||
entityManagerFactory.close();
|
||||
|
|
@ -138,7 +128,6 @@ public abstract class DatabaseManager {
|
|||
|
||||
try {
|
||||
entityManagerFactory = hibernateConfig.buildSessionFactory().unwrap(EntityManagerFactory.class);
|
||||
entityManager = entityManagerFactory.createEntityManager();
|
||||
} catch (Exception e) {
|
||||
logger.error("Failed to initialize Hibernate: {}", e.getMessage());
|
||||
throw new RuntimeException("Hibernate initialization failed", e);
|
||||
|
|
@ -147,7 +136,7 @@ public abstract class DatabaseManager {
|
|||
logger.info("Hibernate ORM initialized successfully");
|
||||
}
|
||||
|
||||
public EntityManager getEntityManager() {
|
||||
return entityManager;
|
||||
public EntityManagerFactory getEntityManagerFactory() {
|
||||
return entityManagerFactory;
|
||||
}
|
||||
}
|
||||
|
|
@ -8,7 +8,7 @@ import com.mediamanager.service.delegate.handler.EchoHandler;
|
|||
import com.mediamanager.service.delegate.handler.HeartbeatHandler;
|
||||
import com.mediamanager.service.delegate.handler.genre.*;
|
||||
import com.mediamanager.service.genre.GenreService;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.EntityManagerFactory;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
|
|
@ -19,13 +19,13 @@ public class DelegateActionManager {
|
|||
private static final Logger logger = LogManager.getLogger(DelegateActionManager.class);
|
||||
|
||||
private final Map<String, ActionHandler> handlerRegistry;
|
||||
private final EntityManager entityManager;
|
||||
private final EntityManagerFactory entityManagerFactory;
|
||||
private final GenreService genreService;
|
||||
|
||||
public DelegateActionManager(EntityManager entityManager) {
|
||||
this.entityManager = entityManager;
|
||||
public DelegateActionManager(EntityManagerFactory entityManagerFactory) {
|
||||
this.entityManagerFactory = entityManagerFactory;
|
||||
|
||||
GenreRepository genreRepository = new GenreRepository(entityManager);
|
||||
GenreRepository genreRepository = new GenreRepository(entityManagerFactory);
|
||||
this.genreService = new GenreService(genreRepository);
|
||||
logger.debug("DelegateActionManager created");
|
||||
this.handlerRegistry = new HashMap<>();
|
||||
|
|
|
|||
Loading…
Reference in New Issue