From 09f0f86d50933ea11eb3315e5728718e23d37dcf Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Wed, 28 Jan 2015 11:34:27 +0000
Subject: [PATCH] #2283 fix - Changed EntityManager injection to @Context

---
 securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java |   42 ++++++++++++++++++++++++++++--------------
 1 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java b/securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java
index b9f7276..33c43f0 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java
@@ -3,37 +3,41 @@
 import java.io.IOException;
 import java.lang.reflect.Method;
 
-import javax.inject.Inject;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
+import javax.annotation.Priority;
 import javax.interceptor.InvocationContext;
 import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.ws.rs.Priorities;
 import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
 import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
 import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.ext.Provider;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.jboss.resteasy.core.ResourceMethodInvoker;
 import org.jboss.resteasy.spi.ResteasyProviderFactory;
 
-import com.google.inject.persist.Transactional;
-
-@Interceptor
-@MyTrans
-public class TransactionsManager {
+@Provider
+@Priority(Priorities.AUTHENTICATION)
+public class TransactionsManager implements ContainerRequestFilter, ContainerResponseFilter {
 
     private static final Logger LOG = LogManager.getLogger(TransactionsManager.class);
 
-    @Inject
-    private EntityManager em;
+    private EntityManagerFactory entityManagerFactory = javax.persistence.Persistence.createEntityManagerFactory("localdb");
+
+    private EntityManager getEM() {
+        return entityManagerFactory.createEntityManager();
+    }
 
     // @Inject
     // private ThreadLocal<EntityManager> threadLocal;
 
-    @AroundInvoke
+    // @AroundInvoke
     public Object invoke(InvocationContext context) throws Exception {
-        // EntityTransaction trx = manager.getTransaction();
+        EntityManager em = getEM();
         if (!em.getTransaction().isActive()) {
             em.getTransaction().begin();
             LOG.info("INIT trans");
@@ -49,20 +53,30 @@
         return result;
     }
 
+    @Override
     public void filter(ContainerRequestContext requestContext) throws IOException {
         ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext.getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
         Method method = methodInvoker.getMethod();
+        EntityManager em = getEM();
 
-        if (method.isAnnotationPresent(Transactional.class)) {
+        ResteasyProviderFactory.pushContext(EntityManager.class, em);
+
+        if (method.isAnnotationPresent(EnsureTransaction.class)) {
             LOG.info("WE need transaction!!!");
+
             em.getTransaction().begin();
         }
+        LOG.info("Sent to context, em: {}, {}?", em, method.toGenericString());
     }
 
+    @Override
     public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
         // TODO Auto-generated method stub
+        // ResteasyProviderFactory.pushContext(EntityManager.class, em);
+        EntityManager em = (EntityManager) ResteasyProviderFactory.getContextData(EntityManager.class);
+        LOG.info("Operating on em: {}", em);
 
-        if (em.getTransaction().isActive()) {
+        if (em != null && em.getTransaction().isActive()) {
             LOG.info("There is transaction go ahead...");
             if (responseContext.getStatus() == Status.OK.getStatusCode()) {
                 em.getTransaction().commit();

--
Gitblit v1.3.2