rsanchez
2015-01-28 09f0f86d50933ea11eb3315e5728718e23d37dcf
securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java
....@@ -3,37 +3,41 @@
33 import java.io.IOException;
44 import java.lang.reflect.Method;
55
6
-import javax.inject.Inject;
7
-import javax.interceptor.AroundInvoke;
8
-import javax.interceptor.Interceptor;
6
+import javax.annotation.Priority;
97 import javax.interceptor.InvocationContext;
108 import javax.persistence.EntityManager;
9
+import javax.persistence.EntityManagerFactory;
10
+import javax.ws.rs.Priorities;
1111 import javax.ws.rs.container.ContainerRequestContext;
12
+import javax.ws.rs.container.ContainerRequestFilter;
1213 import javax.ws.rs.container.ContainerResponseContext;
14
+import javax.ws.rs.container.ContainerResponseFilter;
1315 import javax.ws.rs.core.Response.Status;
16
+import javax.ws.rs.ext.Provider;
1417
1518 import org.apache.logging.log4j.LogManager;
1619 import org.apache.logging.log4j.Logger;
1720 import org.jboss.resteasy.core.ResourceMethodInvoker;
1821 import org.jboss.resteasy.spi.ResteasyProviderFactory;
1922
20
-import com.google.inject.persist.Transactional;
21
-
22
-@Interceptor
23
-@MyTrans
24
-public class TransactionsManager {
23
+@Provider
24
+@Priority(Priorities.AUTHENTICATION)
25
+public class TransactionsManager implements ContainerRequestFilter, ContainerResponseFilter {
2526
2627 private static final Logger LOG = LogManager.getLogger(TransactionsManager.class);
2728
28
- @Inject
29
- private EntityManager em;
29
+ private EntityManagerFactory entityManagerFactory = javax.persistence.Persistence.createEntityManagerFactory("localdb");
30
+
31
+ private EntityManager getEM() {
32
+ return entityManagerFactory.createEntityManager();
33
+ }
3034
3135 // @Inject
3236 // private ThreadLocal<EntityManager> threadLocal;
3337
34
- @AroundInvoke
38
+ // @AroundInvoke
3539 public Object invoke(InvocationContext context) throws Exception {
36
- // EntityTransaction trx = manager.getTransaction();
40
+ EntityManager em = getEM();
3741 if (!em.getTransaction().isActive()) {
3842 em.getTransaction().begin();
3943 LOG.info("INIT trans");
....@@ -49,20 +53,30 @@
4953 return result;
5054 }
5155
56
+ @Override
5257 public void filter(ContainerRequestContext requestContext) throws IOException {
5358 ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext.getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
5459 Method method = methodInvoker.getMethod();
60
+ EntityManager em = getEM();
5561
56
- if (method.isAnnotationPresent(Transactional.class)) {
62
+ ResteasyProviderFactory.pushContext(EntityManager.class, em);
63
+
64
+ if (method.isAnnotationPresent(EnsureTransaction.class)) {
5765 LOG.info("WE need transaction!!!");
66
+
5867 em.getTransaction().begin();
5968 }
69
+ LOG.info("Sent to context, em: {}, {}?", em, method.toGenericString());
6070 }
6171
72
+ @Override
6273 public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
6374 // TODO Auto-generated method stub
75
+ // ResteasyProviderFactory.pushContext(EntityManager.class, em);
76
+ EntityManager em = (EntityManager) ResteasyProviderFactory.getContextData(EntityManager.class);
77
+ LOG.info("Operating on em: {}", em);
6478
65
- if (em.getTransaction().isActive()) {
79
+ if (em != null && em.getTransaction().isActive()) {
6680 LOG.info("There is transaction go ahead...");
6781 if (responseContext.getStatus() == Status.OK.getStatusCode()) {
6882 em.getTransaction().commit();