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 }