diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-02-18 16:07:40 +0100 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-02-18 16:09:47 +0100 |
commit | 71e0f5c99ce17f4f9313689f8b2bb299f22e78fb (patch) | |
tree | ab056aa95dae4f32922beb548fef031e71ddda93 /sonar-core | |
parent | 6900f586ea8f30c0a5a35b299f7461bd1bc867ae (diff) | |
download | sonarqube-71e0f5c99ce17f4f9313689f8b2bb299f22e78fb.tar.gz sonarqube-71e0f5c99ce17f4f9313689f8b2bb299f22e78fb.zip |
SONAR-2965 Provide a way to close JPA session to avoid DB timeout
Session will now be closed before running maven goals and before sensors.
A new session will automatically be opened on next try to access DB.
Diffstat (limited to 'sonar-core')
-rw-r--r-- | sonar-core/src/main/java/org/sonar/jpa/session/JpaDatabaseSession.java | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/sonar-core/src/main/java/org/sonar/jpa/session/JpaDatabaseSession.java b/sonar-core/src/main/java/org/sonar/jpa/session/JpaDatabaseSession.java index 086ad0f5988..246ade1bf3d 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/session/JpaDatabaseSession.java +++ b/sonar-core/src/main/java/org/sonar/jpa/session/JpaDatabaseSession.java @@ -47,17 +47,25 @@ public class JpaDatabaseSession extends DatabaseSession { */ @Override public EntityManager getEntityManager() { + if (entityManager == null) { + entityManager = connector.createEntityManager(); + } return entityManager; } @Override public void start() { - entityManager = connector.createEntityManager(); + getEntityManager(); index = 0; } @Override public void stop() { + commitAndClose(); + } + + @Override + public void commitAndClose() { commit(); if (entityManager != null && entityManager.isOpen()) { entityManager.close(); @@ -67,14 +75,14 @@ public class JpaDatabaseSession extends DatabaseSession { @Override public void commit() { - if (entityManager != null && inTransaction) { - if (entityManager.isOpen()) { - if (entityManager.getTransaction().getRollbackOnly()) { - entityManager.getTransaction().rollback(); + if (inTransaction) { + if (getEntityManager().isOpen()) { + if (getEntityManager().getTransaction().getRollbackOnly()) { + getEntityManager().getTransaction().rollback(); } else { - entityManager.getTransaction().commit(); + getEntityManager().getTransaction().commit(); } - entityManager.clear(); + getEntityManager().clear(); index = 0; } inTransaction = false; @@ -83,8 +91,8 @@ public class JpaDatabaseSession extends DatabaseSession { @Override public void rollback() { - if (entityManager != null && inTransaction) { - entityManager.getTransaction().rollback(); + if (inTransaction) { + getEntityManager().getTransaction().rollback(); inTransaction = false; } } @@ -106,7 +114,7 @@ public class JpaDatabaseSession extends DatabaseSession { @Override public boolean contains(Object model) { startTransaction(); - return entityManager.contains(model); + return getEntityManager().contains(model); } @Override @@ -119,7 +127,7 @@ public class JpaDatabaseSession extends DatabaseSession { private void internalSave(Object model, boolean flushIfNeeded) { try { - entityManager.persist(model); + getEntityManager().persist(model); } catch (PersistenceException e) { /* * See http://jira.codehaus.org/browse/SONAR-2234 @@ -135,13 +143,13 @@ public class JpaDatabaseSession extends DatabaseSession { @Override public Object merge(Object model) { startTransaction(); - return entityManager.merge(model); + return getEntityManager().merge(model); } @Override public void remove(Object model) { startTransaction(); - entityManager.remove(model); + getEntityManager().remove(model); if (++index % BATCH_SIZE == 0) { commit(); } @@ -150,18 +158,18 @@ public class JpaDatabaseSession extends DatabaseSession { @Override public void removeWithoutFlush(Object model) { startTransaction(); - entityManager.remove(model); + getEntityManager().remove(model); } @Override public <T> T reattach(Class<T> entityClass, Object primaryKey) { startTransaction(); - return entityManager.getReference(entityClass, primaryKey); + return getEntityManager().getReference(entityClass, primaryKey); } private void startTransaction() { if (!inTransaction) { - entityManager.getTransaction().begin(); + getEntityManager().getTransaction().begin(); inTransaction = true; } } @@ -173,13 +181,13 @@ public class JpaDatabaseSession extends DatabaseSession { @Override public Query createQuery(String hql) { startTransaction(); - return entityManager.createQuery(hql); + return getEntityManager().createQuery(hql); } @Override public Query createNativeQuery(String sql) { startTransaction(); - return entityManager.createNativeQuery(sql); + return getEntityManager().createNativeQuery(sql); } /** |