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/EnsureTransaction.java         |    2 
 securis/src/main/java/net/curisit/securis/RestServicesApplication.java       |   12 -
 securis/src/main/java/net/curisit/securis/services/ApiResource.java          |   14 +-
 securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java       |   63 +++++++++-
 securis/src/main/java/net/curisit/securis/db/common/SystemParams.java        |   52 +++++---
 securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java       |   42 ++++--
 securis/src/main/java/net/curisit/securis/services/BasicServices.java        |    4 
 securis/src/main/java/net/curisit/securis/services/ApplicationResource.java  |   10 
 securis/src/main/java/net/curisit/securis/services/PackResource.java         |   18 +-
 /dev/null                                                                    |   38 ------
 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java  |   10 
 securis/src/main/java/net/curisit/securis/services/UserResource.java         |   10 
 securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java            |    2 
 securis/src/main/java/net/curisit/securis/services/LicenseResource.java      |   22 +-
 securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java     |   21 +++
 securis/src/main/webapp/WEB-INF/beans.xml                                    |    2 
 securis/src/main/java/net/curisit/securis/services/OrganizationResource.java |    9 
 17 files changed, 192 insertions(+), 139 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/RestServicesApplication.java b/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
index ebe835b..7c898d0 100644
--- a/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
+++ b/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
@@ -3,13 +3,11 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import javax.inject.Inject;
 import javax.ws.rs.ApplicationPath;
 import javax.ws.rs.core.Application;
 
-import net.curisit.securis.ioc.DatabaseProvider;
+import net.curisit.securis.ioc.RequestsInterceptor;
 import net.curisit.securis.ioc.TransactionsManager;
-import net.curisit.securis.security.SecurityInterceptor;
 import net.curisit.securis.services.ApiResource;
 import net.curisit.securis.services.ApplicationResource;
 import net.curisit.securis.services.BasicServices;
@@ -27,9 +25,6 @@
 
     private static final Logger LOG = LogManager.getLogger(RestServicesApplication.class);
 
-    @Inject
-    private DatabaseProvider dp;
-
     @Override
     public Set<Class<?>> getClasses() {
         Set<Class<?>> classes = new HashSet<>();
@@ -42,11 +37,10 @@
         classes.add(OrganizationResource.class);
         classes.add(LicenseTypeResource.class);
         classes.add(PackResource.class);
-        classes.add(SecurityInterceptor.class);
+        classes.add(RequestsInterceptor.class);
         classes.add(TransactionsManager.class);
 
-        LOG.info("Returned   classes for services: {}", classes);
-        LOG.info("dp: {}", dp);
+        LOG.info("JAX-RS classes for services: {}", classes);
         return classes;
     }
 
diff --git a/securis/src/main/java/net/curisit/securis/dao/UserDao.java b/securis/src/main/java/net/curisit/securis/dao/UserDao.java
deleted file mode 100644
index 60729a1..0000000
--- a/securis/src/main/java/net/curisit/securis/dao/UserDao.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.curisit.securis.dao;
-
-import java.util.Arrays;
-import java.util.Date;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.inject.Provider;
-import javax.persistence.EntityManager;
-import javax.transaction.Transactional;
-
-import net.curisit.integrity.commons.Utils;
-import net.curisit.securis.db.User;
-
-@ApplicationScoped
-public class UserDao {
-
-    @Inject
-    public UserDao() {
-    }
-
-    @Inject
-    Provider<EntityManager> emProvider;
-
-    @Transactional
-    public User test(String username) {
-        EntityManager em = emProvider.get();
-        User user = new User();
-        user.setUsername(username);
-        user.setFirstName("Rob");
-        user.setPassword(Utils.sha256("rob"));
-        user.setLang("en");
-        user.setCreationTimestamp(new Date());
-        user.setRoles(Arrays.asList(User.Rol.ADMIN, User.Rol.ADVANCE));
-        user.setLastName("Sánchez");
-        em.persist(user);
-        User u2 = em.find(User.class, username);
-        return u2;
-    }
-
-}
diff --git a/securis/src/main/java/net/curisit/securis/db/common/SystemParams.java b/securis/src/main/java/net/curisit/securis/db/common/SystemParams.java
index 88899cd..ac97ba0 100644
--- a/securis/src/main/java/net/curisit/securis/db/common/SystemParams.java
+++ b/securis/src/main/java/net/curisit/securis/db/common/SystemParams.java
@@ -3,12 +3,12 @@
 import java.util.Date;
 
 import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
 import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.transaction.Transactional;
 
 import net.curisit.integrity.commons.Utils;
 import net.curisit.securis.db.Settings;
