From da889d489da5d7fa8c71d9f21f24b1dc2e29d8e1 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Wed, 28 Jan 2015 08:53:21 +0000
Subject: [PATCH] #0 refactoring - Removing Google Guice by CDI standard

---
 securis/src/main/java/net/curisit/securis/RestServicesApplication.java        |   35 ++
 securis/src/main/java/net/curisit/securis/ioc/DatabaseProvider.java           |   38 +++
 securis/src/main/java/net/curisit/securis/services/ApiResource.java           |   12 
 securis/src/main/java/net/curisit/securis/db/common/SystemParams.java         |   17 
 securis/src/main/java/net/curisit/securis/services/ApplicationResource.java   |   16 
 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java   |   16 
 securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java |    4 
 securis/src/main/java/net/curisit/securis/utils/TokenHelper.java              |    4 
 securis/src/main/webapp/WEB-INF/web.xml                                       |   30 +-
 securis/src/main/java/net/curisit/securis/utils/CacheTTL.java                 |    4 
 securis/src/main/java/net/curisit/securis/services/LicenseResource.java       |   32 +-
 securis/src/main/webapp/WEB-INF/beans.xml                                     |    7 
 securis/src/main/java/net/curisit/securis/services/OrganizationResource.java  |   32 +-
 securis/src/main/java/net/curisit/securis/LicenseGenerator.java               |    4 
 securis/src/main/resources/META-INF/persistence.xml                           |   10 
 securis/src/main/java/net/curisit/securis/ioc/MyTrans.java                    |   17 +
 securis/src/main/java/net/curisit/securis/AuthFilter.java                     |    4 
 securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java        |   80 ++++++
 securis/src/main/java/net/curisit/securis/services/BasicServices.java         |    7 
 securis/src/main/java/net/curisit/securis/services/PackResource.java          |   24 -
 /dev/null                                                                     |  129 ----------
 securis/pom.xml                                                               |   42 ++-
 securis/src/main/java/net/curisit/securis/services/helpers/UserHelper.java    |    4 
 securis/src/main/java/net/curisit/securis/services/UserResource.java          |   30 +-
 securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java             |    9 
 securis/src/main/java/net/curisit/securis/ioc/SecurisModule.java              |   30 -
 securis/src/main/java/net/curisit/securis/utils/EmailManager.java             |    4 
 securis/src/main/java/net/curisit/securis/dao/UserDao.java                    |    7 
 securis/src/main/java/net/curisit/securis/security/SecurityInterceptor.java   |   21 
 29 files changed, 342 insertions(+), 327 deletions(-)

diff --git a/securis/pom.xml b/securis/pom.xml
index 49429f4..0f1f5ab 100644
--- a/securis/pom.xml
+++ b/securis/pom.xml
@@ -19,19 +19,24 @@
   	</dependency>
   	<dependency>
   		<groupId>org.jboss.resteasy</groupId>
-  		<artifactId>resteasy-guice</artifactId>
-  		<version>3.0.9.Final</version>
-  	</dependency>
-  	<dependency>
-  		<groupId>org.jboss.resteasy</groupId>
   		<artifactId>resteasy-multipart-provider</artifactId>
-  		<version>3.0.9.Final</version>
+  		<version>3.0.10.Final</version>
   	</dependency>
   	<dependency>
   		<groupId>org.jboss.resteasy</groupId>
   		<artifactId>resteasy-jaxrs</artifactId>
-  		<version>3.0.9.Final</version>
+  		<version>3.0.10.Final</version>
   	</dependency>
+<dependency>
+	<groupId>org.jboss.weld.servlet</groupId>
+	<artifactId>weld-servlet</artifactId>
+	<version>2.2.9.Final</version>
+</dependency>
+<dependency>
+    <groupId>org.jboss</groupId>
+    <artifactId>jandex</artifactId>
+    <version>1.2.2.Final</version>
+</dependency>
   	<dependency>
   		<groupId>net.curisit</groupId>
   		<artifactId>commons-curis</artifactId>
@@ -48,11 +53,6 @@
   		<version>1.0.4-SNAPSHOT</version>
   	</dependency>
   	<dependency>
-  		<groupId>org.hibernate</groupId>
-  		<artifactId>hibernate-c3p0</artifactId>
-  		<version>4.3.6.Final</version>
-  	</dependency>
-  	<dependency>
   		<groupId>org.apache.httpcomponents</groupId>
   		<artifactId>httpclient</artifactId>
   		<version>4.4-beta1</version>
@@ -65,12 +65,23 @@
   	<dependency>
   		<groupId>org.jboss.resteasy</groupId>
   		<artifactId>resteasy-jackson2-provider</artifactId>
-  		<version>3.0.9.Final</version>
+  		<version>3.0.10.Final</version>
   	</dependency>
   	<dependency>
   		<groupId>org.apache.logging.log4j</groupId>
   		<artifactId>log4j-web</artifactId>
   		<version>2.1</version>
+  	</dependency>
+  	<dependency>
+   <groupId>javax.enterprise</groupId>
+   <artifactId>cdi-api</artifactId>
+   <version>1.2</version>
+   <scope>provided</scope>
+</dependency>
+  	<dependency>
+  		<groupId>org.jboss.resteasy</groupId>
+  		<artifactId>resteasy-cdi</artifactId>
+  		<version>3.0.10.Final</version>
   	</dependency>
   </dependencies>
 	  <build>
@@ -117,6 +128,11 @@
       <url>http://archiva.curisit.net/archiva/repository/snapshots/</url>
       <layout>default</layout>
    </repository>
+       <repository>
+        <id>project.local</id>
+        <name>project</name>
+        <url>file:/opt/repo</url>
+    </repository>
    </repositories>
    
 </project>
\ No newline at end of file
diff --git a/securis/src/main/java/net/curisit/securis/AuthFilter.java b/securis/src/main/java/net/curisit/securis/AuthFilter.java
index 946f476..c5c3122 100644
--- a/securis/src/main/java/net/curisit/securis/AuthFilter.java
+++ b/securis/src/main/java/net/curisit/securis/AuthFilter.java
@@ -3,7 +3,7 @@
 import java.io.IOException;
 import java.security.Principal;
 
