001 package org.sonar.jpa.session;
002
003 import org.sonar.api.database.DatabaseSession;
004
005 public class ThreadLocalDatabaseSessionFactory implements DatabaseSessionFactory {
006
007 private final ThreadLocal<JpaDatabaseSession> threadSession = new ThreadLocal<JpaDatabaseSession>();
008 private final DatabaseConnector connector;
009
010 public ThreadLocalDatabaseSessionFactory(DatabaseConnector connector) {
011 this.connector = connector;
012 }
013
014 public DatabaseSession getSession() {
015 JpaDatabaseSession session = threadSession.get();
016 if (session == null) {
017 session = new JpaDatabaseSession(connector);
018 session.start();
019 threadSession.set(session);
020 }
021 return session;
022 }
023
024 public void clear() {
025 JpaDatabaseSession session = threadSession.get();
026 if (session != null) {
027 session.stop();
028 }
029 threadSession.set(null);
030 }
031
032 public void stop() {
033 clear();
034 }
035 }