+import net.curisit.securis.ioc.EntityManagerProvider;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -19,8 +19,8 @@
     @SuppressWarnings("unused")
     private static final Logger LOG = LogManager.getLogger(SystemParams.class);
 
-    @PersistenceContext(unitName = "localdb")
-    private EntityManager em;
+    @Inject
+    private EntityManagerProvider emProvider;
 
     /**
      * Returns the system parameter value for given key
@@ -109,6 +109,7 @@
      * @return
      */
     public String getParam(String key, String defaultValue) {
+        EntityManager em = emProvider.getEntityManager();
         Settings p = em.find(Settings.class, key);
         return p == null ? defaultValue : p.getValue();
     }
@@ -120,19 +121,26 @@
      * @param defaultValue
      * @return
      */
-    @Transactional
     public void setParam(String key, String value) {
-        Settings p = em.find(Settings.class, key);
-        if (p == null) {
-            p = new Settings();
-            p.setKey(key);
-            p.setValue(value);
-            em.persist(p);
-        } else {
-            p.setValue(value);
-            em.merge(p);
+        EntityManager em = emProvider.getEntityManager();
+        em.getTransaction().begin();
+        try {
+            Settings p = em.find(Settings.class, key);
+
+            if (p == null) {
+                p = new Settings();
+                p.setKey(key);
+                p.setValue(value);
+                em.persist(p);
+            } else {
+                p.setValue(value);
+                em.merge(p);
+            }
+            em.flush();
+            em.getTransaction().commit();
+        } finally {
+            em.getTransaction().rollback();
         }
-        em.flush();
     }
 
     /**
@@ -181,11 +189,17 @@
      * @param key
      * @return
      */
-    @Transactional
     public void removeParam(String key) {
-        Settings p = em.find(Settings.class, key);
-        if (p != null) {
-            em.remove(p);
+        EntityManager em = emProvider.getEntityManager();
+        em.getTransaction().begin();
+        try {
+            Settings p = em.find(Settings.class, key);
+            if (p != null) {
+                em.remove(p);
+            }
+            em.getTransaction().commit();
+        } finally {
+            em.getTransaction().rollback();
         }
     }
 
diff --git a/securis/src/main/java/net/curisit/securis/ioc/DatabaseProvider.java b/securis/src/main/java/net/curisit/securis/ioc/DatabaseProvider.java
deleted file mode 100644
index cb1dfe7..0000000
--- a/securis/src/main/java/net/curisit/securis/ioc/DatabaseProvider.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.curisit.securis.ioc;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Default;
-import javax.enterprise.inject.Disposes;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-@ApplicationScoped
-public class DatabaseProvider {
-
-    private static final Logger LOG = LogManager.getLogger(DatabaseProvider.class);
-
-    @Inject
-    public DatabaseProvider() {
-        LOG.info("Contructor DatabaseProvider, emf: {}, em: {} ", entityManagerFactory, getEM());
-    }
-
-    private EntityManagerFactory entityManagerFactory = javax.persistence.Persistence.createEntityManagerFactory("localdb");
-
-    // EntityManagerFactory emfH2 =
-    // javax.persistence.Persistence.createEntityManagerFactory("localdb");
-    @Produces
-    private EntityManager getEM() {
-        return entityManagerFactory.createEntityManager();
-    }
-
-    public void dispose(@Disposes @Default EntityManager entityManager) {
-        if (entityManager.isOpen()) {
-            entityManager.close();
-        }
-    }
-}
diff --git a/securis/src/main/java/net/curisit/securis/ioc/MyTrans.java b/securis/src/main/java/net/curisit/securis/ioc/EnsureTransaction.java
similarity index 90%
rename from securis/src/main/java/net/curisit/securis/ioc/MyTrans.java
rename to securis/src/main/java/net/curisit/securis/ioc/EnsureTransaction.java
index 2bf6db9..017c46f 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/MyTrans.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/EnsureTransaction.java
@@ -12,6 +12,6 @@
 })
 @Retention(RetentionPolicy.RUNTIME)
 @InterceptorBinding
