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