diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDAOBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..b59a80e197bd02352e14cfdd4cf0ad6c5a0ed456
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDAOBean.java
@@ -0,0 +1,52 @@
+package uy.edu.fing.tse.central.db.dao.role;
+
+import uy.edu.fing.tse.central.db.entity.Rol;
+import uy.edu.fing.tse.central.db.mapper.MyMapper;
+import uy.edu.fing.tse.dto.Role;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Stateless
+public class RoleDAOBean implements RoleDaoLocal {
+
+    @PersistenceContext(unitName = "central")
+    private EntityManager em;
+
+    @PostConstruct
+    void init() {
+        //Despues del constructor hace esto
+    }
+
+    @Override
+    public void create(Role elem) {
+        final var r = MyMapper.INSTANCE.convert(elem);
+        em.persist(r);
+        em.flush();
+    }
+
+    @Override
+    public Role find(String key) {
+        final var query = em.createNamedQuery("Rol.findByName", Rol.class);
+        query.setParameter("name", key);
+        final var r = query.getSingleResult();
+        return MyMapper.INSTANCE.convert(r);
+    }
+
+    @Override
+    public Role find(Long id) {
+        final var r = em.find(Rol.class, id);
+        return MyMapper.INSTANCE.convert(r);
+    }
+
+    @Override
+    public List<Role> findAll() {
+        final var query = em.createNamedQuery("Rol.findAll", Rol.class);
+        final List<Rol> r = query.getResultList();
+        return r.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDaoLocal.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDaoLocal.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc75847fe1169dc8be6b31f68c06353884c0d995
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDaoLocal.java
@@ -0,0 +1,11 @@
+package uy.edu.fing.tse.central.db.dao.role;
+
+import uy.edu.fing.tse.central.db.dao.GenericDao;
+import uy.edu.fing.tse.dto.Role;
+
+import javax.ejb.Local;
+
+@Local
+public interface RoleDaoLocal extends GenericDao<Role> {
+
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDAOBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..9da50e1a69f0b950a9d2fbb272f93fc3eefdb2cc
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDAOBean.java
@@ -0,0 +1,52 @@
+package uy.edu.fing.tse.central.db.dao.state;
+
+import uy.edu.fing.tse.central.db.entity.Estado;
+import uy.edu.fing.tse.central.db.mapper.MyMapper;
+import uy.edu.fing.tse.dto.State;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Stateless
+public class StateDAOBean implements StateDaoLocal {
+
+    @PersistenceContext(unitName = "central")
+    private EntityManager em;
+
+    @PostConstruct
+    void init() {
+        //Despues del constructor hace esto
+    }
+
+    @Override
+    public void create(State elem) {
+        final var r = MyMapper.INSTANCE.convert(elem);
+        em.persist(r);
+        em.flush();
+    }
+
+    @Override
+    public State find(String key) {
+        final var query = em.createNamedQuery("Estado.findByValue", Estado.class);
+        query.setParameter("val", key);
+        final var r = query.getSingleResult();
+        return MyMapper.INSTANCE.convert(r);
+    }
+
+    @Override
+    public State find(Long id) {
+        final var e = em.find(Estado.class, id);
+        return MyMapper.INSTANCE.convert(e);
+    }
+
+    @Override
+    public List<State> findAll() {
+        final var query = em.createNamedQuery("Estado.findAll", Estado.class);
+        final List<Estado> r = query.getResultList();
+        return r.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDaoLocal.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDaoLocal.java
new file mode 100644
index 0000000000000000000000000000000000000000..13ab723f16f7cc73541fea06e857b4211fefb3ed
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDaoLocal.java
@@ -0,0 +1,11 @@
+package uy.edu.fing.tse.central.db.dao.state;
+
+import uy.edu.fing.tse.central.db.dao.GenericDao;
+import uy.edu.fing.tse.dto.State;
+
+import javax.ejb.Local;
+
+@Local
+public interface StateDaoLocal extends GenericDao<State> {
+
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java
index fb1b5e10bc95b14116f397784cf3523ca95885ec..711f76afbdeb4163c4db1b7a59ae6e95c8c22592 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java
@@ -1,8 +1,11 @@
 package uy.edu.fing.tse.central.db.dao.user;
 
+import uy.edu.fing.tse.central.db.entity.Rol;
 import uy.edu.fing.tse.central.db.entity.Usuario;
 import uy.edu.fing.tse.central.db.mapper.MyMapper;
 import uy.edu.fing.tse.dto.User;
+import uy.edu.fing.tse.dto.UserBO;
+import uy.edu.fing.tse.dto.UserFO;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.Stateless;
@@ -25,11 +28,26 @@ public class UserDAOBean implements UserDaoLocal {
 
     @Override
     public void register(User user) {
+        if (user instanceof UserBO) _register((UserBO) user);
+        else _register((UserFO) user);
+    }
 
+    public void _register(UserFO user) {
         final var newUser = MyMapper.INSTANCE.convert(user);
         em.persist(newUser);
         em.flush();
+    }
+
+    private void _register(UserBO user) {
+        final var newUser = MyMapper.INSTANCE.convert(user);
 
+        final var query = em.createNamedQuery("Rol.findByName", Rol.class);
+        query.setParameter("name", user.getRole().getName());
+        final var r = query.getSingleResult();
+        newUser.setRole(r);
+
+        em.persist(newUser);
+        em.flush();
     }
 
     @Override
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java
index efd22ce88927f9c8576685c7be8570e4ed5467cf..213b1204b8738f0c07d0eac461aa980a94c675aa 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java
@@ -6,6 +6,10 @@ import javax.persistence.*;
  * Son los estados para los hechos, Nuevo, aComprobar, enProceso, Verificado, Publicado, Cancelado
  */
 @Entity
+@NamedQueries({
+        @NamedQuery(name = "Estado.findAll", query = "select e from Estado e"),
+        @NamedQuery(name = "Estado.findByValue", query = "select e from Estado e where e.value = :val")
+})
 public final class Estado {
 
     @Id
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java
index e795f10b334cfeb28aec684e512e58387f6f50b6..652720d942fe75dc7dcb39eeb42fa7d369946216 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java
@@ -13,7 +13,7 @@ import java.util.List;
 })
 public final class Periferico extends Mecanismo {
 
-    @ManyToMany //todo: verificar que funcione
+    @ManyToMany
     private List<Categoria> categories = new ArrayList<>();
 
     @Column(nullable = false)
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java
index 2eaa425a3649b864b3c5c54f969005a4cb032b1d..e9efedde16fd77cd355735d3d1c07f98e022ded4 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java
@@ -3,6 +3,10 @@ package uy.edu.fing.tse.central.db.entity;
 import javax.persistence.*;
 
 @Entity
+@NamedQueries({
+        @NamedQuery(name = "Rol.findAll", query = "select r from Rol r"),
+        @NamedQuery(name = "Rol.findByName", query = "select r from Rol r where r.name = :name")
+})
 public class Rol {
 
     @Id
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java
index 633e5beb8e91650aa0b7b49c1a3dfc393fc93e27..ccd799fb479b432714573ba7043eb00454f540ec 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java
@@ -51,6 +51,7 @@ public class TransicionEstado {
     }
 
     public void setFact(Hecho fact) {
+        fact.addHistory(this);
         this.fact = fact;
     }
 
diff --git a/central-db/src/test/resources/META-INF/test-persistence.xml b/central-db/src/test/resources/META-INF/test-persistence.xml
index 269e67bf4d1f110eb78f4530b31aefd187ee17ad..cbc38046111cf6aca6cd8f7824bb38e0a289bd5f 100644
--- a/central-db/src/test/resources/META-INF/test-persistence.xml
+++ b/central-db/src/test/resources/META-INF/test-persistence.xml
@@ -10,7 +10,7 @@
            database. Production applications should use a managed datasource. -->
         <!-- The datasource is deployed as WEB-INF/test-ds.xml,
            you can find it in the source at src/test/resources/test-ds.xml -->
-        <jta-data-source>java:jboss/datasources/practicoTestDS</jta-data-source>
+        <jta-data-source>java:jboss/datasources/testDS</jta-data-source>
         <properties>
             <!-- Properties for Hibernate -->
             <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
diff --git a/central-db/src/test/resources/test-ds.xml b/central-db/src/test/resources/test-ds.xml
index 9e633a31123e9f9d30550cda6368f73769b93ef1..a18d2f940796e538ad62f7485d6af0eee651847e 100644
--- a/central-db/src/test/resources/test-ds.xml
+++ b/central-db/src/test/resources/test-ds.xml
@@ -4,8 +4,8 @@
              xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
     <!-- The datasource is bound into JNDI at this location. We reference
        this in META-INF/test-persistence.xml -->
-    <datasource jndi-name="java:jboss/datasources/practicoTestDS"
-                pool-name="practico-test" enabled="true"
+    <datasource jndi-name="java:jboss/datasources/testDS"
+                pool-name="test" enabled="true"
                 use-java-context="true">
         <connection-url>jdbc:h2:mem:practico-test;DB_CLOSE_DELAY=-1</connection-url>
         <driver>h2</driver>
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java
index 91b69784a26688c81068cb1b2f1326ac56167c30..a168a3235f81032d1ac2e4ee6307fb6713b58086 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java
@@ -10,7 +10,6 @@ public final class StateHistory implements Serializable {
     private Long id;
     private State state;
     private User user;
-    private Fact fact;
     private Date date;
 
     public Long getId() {
@@ -37,14 +36,6 @@ public final class StateHistory implements Serializable {
         this.user = user;
     }
 
-    public Fact getFact() {
-        return fact;
-    }
-
-    public void setFact(Fact fact) {
-        this.fact = fact;
-    }
-
     public Date getDate() {
         return date;
     }
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
index 73b48b7ee7dc90b8cda08a8935aed0df8349e131..1092ee4f45a58a733873a578c55394fa9ef62c8d 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
@@ -1,9 +1,7 @@
 package uy.edu.fing.tse.central.business;
 
 
-import uy.edu.fing.tse.dto.CheckMechanism;
-import uy.edu.fing.tse.dto.Fact;
-import uy.edu.fing.tse.dto.Peripherical;
+import uy.edu.fing.tse.dto.*;
 
 import java.io.Serializable;
 import java.util.List;
@@ -15,5 +13,11 @@ public interface Business extends Serializable {
     void altaVerificacionMecanismo(CheckMechanism cm);
 
     List<Fact> listarHechos();
+
+    void altaHecho(Fact fact);
+
+    void altaRol(Role role);
+
+    void altaEstado(State state);
 }
 
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
index 01fd5884e4e9304598010a6dd068a19c3aa0cf7b..88af433d77fc0806630f58671e4ab94b850790d1 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
@@ -4,9 +4,10 @@ package uy.edu.fing.tse.central.business;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import uy.edu.fing.tse.central.db.dao.fact.FactDaoLocal;
-import uy.edu.fing.tse.dto.CheckMechanism;
-import uy.edu.fing.tse.dto.Fact;
-import uy.edu.fing.tse.dto.Peripherical;
+import uy.edu.fing.tse.central.db.dao.role.RoleDaoLocal;
+import uy.edu.fing.tse.central.db.dao.state.StateDaoLocal;
+import uy.edu.fing.tse.central.db.dao.user.UserDaoLocal;
+import uy.edu.fing.tse.dto.*;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
@@ -21,6 +22,12 @@ public class BusinessBean implements BusinessLocal, BusinessRemote {
 
     @EJB
     private FactDaoLocal hechos;
+    @EJB
+    private UserDaoLocal usuarios;
+    @EJB
+    private StateDaoLocal estados;
+    @EJB
+    private RoleDaoLocal roles;
 
     @PostConstruct
     void init() {
@@ -42,5 +49,21 @@ public class BusinessBean implements BusinessLocal, BusinessRemote {
         return hechos.findAll();
     }
 
+    @Override
+    public void altaHecho(Fact fact) {
+        hechos.create(fact);
+    }
+
+
+    @Override
+    public void altaEstado(State state) {
+        estados.create(state);
+    }
+
+    @Override
+    public void altaRol(Role role) {
+        roles.create(role);
+    }
+
 
 }
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java
index c22e493e5ad0d07a488797f2f6fa0a27f34b1907..87c37953ff89a108f97df1c084efff818f582a10 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java
@@ -11,13 +11,11 @@ import uy.edu.fing.tse.central.business.BusinessLocal;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.ejb.EJB;
-import javax.ejb.Singleton;
-import javax.ejb.Startup;
 import java.io.IOException;
 import java.util.concurrent.TimeoutException;
 
-@Singleton
-@Startup
+//@Singleton
+//@Startup
 public class MessageConsumer {
 
     private static final Logger LOG = LoggerFactory.getLogger(MessageConsumer.class);
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java
index db1b550d63cd303b720063cc1a2da48e378b8ac5..cc3b38efcb472dd9eda5546c54806d63625d509c 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java
@@ -6,11 +6,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.annotation.PostConstruct;
-import javax.ejb.Stateless;
 import java.io.IOException;
 import java.util.concurrent.TimeoutException;
 
-@Stateless
+//@Stateless
 public class MessageProducer {
 
     private static final Logger LOG = LoggerFactory.getLogger(MessageProducer.class);
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/startup/Config.java
similarity index 75%
rename from central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
rename to central-ejb/src/main/java/uy/edu/fing/tse/central/business/startup/Config.java
index 0616ecc878fbc7d5bd5cf74ee77b0d1d2ff46c53..93784719bfa039eb10b126e41293decdcecfc8ec 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/startup/Config.java
@@ -1,11 +1,8 @@
-package uy.edu.fing.tse.central.db.startup;
+package uy.edu.fing.tse.central.business.startup;
 
-import uy.edu.fing.tse.central.db.dao.fact.FactDaoLocal;
-import uy.edu.fing.tse.central.db.dao.user.UserDaoLocal;
-import uy.edu.fing.tse.dto.Fact;
-import uy.edu.fing.tse.dto.State;
-import uy.edu.fing.tse.dto.StateHistory;
-import uy.edu.fing.tse.dto.UserBO;
+import uy.edu.fing.tse.central.business.BusinessLocal;
+import uy.edu.fing.tse.central.business.security.SecurityLocal;
+import uy.edu.fing.tse.dto.*;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -19,23 +16,60 @@ import java.util.Date;
 public class Config {
 
     @EJB
-    private FactDaoLocal hechos;
-    private UserDaoLocal users;
+    private BusinessLocal negocio;
+    @EJB
+    private SecurityLocal users;
 
     @PostConstruct
     public void start() {
-        initUser();
-        initFacts();
+        initRole();
+        //initUsers();
+        //initFacts();
     }
 
     @PreDestroy
     public void stop() {
     }
 
-    private void initUser() {
+    private void initRole() {
+        Role e = new Role();
+        e.setName("Admin");
+        negocio.altaRol(e);
+
+        e = new Role();
+        e.setName("Submiter");
+        negocio.altaRol(e);
+
+        e = new Role();
+        e.setName("Checker");
+        negocio.altaRol(e);
+    }
+
+    private void initUsers() {
         UserBO u = new UserBO();
         u.setPassword("admin");
         u.setMail("admin");
+        Role e = new Role();
+        e.setName("Admin");
+        u.setRole(e);
+        users.register(u);
+
+
+        u = new UserBO();
+        u.setPassword("checker");
+        u.setMail("checker");
+        e = new Role();
+        e.setName("Checker");
+        u.setRole(e);
+        users.register(u);
+
+
+        u = new UserBO();
+        u.setPassword("submiter");
+        u.setMail("submiter");
+        e = new Role();
+        e.setName("Submiter");
+        u.setRole(e);
         users.register(u);
     }
 
@@ -91,9 +125,9 @@ public class Config {
             u.setPassword("admin");
             u.setMail("admin");
             sh.setUser(u);
-            sh.setFact(fact);
+            //sh.setFact(fact);
             fact.addHistory(sh);
-            hechos.create(fact);
+            negocio.altaHecho(fact);
         }
     }
 }