-import javax.inject.Singleton;
+import javax.enterprise.context.ApplicationScoped;
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -17,7 +17,7 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-@Singleton
+@ApplicationScoped
 @WebFilter(urlPatterns = "/*")
 public class AuthFilter implements Filter {
 
diff --git a/securis/src/main/java/net/curisit/securis/BootstrapListener.java b/securis/src/main/java/net/curisit/securis/BootstrapListener.java
deleted file mode 100644
index f5ccfa1..0000000
--- a/securis/src/main/java/net/curisit/securis/BootstrapListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.curisit.securis;
-
-import java.util.List;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-
-import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener;
-
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
-import com.google.inject.persist.jpa.JpaPersistModule;
-
-public class BootstrapListener extends GuiceResteasyBootstrapServletContextListener {
-
-    @Override
-    public void contextInitialized(ServletContextEvent event) {
-        try {
-            super.contextInitialized(event);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    protected List<Module> getModules(ServletContext context) {
-        List<Module> modules = (List<Module>) super.getModules(context);
-        modules.add(new JpaPersistModule("localdb"));
-        return modules;
-    }
-
-    @Override
-    public void withInjector(Injector injector) {
-        injector.getInstance(PersistService.class).start();
-    }
-
-}
diff --git a/securis/src/main/java/net/curisit/securis/LicenseGenerator.java b/securis/src/main/java/net/curisit/securis/LicenseGenerator.java
index cfba707..558599a 100644
--- a/securis/src/main/java/net/curisit/securis/LicenseGenerator.java
+++ b/securis/src/main/java/net/curisit/securis/LicenseGenerator.java
@@ -24,14 +24,12 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import com.google.inject.Singleton;
-
 /**
  * License generator and signer
  * 
  * @author roberto <roberto.sanchez@curisit.net>
  */
-@Singleton
+@javax.inject.Singleton
 public class LicenseGenerator {
 
     private static final Logger LOG = LogManager.getLogger(LicenseGenerator.class);
diff --git a/securis/src/main/java/net/curisit/securis/RestServicesApplication.java b/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
index ba95201..ebe835b 100644
--- a/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
+++ b/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
@@ -3,28 +3,51 @@
 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.integrity.commons.Utils;
+import net.curisit.securis.ioc.DatabaseProvider;
+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;
+import net.curisit.securis.services.LicenseResource;
+import net.curisit.securis.services.LicenseTypeResource;
+import net.curisit.securis.services.OrganizationResource;
+import net.curisit.securis.services.PackResource;
+import net.curisit.securis.services.UserResource;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+@ApplicationPath("/")
 public class RestServicesApplication extends Application {
 
     private static final Logger LOG = LogManager.getLogger(RestServicesApplication.class);
+
+    @Inject
+    private DatabaseProvider dp;
 
     @Override
     public Set<Class<?>> getClasses() {
         Set<Class<?>> classes = new HashSet<>();
         // classes.add(LicenseServices.class);
-        // classes.add(BasicServices.class);
+        classes.add(UserResource.class);
+        classes.add(ApiResource.class);
+        classes.add(LicenseResource.class);
+        classes.add(BasicServices.class);
+        classes.add(ApplicationResource.class);
+        classes.add(OrganizationResource.class);
+        classes.add(LicenseTypeResource.class);
+        classes.add(PackResource.class);
+        classes.add(SecurityInterceptor.class);
+        classes.add(TransactionsManager.class);
 
-        LOG.info("Returnes classes for services: {}", classes);
+        LOG.info("Returned   classes for services: {}", classes);
+        LOG.info("dp: {}", dp);
         return classes;
     }
 
-    public static void main(String[] args) {
-        System.out.println("sha256: " + Utils.sha256("jdoe"));
-    }
 }
diff --git a/securis/src/main/java/net/curisit/securis/dao/UserDao.java b/securis/src/main/java/net/curisit/securis/dao/UserDao.java
index 45ce5a6..60729a1 100644
--- a/securis/src/main/java/net/curisit/securis/dao/UserDao.java
+++ b/securis/src/main/java/net/curisit/securis/dao/UserDao.java
@@ -3,15 +3,16 @@
 import java.util.Arrays;
 import java.util.Date;
 
+import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import javax.inject.Provider;
-import javax.inject.Singleton;
 import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
 
 import net.curisit.integrity.commons.Utils;
 import net.curisit.securis.db.User;
 
-@Singleton
+@ApplicationScoped
 public class UserDao {
 
     @Inject
@@ -21,7 +22,7 @@
     @Inject
     Provider<EntityManager> emProvider;
 
-    @com.google.inject.persist.Transactional
+    @Transactional
     public User test(String username) {
         EntityManager em = emProvider.get();
         User user = new User();
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 a3c7f69..88899cd 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
@@ -2,9 +2,10 @@
 
 import java.util.Date;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
+import javax.enterprise.context.ApplicationScoped;
 import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.transaction.Transactional;
 
 import net.curisit.integrity.commons.Utils;
 import net.curisit.securis.db.Settings;
@@ -12,17 +13,14 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import com.google.inject.Provider;
-import com.google.inject.persist.Transactional;
-
-@Singleton
+@ApplicationScoped
 public class SystemParams {
 
     @SuppressWarnings("unused")
     private static final Logger LOG = LogManager.getLogger(SystemParams.class);
 
-    @Inject
-    private Provider<EntityManager> emp;
+    @PersistenceContext(unitName = "localdb")
+    private EntityManager em;
 
     /**
      * Returns the system parameter value for given key
@@ -111,7 +109,6 @@
      * @return
      */
     public String getParam(String key, String defaultValue) {
-        EntityManager em = emp.get();
         Settings p = em.find(Settings.class, key);
         return p == null ? defaultValue : p.getValue();
     }
@@ -125,7 +122,6 @@
      */
     @Transactional
     public void setParam(String key, String value) {
-        EntityManager em = this.emp.get();
         Settings p = em.find(Settings.class, key);
         if (p == null) {
             p = new Settings();
@@ -187,7 +183,6 @@
      */
     @Transactional
     public void removeParam(String key) {
-        EntityManager em = this.emp.get();
         Settings p = em.find(Settings.class, key);
         if (p != null) {
             em.remove(p);
diff --git a/securis/src/main/java/net/curisit/securis/ioc/DatabaseProvider.java b/securis/src/main/java/net/curisit/securis/ioc/DatabaseProvider.java
new file mode 100644
index 0000000..cb1dfe7
--- /dev/null
+++ b/securis/src/main/java/net/curisit/securis/ioc/DatabaseProvider.java
@@ -0,0 +1,38 @@
+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/MyTrans.java
new file mode 100644
index 0000000..2bf6db9
--- /dev/null
+++ b/securis/src/main/java/net/curisit/securis/ioc/MyTrans.java
@@ -0,0 +1,17 @@
+package net.curisit.securis.ioc;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+@Target({
+        ElementType.METHOD, ElementType.TYPE
+})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface MyTrans {
+
+}
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 cfa58b7..c42f6bf 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java
@@ -5,24 +5,21 @@
 import net.curisit.securis.services.ApplicationResource;
 import net.curisit.securis.services.BasicServices;
 import net.curisit.securis.services.LicenseResource;
-import net.curisit.securis.services.LicenseServices;
 import net.curisit.securis.services.LicenseTypeResource;
 import net.curisit.securis.services.OrganizationResource;
 import net.curisit.securis.services.PackResource;
 import net.curisit.securis.services.UserResource;
 
-import org.jboss.resteasy.plugins.guice.ext.RequestScopeModule;
+import com.google.inject.AbstractModule;
 
-public class RequestsModule extends RequestScopeModule {
+public class RequestsModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        super.configure();
         // TODO: Make the bind using reflection dynamically
         bind(SecurityInterceptor.class);
 
         bind(BasicServices.class);
-        bind(LicenseServices.class);
         bind(UserResource.class);
 
         bind(ApplicationResource.class);
@@ -31,7 +28,9 @@
         bind(ApiResource.class);
         bind(LicenseResource.class);
         bind(PackResource.class);
+
     }
+
     // @Provides
     // @RequestScoped
     // public User provideUser() {
diff --git a/securis/src/main/java/net/curisit/securis/ioc/SecurisModule.java b/securis/src/main/java/net/curisit/securis/ioc/SecurisModule.java
index 737da7c..52a50f6 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/SecurisModule.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/SecurisModule.java
@@ -7,15 +7,13 @@
 import java.util.List;
 import java.util.Properties;
 
+import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Named;
-import javax.inject.Singleton;
-import javax.sql.DataSource;
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriBuilderException;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.h2.jdbcx.JdbcDataSource;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
@@ -46,7 +44,7 @@
 
     @Named("base-uri")
     @Provides
-    @Singleton
+    @ApplicationScoped
     public URI getBaseURI() {
         // TODO Read from configuration, where?
         try {
@@ -81,7 +79,7 @@
 
     @Named("temporary-dir")
     @Provides
-    @Singleton
+    @ApplicationScoped
     public File getTemporaryDir() {
         String tmp = getAppDir().getAbsolutePath();
         tmp += File.separator + ".TEMP";
@@ -98,7 +96,7 @@
 
     @Named("app-dir")
     @Provides
-    @Singleton
+    @ApplicationScoped
     public File getAppDir() {
         String appDir = System.getProperty("user.home", System.getProperty("user.dir"));
         if (appDir == null) {
@@ -117,33 +115,21 @@
 
     @Named("support-email")
     @Provides
-    @Singleton
+    @ApplicationScoped
     public String getSupportEmail() {
-        return "integrity@curistec.com";
+        return "support@curisit.net";
     }
 
     @Named("hash-logo")
     @Provides
-    @Singleton
+    @ApplicationScoped
     public String getHashLogo() {
         return "1b42616809d4cd8ccf109e3c30d0ab25067f160b30b7354a08ddd563de0096ba";
     }
 
-    @Provides
-    @Singleton
-    public DataSource getDataSource(@Named("app-dir") File appDir) {
-
-        JdbcDataSource dataSource = new JdbcDataSource();
-        dataSource.setURL(getUrl(appDir));
-        dataSource.setUser("curis");
-        dataSource.setPassword(getPassword());
-        LOG.debug("JdbcDataSource: {}", dataSource);
-        return dataSource;
-    }
-
     @Named("db-files")
     @Provides
-    @Singleton
+    @ApplicationScoped
     public List<String> getDbFiles() {
         return getAppDbFiles();
     }
diff --git a/securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java b/securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java
new file mode 100644
index 0000000..b9f7276
--- /dev/null
+++ b/securis/src/main/java/net/curisit/securis/ioc/TransactionsManager.java
@@ -0,0 +1,80 @@
+package net.curisit.securis.ioc;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import javax.persistence.EntityManager;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.core.Response.Status;
+
+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 {
+
+    private static final Logger LOG = LogManager.getLogger(TransactionsManager.class);
+
+    @Inject
+    private EntityManager em;
+
+    // @Inject
+    // private ThreadLocal<EntityManager> threadLocal;
+
+    @AroundInvoke
+    public Object invoke(InvocationContext context) throws Exception {
+        // EntityTransaction trx = manager.getTransaction();
+        if (!em.getTransaction().isActive()) {
+            em.getTransaction().begin();
+            LOG.info("INIT trans");
+            ResteasyProviderFactory.pushContext(EntityManager.class, em);
+            Object result = context.proceed();
+
+            em.getTransaction().commit();
+            LOG.info("COMMIT trans");
+            return result;
+        }
+        LOG.info("No trans");
+        Object result = context.proceed();
+        return result;
+    }
+
+    public void filter(ContainerRequestContext requestContext) throws IOException {
+        ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext.getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
+        Method method = methodInvoker.getMethod();
+
+        if (method.isAnnotationPresent(Transactional.class)) {
+            LOG.info("WE need transaction!!!");
+            em.getTransaction().begin();
+        }
+    }
+
+    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
+        // TODO Auto-generated method stub
+
+        if (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/security/SecurityInterceptor.java b/securis/src/main/java/net/curisit/securis/security/SecurityInterceptor.java
index be14791..3c02ac0 100644
--- a/securis/src/main/java/net/curisit/securis/security/SecurityInterceptor.java
+++ b/securis/src/main/java/net/curisit/securis/security/SecurityInterceptor.java
@@ -31,27 +31,27 @@
 import org.jboss.resteasy.spi.ResteasyProviderFactory;
 
 @Provider
-// @PreMatching
 @Priority(Priorities.AUTHENTICATION)
 public class SecurityInterceptor implements javax.ws.rs.container.ContainerRequestFilter {
     private static final Logger LOG = LogManager.getLogger(SecurityInterceptor.class);
-
-    @Inject
-    private TokenHelper tokenHelper;
 
     @Context
     private HttpServletRequest servletRequest;
 
     @Inject
-    CacheTTL cache;
-
-    @Context
-    Dispatcher dispatcher;
+    private CacheTTL cache;
 
     @Inject
-    com.google.inject.Provider<EntityManager> emProvider;
+    private TokenHelper tokenHelper;
+
+    @Context
+    private Dispatcher dispatcher;
+
+    @Inject
+    private EntityManager em;
 
     public void filter(ContainerRequestContext containerRequestContext) throws IOException {
+
         ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) containerRequestContext
                 .getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
         Method method = methodInvoker.getMethod();
@@ -76,6 +76,7 @@
             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);
         }
     }
@@ -85,7 +86,6 @@
         Set<Integer> userOrgs = cache.get("orgs_" + username, Set.class);
         if (userOrgs == null) {
             // Theorically this shouldn't be never null, but just in case...
-            EntityManager em = emProvider.get();
             User user = em.find(User.class, username);
             if (user != null) {
                 userOrgs = user.getAllOrgsIds();
@@ -103,7 +103,6 @@
         }
         Integer userRoles = cache.get("roles_" + username, Integer.class);
         if (userRoles == null) {
-            EntityManager em = emProvider.get();
             User user = em.find(User.class, username);
             if (user != null) {
                 userRoles = 0;
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 032ec6f..f725ad6 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApiResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApiResource.java
@@ -5,8 +5,8 @@
 import java.util.List;
 
 import javax.inject.Inject;
-import javax.inject.Provider;
 import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -45,8 +45,6 @@
 import org.apache.logging.log4j.Logger;
 import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
 
-import com.google.inject.persist.Transactional;
-
 /**
  * External API to be accessed by third parties
  * 
@@ -64,7 +62,7 @@
     private LicenseHelper licenseHelper;
 
     @Inject
-    Provider<EntityManager> emProvider;
+    EntityManager em;
 
     @Inject
     LicenseGenerator licenseGenerator;
@@ -124,7 +122,7 @@
     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);
-        SignedLicenseBean lic = createLicense(request, emProvider.get(), false, nameOrReference, userEmail);
+        SignedLicenseBean lic = createLicense(request, em, false, nameOrReference, userEmail);
 
         return Response.ok(lic).build();
     }
@@ -189,7 +187,7 @@
             throw new SeCurisServiceException(ErrorCodes.LICENSE_NOT_READY_FOR_RENEW, "The license is still valid, not ready for renew");
         }
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = License.findLicenseByCode(previousLic.getLicenseCode(), em);
         if (lic.getStatus() != LicenseStatus.ACTIVE) {
             throw new SeCurisServiceException(ErrorCodes.LICENSE_NOT_READY_FOR_RENEW, "Only licenses with status 'Active' can be renew");
@@ -226,7 +224,7 @@
             throw new SeCurisServiceException(ErrorCodes.LICENSE_IS_EXPIRED, "The license is expired");
         }
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         try {
             SignatureHelper.getInstance().validateSignature(currentLic);
         } catch (SeCurisException ex) {
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 db7bf67..a2c17cd 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
@@ -6,10 +6,10 @@
 
 import javax.annotation.security.RolesAllowed;
 import javax.inject.Inject;
-import javax.inject.Provider;
 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;
@@ -39,8 +39,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import com.google.inject.persist.Transactional;
-
 /**
  * Application resource, this service will provide methods to create, modify and
  * delete applications
@@ -54,7 +52,7 @@
     TokenHelper tokenHelper;
 
     @Inject
-    Provider<EntityManager> emProvider;
+    EntityManager em;
 
     private static final Logger LOG = LogManager.getLogger(ApplicationResource.class);
 
@@ -74,7 +72,7 @@
     public Response index() {
         LOG.info("Getting applications list ");
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         TypedQuery<Application> q = em.createNamedQuery("list-applications", Application.class);
         List<Application> list = q.getResultList();
@@ -100,7 +98,7 @@
             return Response.status(Status.NOT_FOUND).build();
         }
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
 
         Application app = null;
@@ -138,7 +136,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response create(Application app, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
         LOG.info("Creating new application");
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         app.setCreationTimestamp(new Date());
         em.persist(app);
         LOG.info("App ID: {}", app.getId());
@@ -167,7 +165,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response modify(Application app, @PathParam("appid") String appid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
         LOG.info("Modifying application with id: {}", appid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         Application currentapp = em.find(Application.class, Integer.parseInt(appid));
         if (currentapp == null) {
             LOG.error("Application with id {} not found in DB", appid);
@@ -214,7 +212,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response delete(@PathParam("appid") String appid, @Context HttpServletRequest request) {
         LOG.info("Deleting app with id: {}", appid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         Application app = em.find(Application.class, Integer.parseInt(appid));
         if (app == null) {
             LOG.error("Application with id {} can not be deleted, It was not found in DB", appid);
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 4500539..7f42cd5 100644
--- a/securis/src/main/java/net/curisit/securis/services/BasicServices.java
+++ b/securis/src/main/java/net/curisit/securis/services/BasicServices.java
@@ -3,9 +3,10 @@
 import java.net.URI;
 import java.util.Date;
 
+import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
-import javax.inject.Singleton;
 import javax.servlet.http.HttpServletRequest;
+import javax.transaction.Transactional;
 import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -27,15 +28,13 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import com.google.inject.persist.Transactional;
-
 /**
  * Basic services for login and basic app wrkflow
  * 
  * @author roberto <roberto.sanchez@curisit.net>
  */
 @Path("/")
-@Singleton
+@ApplicationScoped
 public class BasicServices {
 
     private static final Logger LOG = LogManager.getLogger(BasicServices.class);
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 46db766..75e3fe2 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -7,11 +7,9 @@
 import java.util.List;
 
 import javax.inject.Inject;
-import javax.inject.Provider;
 import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.SynchronizationType;
 import javax.persistence.TypedQuery;
+import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.DefaultValue;
@@ -62,7 +60,6 @@
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.inject.persist.Transactional;
 
 /**
  * License resource, this service will provide methods to create, modify and
@@ -85,10 +82,7 @@
     private LicenseHelper licenseHelper;
 
     @Inject
-    private Provider<EntityManager> emProvider;
-
-    @PersistenceContext(unitName = "localdb", synchronization = SynchronizationType.SYNCHRONIZED)
-    private EntityManager entityManager;
+    EntityManager em;
 
     @Inject
     private LicenseGenerator licenseGenerator;
@@ -106,7 +100,7 @@
     public Response index(@QueryParam("packId") Integer packId, @Context BasicSecurityContext bsc) {
         LOG.info("Getting licenses list ");
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
 
         if (!bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
@@ -141,7 +135,7 @@
     public Response get(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         LOG.info("Getting organization data for id: {}: ", licId);
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         License lic = getCurrentLicense(licId, bsc, em);
         return Response.ok(lic).build();
@@ -161,7 +155,7 @@
     @Transactional
     public Response download(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = getCurrentLicense(licId, bsc, em);
 
         if (lic.getLicenseData() == null) {
@@ -198,7 +192,7 @@
     })
     public Response activate(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = getCurrentLicense(licId, bsc, em);
 
         if (!License.Status.isActionValid(License.Action.ACTIVATION, lic.getStatus())) {
@@ -247,7 +241,7 @@
     public Response send(@PathParam("licId") Integer licId, @DefaultValue("false") @FormParam("add_cc") Boolean addCC,
             @Context BasicSecurityContext bsc) throws SeCurisServiceException, SeCurisException {
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = getCurrentLicense(licId, bsc, em);
         Application app = lic.getPack().getLicenseType().getApplication();
         File licFile = null;
@@ -303,7 +297,7 @@
     public Response cancel(@PathParam("licId") Integer licId, CancellationLicenseActionBean actionData, @Context BasicSecurityContext bsc)
             throws SeCurisServiceException {
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = getCurrentLicense(licId, bsc, em);
 
         if (!License.Status.isActionValid(License.Action.CANCEL, lic.getStatus())) {
@@ -348,7 +342,7 @@
     })
     @Transactional
     public Response create(License lic, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         if (checkIfCodeExists(lic.getCode(), em)) {
             throw new SeCurisServiceException(ErrorCodes.INVALID_DATA, "The license code is already used in an existing license");
@@ -476,7 +470,7 @@
     public Response modify(License lic, @PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         LOG.info("Modifying organization with id: {}", licId);
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         License currentLicense = getCurrentLicense(licId, bsc, em);
         currentLicense.setComments(lic.getComments());
@@ -522,7 +516,7 @@
     })
     public Response delete(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         LOG.info("Deleting license with id: {}", licId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = getCurrentLicense(licId, bsc, em);
 
         if (!License.Status.isActionValid(License.Action.DELETE, lic.getStatus())) {
@@ -554,7 +548,7 @@
     })
     public Response block(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         LOG.info("Blocking license with id: {}", licId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = getCurrentLicense(licId, bsc, em);
 
         if (!License.Status.isActionValid(License.Action.BLOCK, lic.getStatus())) {
@@ -587,7 +581,7 @@
     })
     public Response unblock(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         LOG.info("Unblocking license with id: {}", licId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         License lic = getCurrentLicense(licId, bsc, em);
 
         if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseServices.java b/securis/src/main/java/net/curisit/securis/services/LicenseServices.java
deleted file mode 100644
index 7e33e04..0000000
--- a/securis/src/main/java/net/curisit/securis/services/LicenseServices.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package net.curisit.securis.services;
-
-import java.io.IOException;
-import java.net.URI;
-import java.text.MessageFormat;
-
-import javax.inject.Named;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
-import org.jboss.resteasy.annotations.providers.multipart.PartType;
-
-// The Java class will be hosted at the URI path "/myresource"
-@Path("/test")
-public class LicenseServices {
-
-    private static final Logger LOG = LogManager.getLogger(LicenseServices.class);
-
-    private static final int DEFAULT_LICENSE_EXPIRATION = 365;
-    private static final String LICENSE_STRING = "CurisIntegrity Config Server v{0}.{1}";
-
-    @com.google.inject.Inject
-    @Named("base-uri")
-    private URI uri;
-
-    public LicenseServices() {
-
-    }
-
-    /**
-     * 
-     * @return the server version in format majorVersion.minorVersion
-     */
-    @GET
-    @Produces({
-        MediaType.TEXT_HTML
-    })
-    public Response index() {
-        try {
-            String index = IOUtils.toString(this.getClass().getResourceAsStream("/static/index.html"));
-            return Response.ok().entity(index).build();
-        } catch (IOException e) {
-            LOG.error("Error getting index.html", e);
-        }
-        return Response.ok().entity(MessageFormat.format(LICENSE_STRING, 0, 1)).build();
-    }
-
-    @GET
-    @Path("/dummy")
-    @Produces({
-        MediaType.TEXT_PLAIN
-    })
-    public Response dummy(@Context HttpServletRequest request) {
-        LOG.info("Request: " + request.getPathInfo());
-        return Response.ok().entity((uri == null)).build();
-    }
-
-    /**
-     * @return the version of the three entities that can be synchronized
-     *         (Users, DataSet and Settings)
-     */
-    @POST
-    @Path("/upload1")
-    @Consumes(MediaType.MULTIPART_FORM_DATA)
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    public Response testFile1(@MultipartForm FileUploadForm mfdi) {
-        LOG.info("FORM: texto: {}, file: {}", mfdi.getTexto(), new String(mfdi.getFile()));
-        return Response.ok("OK").build();
-    }
-
-//    @GET
-//    @Path("/current/{license}")
-//    @Produces({
-//        MediaType.APPLICATION_JSON
-//    })
-//    public ServiceResponse<ServerConfigVersions> testFile(@PathParam("license") String license,
-//            @DefaultValue("-1") @QueryParam("minorVersion") int minorVersion, @DefaultValue("-1") @QueryParam("majorVersion") int majorVersion) {
-//
-//        LOG.info("Called 'current' service with license: {}", license);
-//        ServiceResponse<ServerConfigVersions> response = new ServiceResponse<ServerConfigVersions>();
-//
-//        return response;
-//    }
-
-    public static class FileUploadForm {
-
-        @FormParam("file1")
-        @PartType("application/octet-stream")
-        private byte[] file;
-
-        @FormParam("texto1")
-        @PartType("text/plain")
-        private String texto;
-
-        public FileUploadForm() {
-        }
-
-        public byte[] getFile() {
-            return file;
-        }
-
-        public void setFile(byte[] file) {
-            this.file = file;
-        }
-
-        public void setTexto(final String texto) {
-            this.texto = texto;
-        }
-
-        public String getTexto() {
-            return texto;
-        }
-
-    }
-}
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 dd92706..480c91e 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -6,10 +6,10 @@
 
 import javax.annotation.security.RolesAllowed;
 import javax.inject.Inject;
-import javax.inject.Provider;
 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;
@@ -39,8 +39,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import com.google.inject.persist.Transactional;
-
 /**
  * LicenseType resource, this service will provide methods to create, modify and
  * delete license types
@@ -56,7 +54,7 @@
     TokenHelper tokenHelper;
 
     @Inject
-    Provider<EntityManager> emProvider;
+    EntityManager em;
 
     public LicenseTypeResource() {
     }
@@ -74,7 +72,7 @@
     public Response index() {
         LOG.info("Getting license types list ");
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         TypedQuery<LicenseType> q = em.createNamedQuery("list-license_types", LicenseType.class);
         List<LicenseType> list = q.getResultList();
@@ -100,7 +98,7 @@
             return Response.status(Status.NOT_FOUND).build();
         }
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         LicenseType lt = em.find(LicenseType.class, Integer.parseInt(ltid));
         if (lt == null) {
@@ -121,7 +119,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response create(LicenseType lt, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
         LOG.info("Creating new license type");
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         try {
             setApplication(lt, lt.getApplicationId(), em);
@@ -162,7 +160,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response modify(LicenseType lt, @PathParam("ltid") String ltid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
         LOG.info("Modifying license type with id: {}", ltid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         LicenseType currentlt = em.find(LicenseType.class, Integer.parseInt(ltid));
         if (currentlt == null) {
             LOG.error("LicenseType with id {} not found in DB", ltid);
@@ -229,7 +227,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response delete(@PathParam("ltid") String ltid, @Context HttpServletRequest request) {
         LOG.info("Deleting app with id: {}", ltid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         LicenseType app = em.find(LicenseType.class, Integer.parseInt(ltid));
         if (app == null) {
             LOG.error("LicenseType with id {} can not be deleted, It was not found in DB", ltid);
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 25a5b07..10a5f10 100644
--- a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
@@ -6,11 +6,11 @@
 import java.util.Set;
 
 import javax.annotation.security.RolesAllowed;
-import javax.inject.Inject;
-import javax.inject.Provider;
+import javax.enterprise.context.RequestScoped;
 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,14 +30,13 @@
 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.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-
-import com.google.inject.persist.Transactional;
 
 /**
  * Organization resource, this service will provide methods to create, modify
@@ -46,12 +45,16 @@
  * @author roberto <roberto.sanchez@curisit.net>
  */
 @Path("/organization")
+@RequestScoped
 public class OrganizationResource {
 
     private static final Logger LOG = LogManager.getLogger(OrganizationResource.class);
 
-    @Inject
-    private Provider<EntityManager> emProvider;
+    @Context
+    EntityManager em;
+
+    @Context
+    BasicSecurityContext bsc;
 
     public OrganizationResource() {
     }
@@ -66,10 +69,10 @@
         MediaType.APPLICATION_JSON
     })
     @Securable
-    public Response index(@Context BasicSecurityContext bsc) {
+    public Response index() {
         LOG.info("Getting organizations list ");
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         TypedQuery<Organization> q;
         if (bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
@@ -101,7 +104,7 @@
             return Response.status(Status.NOT_FOUND).build();
         }
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         Organization org = em.find(Organization.class, Integer.parseInt(orgid));
         if (org == null) {
@@ -128,12 +131,12 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    @Transactional
+    @MyTrans
     @Securable
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
-    public Response create(Organization org, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+    public Response create(Organization org) {
         LOG.info("Creating new organization");
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         try {
             this.setParentOrg(org, org.getParentOrgId(), em);
@@ -159,7 +162,6 @@
         org.setUsers(users);
         org.setCreationTimestamp(new Date());
         em.persist(org);
-
         return Response.ok(org).build();
     }
 
@@ -205,7 +207,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response modify(Organization org, @PathParam("orgid") String orgid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
         LOG.info("Modifying organization with id: {}", orgid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         Organization currentOrg = em.find(Organization.class, Integer.parseInt(orgid));
         if (currentOrg == null) {
             LOG.error("Organization with id {} not found in DB", orgid);
@@ -250,7 +252,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response delete(@PathParam("orgid") String orgid, @Context HttpServletRequest request) {
         LOG.info("Deleting organization with id: {}", orgid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         Organization org = em.find(Organization.class, Integer.parseInt(orgid));
         if (org == null) {
             LOG.error("Organization with id {} can not be deleted, It was not found in DB", orgid);
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 31840e5..9a5e7a5 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -7,9 +7,9 @@
 
 import javax.annotation.security.RolesAllowed;
 import javax.inject.Inject;
-import javax.inject.Provider;
 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;
@@ -46,8 +46,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import com.google.inject.persist.Transactional;
-
 /**
  * Pack resource, this service will provide methods to create, modify and delete
  * packs
@@ -63,7 +61,7 @@
     TokenHelper tokenHelper;
 
     @Inject
-    Provider<EntityManager> emProvider;
+    EntityManager em;
 
     @Inject
     private LicenseHelper licenseHelper;
@@ -81,7 +79,7 @@
     public Response index(@Context BasicSecurityContext bsc) {
         LOG.info("Getting packs list ");
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
 
         TypedQuery<Pack> q;
@@ -123,7 +121,7 @@
             return Response.status(Status.NOT_FOUND).build();
         }
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         Pack pack = em.find(Pack.class, packId);
         if (pack == null) {
@@ -148,7 +146,7 @@
     @Transactional
     public Response create(Pack pack, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         LOG.info("Creating new pack");
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         if (checkIfCodeExists(pack.getCode(), em)) {
             throw new SeCurisServiceException(ErrorCodes.INVALID_DATA, "The pack code is already used in an existing pack");
@@ -213,7 +211,7 @@
         MediaType.TEXT_PLAIN
     })
     public Response getCodeSuffix(@PathParam("packId") Integer packId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         if (packId == null) {
             throw new SeCurisServiceException(ErrorCodes.INVALID_DATA, "The pack code is mandatory");
@@ -250,7 +248,7 @@
     })
     public Response modify(Pack pack, @PathParam("packId") Integer packId) {
         LOG.info("Modifying pack with id: {}", packId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         Pack currentPack = em.find(Pack.class, packId);
 
         try {
@@ -305,7 +303,7 @@
     })
     public Response activate(@PathParam("packId") Integer packId) throws SeCurisServiceException {
         LOG.info("Activating pack with id: {}", packId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         Pack currentPack = em.find(Pack.class, packId);
 
@@ -331,7 +329,7 @@
     })
     public Response onhold(@PathParam("packId") Integer packId) throws SeCurisServiceException {
         LOG.info("Putting On hold pack with id: {}", packId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         Pack currentPack = em.find(Pack.class, packId);
 
@@ -358,7 +356,7 @@
     public Response cancel(@PathParam("packId") Integer packId, @FormParam("reason") String reason, @Context BasicSecurityContext bsc)
             throws SeCurisServiceException {
         LOG.info("Cancelling pack with id: {}", packId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
 
         Pack currentPack = em.find(Pack.class, packId);
 
@@ -401,7 +399,7 @@
     })
     public Response delete(@PathParam("packId") String packId) throws SeCurisServiceException {
         LOG.info("Deleting pack with id: {}", packId);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         Pack pack = em.find(Pack.class, Integer.parseInt(packId));
         if (pack == null) {
             LOG.error("Pack with id {} can not be deleted, It was not found in DB", packId);
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 3169039..2bbc7d2 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -6,12 +6,13 @@
 import java.util.Set;
 
 import javax.annotation.security.RolesAllowed;
+import javax.enterprise.context.RequestScoped;
 import javax.inject.Inject;
-import javax.inject.Provider;
 import javax.persistence.EntityManager;
 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;
@@ -35,12 +36,12 @@
 import net.curisit.securis.db.User;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
+import net.curisit.securis.services.exception.SeCurisServiceException;
+import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-
-import com.google.inject.persist.Transactional;
 
 /**
  * User resource
@@ -48,13 +49,14 @@
  * @author roberto <roberto.sanchez@curisit.net>
  */
 @Path("/user")
+@RequestScoped
 public class UserResource {
 
     @Inject
     TokenHelper tokenHelper;
 
     @Inject
-    Provider<EntityManager> emProvider;
+    EntityManager em;
 
     private static final Logger LOG = LogManager.getLogger(UserResource.class);
 
@@ -75,7 +77,7 @@
     public Response index() {
         LOG.info("Getting users list ");
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         TypedQuery<User> q = em.createNamedQuery("list-users", User.class);
 
@@ -102,7 +104,7 @@
             return Response.status(Status.NOT_FOUND).build();
         }
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         em.clear();
         User lt = em.find(User.class, uid);
         if (lt == null) {
@@ -123,7 +125,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response create(User user, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
         LOG.info("Creating new user");
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         User currentUser = em.find(User.class, user.getUsername());
         if (currentUser != null) {
             LOG.info("User with id {} was found in DB, we'll try to modify it", user.getUsername());
@@ -179,7 +181,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response modify(User user, @PathParam("uid") String uid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
         LOG.info("Modifying user with id: {}", uid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         User currentUser = em.find(User.class, uid);
         if (currentUser == null) {
             LOG.info("User with id {} not found in DB, we'll try to create it", uid);
@@ -222,7 +224,7 @@
     @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
     public Response delete(@PathParam("uid") String uid, @Context HttpServletRequest request) {
         LOG.info("Deleting app with id: {}", uid);
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         User app = em.find(User.class, uid);
         if (app == null) {
             LOG.error("User with id {} can not be deleted, It was not found in DB", uid);
@@ -238,23 +240,23 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
-    public Response login(@FormParam("username") String username, @FormParam("password") String password, @Context HttpServletRequest request) {
+    public Response login(@FormParam("username") String username, @FormParam("password") String password, @Context HttpServletRequest request)
+            throws SeCurisServiceException {
         LOG.info("index session: " + request.getSession());
         LOG.info("user: {}, pass: {}", username, password);
         LOG.info("is user in role: {} == {} ? ", "advance", request.isUserInRole("advance"));
         LOG.info("is user in role: {} == {} ? ", "admin", request.isUserInRole("admin"));
 
-        EntityManager em = emProvider.get();
+        // EntityManager em = emProvider.get();
         User user = em.find(User.class, username);
         if (user == null) {
             LOG.error("Inknown username {} used in login service", username);
-            return Response.status(Status.UNAUTHORIZED).build();
+            throw new SeCurisServiceException(ErrorCodes.UNAUTHORIZED_ACCESS, "Wrong credentials");
         }
         String securedPassword = Utils.sha256(password);
 
         if (securedPassword == null || !securedPassword.equals(user.getPassword())) {
-            // TODO: Code to test exception handling
-            return Response.status(Status.UNAUTHORIZED).build();
+            throw new SeCurisServiceException(ErrorCodes.UNAUTHORIZED_ACCESS, "Wrong credentials");
         }
         user.setLastLogin(new Date());
         em.getTransaction().begin();
diff --git a/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java b/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
index f927a78..039eb03 100644
--- a/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
+++ b/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
@@ -8,8 +8,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
-import javax.inject.Singleton;
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
 
@@ -28,7 +28,7 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-@Singleton
+@ApplicationScoped
 public class LicenseHelper {
 
     @SuppressWarnings("unused")
diff --git a/securis/src/main/java/net/curisit/securis/services/helpers/UserHelper.java b/securis/src/main/java/net/curisit/securis/services/helpers/UserHelper.java
index 5719764..9c8d00d 100644
--- a/securis/src/main/java/net/curisit/securis/services/helpers/UserHelper.java
+++ b/securis/src/main/java/net/curisit/securis/services/helpers/UserHelper.java
@@ -1,6 +1,6 @@
 package net.curisit.securis.services.helpers;
 
-import javax.inject.Singleton;
+import javax.enterprise.context.ApplicationScoped;
 import javax.persistence.EntityManager;
 import javax.ws.rs.core.Response.Status;
 
@@ -8,7 +8,7 @@
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.services.exception.SeCurisServiceException;
 
-@Singleton
+@ApplicationScoped
 public class UserHelper {
 
     public User getUser(BasicSecurityContext bsc, EntityManager em) throws SeCurisServiceException {
diff --git a/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java b/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java
index 9a2ebf1..f627602 100644
--- a/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java
+++ b/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java
@@ -6,8 +6,8 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -18,7 +18,7 @@
  * 
  * @author roberto <roberto.sanchez@curisit.net>
  */
-@Singleton
+@ApplicationScoped
 public class CacheTTL {
 
     private static final Logger LOG = LogManager.getLogger(CacheTTL.class);
diff --git a/securis/src/main/java/net/curisit/securis/utils/EmailManager.java b/securis/src/main/java/net/curisit/securis/utils/EmailManager.java
index faf2389..9fe04a2 100644
--- a/securis/src/main/java/net/curisit/securis/utils/EmailManager.java
+++ b/securis/src/main/java/net/curisit/securis/utils/EmailManager.java
@@ -14,7 +14,7 @@
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
-import javax.inject.Singleton;
+import javax.enterprise.context.ApplicationScoped;
 
 import net.curisit.securis.SeCurisException;
 import net.curisit.securis.services.exception.SeCurisServiceException;
@@ -45,7 +45,7 @@
  * 
  * @author roberto <roberto.sanchez@curisit.net>
  */
-@Singleton
+@ApplicationScoped
 public class EmailManager {
 
     private static final Logger LOG = LogManager.getLogger(EmailManager.class);
diff --git a/securis/src/main/java/net/curisit/securis/utils/TokenHelper.java b/securis/src/main/java/net/curisit/securis/utils/TokenHelper.java
index b3949c5..824dc51 100644
--- a/securis/src/main/java/net/curisit/securis/utils/TokenHelper.java
+++ b/securis/src/main/java/net/curisit/securis/utils/TokenHelper.java
@@ -7,8 +7,8 @@
 import java.security.NoSuchAlgorithmException;
 import java.util.Date;
 
+import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
 import net.curisit.integrity.commons.Utils;
 
@@ -17,7 +17,7 @@
 import org.apache.logging.log4j.Logger;
 import org.jboss.resteasy.util.Base64;
 
-@Singleton
+@ApplicationScoped
 public class TokenHelper {
 
     private static final Logger LOG = LogManager.getLogger(TokenHelper.class);
diff --git a/securis/src/main/resources/META-INF/persistence.xml b/securis/src/main/resources/META-INF/persistence.xml
index ca70532..5edb044 100644
--- a/securis/src/main/resources/META-INF/persistence.xml
+++ b/securis/src/main/resources/META-INF/persistence.xml
@@ -2,19 +2,15 @@
 <persistence version="2.0"
 	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-	<persistence-unit name="localdb" transaction-type="RESOURCE_LOCAL">
+	<persistence-unit name="localdb" >
 		<description>SeCuris LocalDB</description>
 		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+		<non-jta-data-source>java:comp/env/SeCurisDS</non-jta-data-source>
 		<shared-cache-mode>NONE</shared-cache-mode>
-		
-<!-- 		<jta-data-source>java:comp/env/jdbc/SeCurisDS</jta-data-source>
- -->
-		<!-- <class>net.curisit.securis.db.UserSettingsUnits</class> -->
-
 		<properties>
 			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.internal.NoCachingRegionFactory"/>
 			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
-			<property name="hibernate.connection.datasource" value="java:comp/env/jdbc/SeCurisDS" />
+	<!-- 		<property name="hibernate.connection.datasource" value="java:comp/env/jdbc/SeCurisDS" />  -->
 
  			<property name="hibernate.cache.use_second_level_cache" value="false" />
   <!-- 			<property name="hibernate.show_sql" value="true" />  --> 
diff --git a/securis/src/main/webapp/WEB-INF/beans.xml b/securis/src/main/webapp/WEB-INF/beans.xml
new file mode 100644
index 0000000..1b91f7e
--- /dev/null
+++ b/securis/src/main/webapp/WEB-INF/beans.xml
@@ -0,0 +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>
+    </interceptors>
+</beans>
+ 
\ No newline at end of file
diff --git a/securis/src/main/webapp/WEB-INF/web.xml b/securis/src/main/webapp/WEB-INF/web.xml
index e7acaaa..3456bee 100644
--- a/securis/src/main/webapp/WEB-INF/web.xml
+++ b/securis/src/main/webapp/WEB-INF/web.xml
@@ -29,10 +29,6 @@
 
 
     <context-param>
-        <param-name>resteasy.guice.modules</param-name>
-        <param-value>net.curisit.securis.ioc.SecurisModule,net.curisit.securis.ioc.RequestsModule</param-value>
-    </context-param>
-    <context-param>
         <param-name>resteasy.role.based.security</param-name>
         <param-value>true</param-value>
     </context-param>
@@ -40,27 +36,27 @@
         <param-name>resteasy.providers</param-name>
         <param-value>net.curisit.securis.DefaultExceptionHandler</param-value>
     </context-param>
+	<context-param>
+		<param-name>resteasy.injector.factory</param-name>
+		<param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
+	</context-param>
 
-	
+
 	<filter>
         <filter-name>Resteasy</filter-name>
         <filter-class>
             org.jboss.resteasy.plugins.server.servlet.FilterDispatcher
         </filter-class>
-
+        <init-param>
+            <param-name>javax.ws.rs.Application</param-name>
+            <param-value>net.curisit.securis.RestServicesApplication</param-value>
+        </init-param>
     </filter>
     
     <filter-mapping>
         <filter-name>Resteasy</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
-    
-
-     <listener>
-        <listener-class>
-        net.curisit.securis.BootstrapListener
-        </listener-class>
-    </listener>
 
 	<welcome-file-list>
 		<welcome-file>/index.jsp</welcome-file>
@@ -82,9 +78,13 @@
   </security-role>
 
 <resource-env-ref>
-    <resource-env-ref-name>jdbc/SeCurisDS</resource-env-ref-name>
+    <resource-env-ref-name>SeCurisDS</resource-env-ref-name>
     <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
-    <res-auth>Container</res-auth>    
+</resource-env-ref>
+
+<resource-env-ref>
+   <resource-env-ref-name>BeanManager</resource-env-ref-name>
+   <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
 </resource-env-ref>
 
 </web-app>
\ No newline at end of file

--
Gitblit v1.3.2