Changeset 2970
- Timestamp:
- 07/08/07 15:47:42 (5 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/java/org/sarugo/restlet/jpa/PersistenceRouter.java
r2963 r2970 27 27 import javax.persistence.Entity; 28 28 import javax.persistence.EntityManager; 29 import javax.persistence.EntityManagerFactory; 30 import javax.persistence.EntityTransaction; 29 31 30 32 import org.restlet.Context; … … 42 44 Map<String, ResourceInfo> resources; 43 45 44 EntityManager entityManager; 46 EntityManagerFactory entityManagerFactory; 47 48 ThreadLocal<EntityManager> entityManager; 45 49 46 50 public PersistenceRouter(Context context) { 47 51 super(context); 52 entityManager = new ThreadLocal<EntityManager>(); 48 53 resources = new TreeMap<String, ResourceInfo>(); 49 54 // Initialise templates - order matters, most -> least specific … … 85 90 } 86 91 87 public PersistenceRouter(Context context, EntityManager em) {92 public PersistenceRouter(Context context, EntityManagerFactory emf) { 88 93 this(context); 89 setEntityManager (em);94 setEntityManagerFactory(emf); 90 95 } 91 96 … … 132 137 } 133 138 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; 136 146 } 137 147 138 148 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; 140 155 } 141 156 142 157 @Override 143 158 public void handle(Request request, Response response) { 144 getEntityManager().getTransaction().begin(); 159 EntityTransaction t = getEntityManager().getTransaction(); 160 t.begin(); 145 161 try { 146 162 super.handle(request, response); 147 if (getEntityManager().getTransaction().isActive()) { 148 getEntityManager().getTransaction().commit(); 163 if (t.isActive()) { 164 getEntityManager().flush(); 165 t.commit(); 149 166 } 150 167 } catch (RuntimeException e) { 151 168 getLogger().log(Level.SEVERE, 152 169 "Unhandled exception caught, rolling back transaction.", e); 153 if ( getEntityManager().getTransaction().isActive()) {154 getEntityManager().getTransaction().rollback();170 if (t.isActive()) { 171 t.rollback(); 155 172 } 156 173 throw e; 157 174 } 175 entityManager.set(null); 158 176 } 159 177
