Changeset 2970

Show
Ignore:
Timestamp:
07/08/07 15:47:42 (5 years ago)
Author:
michael
Message:

Fix Entity Manager? management :)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/java/org/sarugo/restlet/jpa/PersistenceRouter.java

    r2963 r2970  
    2727import javax.persistence.Entity; 
    2828import javax.persistence.EntityManager; 
     29import javax.persistence.EntityManagerFactory; 
     30import javax.persistence.EntityTransaction; 
    2931 
    3032import org.restlet.Context; 
     
    4244        Map<String, ResourceInfo> resources; 
    4345 
    44         EntityManager entityManager; 
     46        EntityManagerFactory entityManagerFactory; 
     47 
     48        ThreadLocal<EntityManager> entityManager; 
    4549 
    4650        public PersistenceRouter(Context context) { 
    4751                super(context); 
     52                entityManager = new ThreadLocal<EntityManager>(); 
    4853                resources = new TreeMap<String, ResourceInfo>(); 
    4954                // Initialise templates - order matters, most -> least specific 
     
    8590        } 
    8691 
    87         public PersistenceRouter(Context context, EntityManager em) { 
     92        public PersistenceRouter(Context context, EntityManagerFactory emf) { 
    8893                this(context); 
    89                 setEntityManager(em); 
     94                setEntityManagerFactory(emf); 
    9095        } 
    9196 
     
    132137        } 
    133138 
    134         public void setEntityManager(EntityManager em) { 
    135                 this.entityManager = em; 
     139        public EntityManagerFactory getEntityManagerFactory() { 
     140                return entityManagerFactory; 
     141        } 
     142 
     143        public void setEntityManagerFactory( 
     144                        EntityManagerFactory entityManagerFactory) { 
     145                this.entityManagerFactory = entityManagerFactory; 
    136146        } 
    137147 
    138148        public EntityManager getEntityManager() { 
    139                 return entityManager; 
     149                EntityManager em = entityManager.get(); 
     150                if (em == null) { 
     151                        em = getEntityManagerFactory().createEntityManager(); 
     152                        entityManager.set(em); 
     153                } 
     154                return em; 
    140155        } 
    141156 
    142157        @Override 
    143158        public void handle(Request request, Response response) { 
    144                 getEntityManager().getTransaction().begin(); 
     159                EntityTransaction t = getEntityManager().getTransaction(); 
     160                t.begin(); 
    145161                try { 
    146162                        super.handle(request, response); 
    147                         if (getEntityManager().getTransaction().isActive()) { 
    148                                 getEntityManager().getTransaction().commit(); 
     163                        if (t.isActive()) { 
     164                                getEntityManager().flush(); 
     165                                t.commit(); 
    149166                        } 
    150167                } catch (RuntimeException e) { 
    151168                        getLogger().log(Level.SEVERE, 
    152169                                        "Unhandled exception caught, rolling back transaction.", e); 
    153                         if (getEntityManager().getTransaction().isActive()) { 
    154                                 getEntityManager().getTransaction().rollback(); 
     170                        if (t.isActive()) { 
     171                                t.rollback(); 
    155172                        } 
    156173                        throw e; 
    157174                } 
     175                entityManager.set(null); 
    158176        } 
    159177