-public @interface MyTrans {
+public @interface EnsureTransaction {
 
 }
diff --git a/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java b/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java
new file mode 100644
index 0000000..e80c9b8
--- /dev/null
+++ b/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java
@@ -0,0 +1,21 @@
+package net.curisit.securis.ioc;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+@ApplicationScoped
+public class EntityManagerProvider {
+
+    private static final Logger LOG = LogManager.getLogger(EntityManagerProvider.class);
+
+    private final EntityManagerFactory entityManagerFactory = javax.persistence.Persistence.createEntityManagerFactory("localdb");
+
+    public EntityManager getEntityManager() {
+        return entityManagerFactory.createEntityManager();
+    }
+
+}
diff --git a/securis/src/main/java/net/curisit/securis/security/SecurityInterceptor.java b/securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
similarity index 64%
rename from securis/src/main/java/net/curisit/securis/security/SecurityInterceptor.java
rename to securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
index 3c02ac0..29e2278 100644
--- a/securis/src/main/java/net/curisit/securis/security/SecurityInterceptor.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
@@ -1,4 +1,4 @@
-package net.curisit.securis.security;
+package net.curisit.securis.ioc;
 
 import java.io.IOException;
 import java.lang.reflect.Method;
@@ -12,12 +12,17 @@
 import javax.ws.rs.Priorities;
 import javax.ws.rs.WebApplicationException;
 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.Context;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.ext.Provider;
 
 import net.curisit.securis.db.User;
+import net.curisit.securis.security.BasicSecurityContext;
+import net.curisit.securis.security.Securable;
 import net.curisit.securis.utils.CacheTTL;
 import net.curisit.securis.utils.TokenHelper;
 
@@ -32,8 +37,8 @@
 
 @Provider
 @Priority(Priorities.AUTHENTICATION)
-public class SecurityInterceptor implements javax.ws.rs.container.ContainerRequestFilter {
-    private static final Logger LOG = LogManager.getLogger(SecurityInterceptor.class);
+public class RequestsInterceptor implements ContainerRequestFilter, ContainerResponseFilter {
+    private static final Logger LOG = LogManager.getLogger(RequestsInterceptor.class);
 
     @Context
     private HttpServletRequest servletRequest;
@@ -48,23 +53,43 @@
     private Dispatcher dispatcher;
 
     @Inject
-    private EntityManager em;
+    private EntityManagerProvider emProvider;
 
     public void filter(ContainerRequestContext containerRequestContext) throws IOException {
+        EntityManager em = emProvider.getEntityManager();
+        ResteasyProviderFactory.pushContext(EntityManager.class, em);
 
         ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) containerRequestContext
                 .getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
         Method method = methodInvoker.getMethod();
 
+        LOG.info("Stored in context, em: {}, {}?", em, method.toGenericString());
+
+        boolean next = checkSecurableMethods(containerRequestContext, method);
+        if (next) {
+            prepareTransaction(containerRequestContext, method);
+        }
+    }
+
+    private void prepareTransaction(ContainerRequestContext containerRequestContext, Method method) {
+        EntityManager em = ResteasyProviderFactory.getContextData(EntityManager.class);
+
+        if (method.isAnnotationPresent(EnsureTransaction.class)) {
+            LOG.info("WE need transaction!!!");
+            em.getTransaction().begin();
+        }
+    }
+
+    private boolean checkSecurableMethods(ContainerRequestContext containerRequestContext, Method method) {
         if (!method.isAnnotationPresent(Securable.class)) {
-            return;
+            return true;
         }
         String token = servletRequest.getHeader(TokenHelper.TOKEN_HEADER_PÀRAM);
         if (token == null || !tokenHelper.isTokenValid(token)) {
             LOG.info("Access denied to '{}', Token not valid.", servletRequest.getPathInfo());
             containerRequestContext.abortWith(Response.status(Status.UNAUTHORIZED).build());
+            return false;
         } else {
-            Securable sec = method.getAnnotation(Securable.class);
 
             // If roles == 0 we only need to validate the token
             String username = tokenHelper.extractUserFromToken(token);
@@ -76,15 +101,18 @@
             containerRequestContext.setSecurityContext(scw);
             // Next line provide injection in resource methods
             ResteasyProviderFactory.pushContext(BasicSecurityContext.class, scw);
-            ResteasyProviderFactory.pushContext(EntityManager.class, em);
             LOG.debug("Added custom SecurityContext for user {}, orgs: {}", username, orgs);
         }
+        return true;
+
     }
 
     private Set<Integer> getUserOrganizations(String username) {
         @SuppressWarnings("unchecked")
         Set<Integer> userOrgs = cache.get("orgs_" + username, Set.class);
         if (userOrgs == null) {
+            EntityManager em = ResteasyProviderFactory.getContextData(EntityManager.class);
+
             // Theorically this shouldn't be never null, but just in case...
             User user = em.find(User.class, username);
             if (user != null) {
@@ -103,6 +131,8 @@
         }
         Integer userRoles = cache.get("roles_" + username, Integer.class);
         if (userRoles == null) {
+            EntityManager em = ResteasyProviderFactory.getContextData(EntityManager.class);
+
             User user = em.find(User.class, username);
             if (user != null) {
                 userRoles = 0;
@@ -123,4 +153,23 @@
         return null;
     }
 
+    @Override
+    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
+        EntityManager em = ResteasyProviderFactory.getContextData(EntityManager.class);
+
+        if (em != null && em.getTransaction().isActive()) {
+            LOG.info("There is transaction go ahead...");
+            if (responseContext.getStatus() == Status.OK.getStatusCode()) {
+                em.getTransaction().commit();
+                LOG.info("COMMIT");
+            } else {
+                em.getTransaction().rollback();
+                LOG.info("ROLLBACK");
+            }
+        } else {
+            LOG.info("There is NO transaction");
+
+        }
+    }
+
 }
diff --git a/securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java b/securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java
index c42f6bf..611e5f2 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java
@@ -1,6 +1,5 @@
 package net.curisit.securis.ioc;
 
-import net.curisit.securis.security.SecurityInterceptor;
 import net.curisit.securis.services.ApiResource;
 import net.curisit.securis.services.ApplicationResource;
 import net.curisit.securis.services.BasicServices;
@@ -17,7 +16,6 @@
     @Override
     protected void configure() {
         // TODO: Make the bind using reflection dynamically
-        bind(SecurityInterceptor.class);
 
         bind(BasicServices.class);
         bind(UserResource.class);
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();
diff --git a/securis/src/main/java/net/curisit/securis/services/ApiResource.java b/securis/src/main/java/net/curisit/securis/services/ApiResource.java
index f725ad6..e831a91 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApiResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApiResource.java
@@ -6,7 +6,6 @@
 
 import javax.inject.Inject;
 import javax.persistence.EntityManager;
-import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -30,6 +29,7 @@
 import net.curisit.securis.db.LicenseStatus;
 import net.curisit.securis.db.Pack;
 import net.curisit.securis.db.User;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.services.exception.SeCurisServiceException;
@@ -61,7 +61,7 @@
     @Inject
     private LicenseHelper licenseHelper;
 
-    @Inject
+    @Context
     EntityManager em;
 
     @Inject
@@ -118,7 +118,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     public Response createFromRequest(RequestBean request, @HeaderParam(LicenseManager.HEADER_LICENSE_NAME_OR_REFERENCE) String nameOrReference,
             @HeaderParam(LicenseManager.HEADER_LICENSE_EMAIL) String userEmail) throws IOException, SeCurisServiceException, SeCurisException {
         LOG.info("Request to get license: {}", request);
@@ -144,7 +144,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     @SuppressWarnings("unchecked")
     public Response createFromRequestFile(MultipartFormDataInput mpfdi,
             @HeaderParam(LicenseManager.HEADER_LICENSE_NAME_OR_REFERENCE) String nameOrReference,
@@ -178,7 +178,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     public Response renewFromPreviousLicense(LicenseBean previousLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException,
             SeCurisException {
         LOG.info("Renew license: {}", previousLic);
@@ -216,7 +216,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     public Response validate(LicenseBean currentLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
         LOG.info("Validate license: {}", currentLic);
 
@@ -252,7 +252,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     @SuppressWarnings("unchecked")
     public Response renewFromLicenseFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException,
             SeCurisServiceException, SeCurisException {
diff --git a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
index a2c17cd..872dfa6 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
@@ -9,7 +9,6 @@
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
 import javax.servlet.http.HttpServletRequest;
-import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -29,6 +28,7 @@
 import net.curisit.securis.SeCurisException;
 import net.curisit.securis.db.Application;
 import net.curisit.securis.db.ApplicationMetadata;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.services.exception.SeCurisServiceException;
@@ -51,7 +51,7 @@
     @Inject
     TokenHelper tokenHelper;
 
-    @Inject
+    @Context
     EntityManager em;
 
     private static final Logger LOG = LogManager.getLogger(ApplicationResource.class);
@@ -131,7 +131,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response create(Application app, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
@@ -156,7 +156,7 @@
     @PUT
     @POST
     @Path("/{appid}")
-    @Transactional
+    @EnsureTransaction
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
@@ -204,7 +204,7 @@
 
     @DELETE
     @Path("/{appid}")
-    @Transactional
+    @EnsureTransaction
     @Produces({
         MediaType.APPLICATION_JSON
     })
diff --git a/securis/src/main/java/net/curisit/securis/services/BasicServices.java b/securis/src/main/java/net/curisit/securis/services/BasicServices.java
index 7f42cd5..1b7a494 100644
--- a/securis/src/main/java/net/curisit/securis/services/BasicServices.java
+++ b/securis/src/main/java/net/curisit/securis/services/BasicServices.java
@@ -6,7 +6,6 @@
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import javax.servlet.http.HttpServletRequest;
-import javax.transaction.Transactional;
 import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -22,6 +21,7 @@
 import javax.ws.rs.core.UriBuilder;
 
 import net.curisit.integrity.commons.Utils;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.utils.TokenHelper;
 
@@ -99,7 +99,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     public Response check(@HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token, @QueryParam("token") String token2) {
         if (token == null) {
             token = token2;
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
index 75e3fe2..b8494a6 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -9,7 +9,6 @@
 import javax.inject.Inject;
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
-import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.DefaultValue;
@@ -41,6 +40,7 @@
 import net.curisit.securis.db.Pack;
 import net.curisit.securis.db.PackStatus;
 import net.curisit.securis.db.User;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.services.exception.SeCurisServiceException;
@@ -81,7 +81,7 @@
     @Inject
     private LicenseHelper licenseHelper;
 
-    @Inject
+    @Context
     EntityManager em;
 
     @Inject
@@ -152,7 +152,7 @@
     @Produces({
         MediaType.APPLICATION_OCTET_STREAM
     })
-    @Transactional
+    @EnsureTransaction
     public Response download(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 
         // EntityManager em = emProvider.get();
@@ -185,7 +185,7 @@
     @POST
     @Path("/{licId}/activate")
     @Securable
-    @Transactional
+    @EnsureTransaction
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
@@ -233,7 +233,7 @@
     @POST
     @Path("/{licId}/send")
     @Securable
-    @Transactional
+    @EnsureTransaction
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
@@ -289,7 +289,7 @@
     @POST
     @Path("/{licId}/cancel")
     @Securable
-    @Transactional
+    @EnsureTransaction
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
@@ -340,7 +340,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     public Response create(License lic, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         // EntityManager em = emProvider.get();
 
@@ -462,7 +462,7 @@
     @POST
     @Path("/{licId}")
     @Securable
-    @Transactional
+    @EnsureTransaction
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
@@ -509,7 +509,7 @@
 
     @DELETE
     @Path("/{licId}")
-    @Transactional
+    @EnsureTransaction
     @Securable
     @Produces({
         MediaType.APPLICATION_JSON
@@ -541,7 +541,7 @@
 
     @POST
     @Path("/{licId}/block")
-    @Transactional
+    @EnsureTransaction
     @Securable
     @Produces({
         MediaType.APPLICATION_JSON
@@ -574,7 +574,7 @@
 
     @POST
     @Path("/{licId}/unblock")
-    @Transactional
+    @EnsureTransaction
     @Securable
     @Produces({
         MediaType.APPLICATION_JSON
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
index 480c91e..c1b8a39 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -9,7 +9,6 @@
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
 import javax.servlet.http.HttpServletRequest;
-import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -30,6 +29,7 @@
 import net.curisit.securis.db.Application;
 import net.curisit.securis.db.LicenseType;
 import net.curisit.securis.db.LicenseTypeMetadata;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.services.exception.SeCurisServiceException;
@@ -53,7 +53,7 @@
     @Inject
     TokenHelper tokenHelper;
 
-    @Inject
+    @Context
     EntityManager em;
 
     public LicenseTypeResource() {
@@ -114,7 +114,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response create(LicenseType lt, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
@@ -151,7 +151,7 @@
     @PUT
     @POST
     @Path("/{ltid}")
-    @Transactional
+    @EnsureTransaction
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
@@ -219,7 +219,7 @@
 
     @DELETE
     @Path("/{ltid}")
-    @Transactional
+    @EnsureTransaction
     @Produces({
         MediaType.APPLICATION_JSON
     })
diff --git a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
index 10a5f10..366bdcd 100644
--- a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
@@ -10,7 +10,6 @@
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
 import javax.servlet.http.HttpServletRequest;
-import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -30,7 +29,7 @@
 import net.curisit.securis.SeCurisException;
 import net.curisit.securis.db.Organization;
 import net.curisit.securis.db.User;
-import net.curisit.securis.ioc.MyTrans;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.utils.TokenHelper;
@@ -131,7 +130,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @MyTrans
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response create(Organization org) {
@@ -198,11 +197,11 @@
     @PUT
     @POST
     @Path("/{orgid}")
-    @Transactional
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
     })
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response modify(Organization org, @PathParam("orgid") String orgid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
@@ -244,7 +243,7 @@
 
     @DELETE
     @Path("/{orgid}")
-    @Transactional
+    @EnsureTransaction
     @Produces({
         MediaType.APPLICATION_JSON
     })
diff --git a/securis/src/main/java/net/curisit/securis/services/PackResource.java b/securis/src/main/java/net/curisit/securis/services/PackResource.java
index 9a5e7a5..558b5a4 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -9,7 +9,6 @@
 import javax.inject.Inject;
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
-import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.FormParam;
@@ -35,6 +34,7 @@
 import net.curisit.securis.db.PackMetadata;
 import net.curisit.securis.db.PackStatus;
 import net.curisit.securis.db.User;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.services.exception.SeCurisServiceException;
@@ -60,7 +60,7 @@
     @Inject
     TokenHelper tokenHelper;
 
-    @Inject
+    @Context
     EntityManager em;
 
     @Inject
@@ -143,7 +143,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     public Response create(Pack pack, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         LOG.info("Creating new pack");
         // EntityManager em = emProvider.get();
@@ -239,7 +239,7 @@
     @PUT
     @POST
     @Path("/{packId}")
-    @Transactional
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     @Consumes(MediaType.APPLICATION_JSON)
@@ -267,6 +267,8 @@
         currentPack.setCode(pack.getCode());
         currentPack.setComments(pack.getComments());
         currentPack.setNumLicenses(pack.getNumLicenses());
+        currentPack.setPreactivationValidPeriod(pack.getPreactivationValidPeriod());
+        currentPack.setRenewValidPeriod(pack.getRenewValidPeriod());
 
         Set<PackMetadata> newMD = pack.getMetadata();
         for (PackMetadata currentMd : currentPack.getMetadata()) {
@@ -294,7 +296,7 @@
 
     @POST
     @Path("/{packId}/activate")
-    @Transactional
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     @Consumes(MediaType.APPLICATION_JSON)
@@ -320,7 +322,7 @@
 
     @POST
     @Path("/{packId}/putonhold")
-    @Transactional
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     @Consumes(MediaType.APPLICATION_JSON)
@@ -346,7 +348,7 @@
 
     @POST
     @Path("/{packId}/cancel")
-    @Transactional
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     @Consumes(MediaType.APPLICATION_JSON)
@@ -393,7 +395,7 @@
     @Path("/{packId}")
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
-    @Transactional
+    @EnsureTransaction
     @Produces({
         MediaType.APPLICATION_JSON
     })
diff --git a/securis/src/main/java/net/curisit/securis/services/UserResource.java b/securis/src/main/java/net/curisit/securis/services/UserResource.java
index 2bbc7d2..058289b 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -12,7 +12,6 @@
 import javax.persistence.PersistenceException;
 import javax.persistence.TypedQuery;
 import javax.servlet.http.HttpServletRequest;
-import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.FormParam;
@@ -34,6 +33,7 @@
 import net.curisit.securis.SeCurisException;
 import net.curisit.securis.db.Organization;
 import net.curisit.securis.db.User;
+import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.services.exception.SeCurisServiceException;
@@ -55,7 +55,7 @@
     @Inject
     TokenHelper tokenHelper;
 
-    @Inject
+    @Context
     EntityManager em;
 
     private static final Logger LOG = LogManager.getLogger(UserResource.class);
@@ -120,7 +120,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @EnsureTransaction
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response create(User user, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
@@ -172,7 +172,7 @@
     @PUT
     @POST
     @Path("/{uid}")
-    @Transactional
+    @EnsureTransaction
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces({
         MediaType.APPLICATION_JSON
@@ -216,7 +216,7 @@
 
     @DELETE
     @Path("/{uid}")
-    @Transactional
+    @EnsureTransaction
     @Produces({
         MediaType.APPLICATION_JSON
     })
diff --git a/securis/src/main/webapp/WEB-INF/beans.xml b/securis/src/main/webapp/WEB-INF/beans.xml
index 1b91f7e..7b1fd28 100644
--- a/securis/src/main/webapp/WEB-INF/beans.xml
+++ b/securis/src/main/webapp/WEB-INF/beans.xml
@@ -1,7 +1,7 @@
 <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_1.xsd">
 <interceptors>
-        <class>net.curisit.securis.ioc.TransactionsManager</class>
+  <!--       <class>net.curisit.securis.ioc.TransactionsManager</class>  -->
     </interceptors>
 </beans>
  
\ No newline at end of file

--
Gitblit v1.3.2