From 69a7f00645329ec3180ce3d3c91f664160bf8c15 Mon Sep 17 00:00:00 2001
From: Falucho <german.faller@pcunix71.fing.edu.uy>
Date: Fri, 21 Jun 2019 02:37:29 -0300
Subject: [PATCH] Se trabaja en la integracion Con COlas de mensaje

---
 .../java/uy/edu/fing/tse/jsf/RequestBean.java |  2 +-
 .../java/uy/edu/fing/tse/jsp/MyServlet.java   |  2 +-
 .../java/uy/edu/fing/tse/dto/Category.java    |  6 +-
 .../uy/edu/fing/tse/dto/CheckChecker.java     |  6 +-
 .../uy/edu/fing/tse/dto/CheckMechanism.java   |  5 +-
 .../main/java/uy/edu/fing/tse/dto/Fact.java   |  5 +-
 .../java/uy/edu/fing/tse/dto/Mechanism.java   |  6 +-
 .../edu/fing/tse/dto/MechanismInternal.java   |  1 +
 .../uy/edu/fing/tse/dto/Peripherical.java     |  2 +
 .../main/java/uy/edu/fing/tse/dto/Role.java   |  6 +-
 .../main/java/uy/edu/fing/tse/dto/Score.java  |  6 +-
 .../main/java/uy/edu/fing/tse/dto/State.java  |  6 +-
 .../uy/edu/fing/tse/dto/StateHistory.java     |  5 +-
 .../main/java/uy/edu/fing/tse/dto/User.java   |  6 +-
 .../main/java/uy/edu/fing/tse/dto/UserBO.java |  2 +
 .../main/java/uy/edu/fing/tse/dto/UserFO.java |  1 +
 central-ejb/pom.xml                           | 11 +++
 central-ejb/src/main/java/.keep               |  0
 .../fing/tse/practico/business/Business.java  | 25 ++----
 .../tse/practico/business/BusinessBean.java   | 47 +----------
 .../practico/business/common/Propiedades.java | 79 +++++++++++++++++++
 .../practico/business/jms/AltaNoticiaMDB.java | 38 ---------
 .../practico/business/jms/JMSProducer.java    | 40 ----------
 .../practico/business/mq/MessageConsumer.java | 78 ++++++++++++++++++
 .../practico/business/mq/MessageProducer.java | 38 +++++++++
 .../fing/tse/practico/business/mq/Queue.java  | 21 +++++
 .../practico/business/mq/RabbitConfig.java    | 42 ++++++++++
 .../src/main/resources/central.properties     |  6 ++
 pom.xml                                       | 18 ++++-
 29 files changed, 353 insertions(+), 157 deletions(-)
 delete mode 100644 central-ejb/src/main/java/.keep
 create mode 100644 central-ejb/src/main/java/uy/edu/fing/tse/practico/business/common/Propiedades.java
 delete mode 100644 central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/AltaNoticiaMDB.java
 delete mode 100644 central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/JMSProducer.java
 create mode 100644 central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageConsumer.java
 create mode 100644 central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageProducer.java
 create mode 100644 central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/Queue.java
 create mode 100644 central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/RabbitConfig.java
 create mode 100644 central-ejb/src/main/resources/central.properties

diff --git a/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java b/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
index 8e0d118..b358919 100644
--- a/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
+++ b/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
@@ -19,7 +19,7 @@ public class RequestBean {
     private BusinessLocal negocio;
 
     @EJB
-    private uy.edu.fing.tse.practico.business.jms.JMSProducer jms;
+    private uy.edu.fing.tse.practico.business.mq.JMSProducer jms;
 
     @ManagedProperty(value = "#{Session}")
     private SessionBean session;
diff --git a/backoffice/src/main/java/uy/edu/fing/tse/jsp/MyServlet.java b/backoffice/src/main/java/uy/edu/fing/tse/jsp/MyServlet.java
index 44d8889..b117d3b 100644
--- a/backoffice/src/main/java/uy/edu/fing/tse/jsp/MyServlet.java
+++ b/backoffice/src/main/java/uy/edu/fing/tse/jsp/MyServlet.java
@@ -20,7 +20,7 @@ public class MyServlet extends HttpServlet {
     private BusinessLocal negocio;
 
     @EJB
-    private uy.edu.fing.tse.practico.business.jms.JMSProducer jms;
+    private uy.edu.fing.tse.practico.business.mq.JMSProducer jms;
 
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/Category.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/Category.java
index 194727b..5930e47 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/Category.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/Category.java
@@ -1,6 +1,10 @@
 package uy.edu.fing.tse.dto;
 
-public final class Category {
+import java.io.Serializable;
+
+public final class Category implements Serializable {
+
+    private static final long serialVersionUID = -317249293474531216L;
 
     private Long id;
     private String name;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckChecker.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckChecker.java
index 59d7463..b9ff4dc 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckChecker.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckChecker.java
@@ -1,6 +1,10 @@
 package uy.edu.fing.tse.dto;
 
-public final class CheckChecker {
+import java.io.Serializable;
+
+public final class CheckChecker implements Serializable {
+
+    private static final long serialVersionUID = 4798508172561834440L;
 
     private Long id;
     private UserBO checker;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckMechanism.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckMechanism.java
index 64c5a36..4f49403 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckMechanism.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/CheckMechanism.java
@@ -1,8 +1,11 @@
 package uy.edu.fing.tse.dto;
 
+import java.io.Serializable;
 import java.util.Date;
 
-public final class CheckMechanism {
+public final class CheckMechanism implements Serializable {
+
+    private static final long serialVersionUID = -5354719133598426738L;
 
     private Long id;
     private Peripherical peripheral;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/Fact.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/Fact.java
index 691ec0e..1fdf5af 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/Fact.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/Fact.java
@@ -1,9 +1,12 @@
 package uy.edu.fing.tse.dto;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
-public final class Fact {
+public final class Fact implements Serializable {
+
+    private static final long serialVersionUID = -6218807350324946355L;
 
     private Long id;
     private String title;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/Mechanism.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/Mechanism.java
index 65d5835..af2924f 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/Mechanism.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/Mechanism.java
@@ -1,6 +1,10 @@
 package uy.edu.fing.tse.dto;
 
-public class Mechanism {
+import java.io.Serializable;
+
+public class Mechanism implements Serializable {
+
+    private static final long serialVersionUID = 2443873705205432766L;
 
     private Long id;
     private String name;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/MechanismInternal.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/MechanismInternal.java
index 7f2b038..e685e54 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/MechanismInternal.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/MechanismInternal.java
@@ -3,4 +3,5 @@ package uy.edu.fing.tse.dto;
 
 public final class MechanismInternal extends Mechanism {
 
+    private static final long serialVersionUID = -8256891910168590447L;
 }
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/Peripherical.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/Peripherical.java
index 91003e0..f74e7a3 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/Peripherical.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/Peripherical.java
@@ -6,6 +6,8 @@ import java.util.List;
 
 public final class Peripherical extends Mechanism {
 
+    private static final long serialVersionUID = 3767463748206760371L;
+
     private List<Category> categories = new ArrayList<>();
     private String endpoint;
 
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/Role.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/Role.java
index 698980b..ff9c9a7 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/Role.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/Role.java
@@ -1,6 +1,10 @@
 package uy.edu.fing.tse.dto;
 
-public class Role {
+import java.io.Serializable;
+
+public class Role implements Serializable {
+
+    private static final long serialVersionUID = -1446670708639059343L;
 
     private Long id;
     private String name;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/Score.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/Score.java
index 770b8ac..5014f94 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/Score.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/Score.java
@@ -1,9 +1,13 @@
 package uy.edu.fing.tse.dto;
 
+import java.io.Serializable;
+
 /**
  * Esta es la que puede ser vergonzosa, verdad a media, verdad, falsa
  */
-public final class Score {
+public final class Score implements Serializable {
+
+    private static final long serialVersionUID = -5278506826296305357L;
 
     private Long id;
     private String value;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/State.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/State.java
index 483308d..97571a1 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/State.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/State.java
@@ -1,9 +1,13 @@
 package uy.edu.fing.tse.dto;
 
+import java.io.Serializable;
+
 /**
  * Son los estados para los hechos, Nuevo, aComprobar, enProceso, Verificado, Publicado, Cancelado
  */
-public final class State {
+public final class State implements Serializable {
+
+    private static final long serialVersionUID = 8369408999916591568L;
 
     private Long id;
     private String value;
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 9d7ed14..91b6978 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
@@ -1,8 +1,11 @@
 package uy.edu.fing.tse.dto;
 
+import java.io.Serializable;
 import java.util.Date;
 
-public final class StateHistory {
+public final class StateHistory implements Serializable {
+
+    private static final long serialVersionUID = 1032183705367730249L;
 
     private Long id;
     private State state;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/User.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/User.java
index 7d1445c..6078a45 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/User.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/User.java
@@ -1,6 +1,10 @@
 package uy.edu.fing.tse.dto;
 
-public abstract class User {
+import java.io.Serializable;
+
+public abstract class User implements Serializable {
+
+    private static final long serialVersionUID = -5501550545779779794L;
 
     private Long id;
     private String mail;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/UserBO.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/UserBO.java
index f378d47..8058ca4 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/UserBO.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/UserBO.java
@@ -3,6 +3,8 @@ package uy.edu.fing.tse.dto;
 
 public final class UserBO extends User {
 
+    private static final long serialVersionUID = -460563178765136315L;
+
     private String salt;
     private String password;
     private Role role;
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/UserFO.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/UserFO.java
index 933fc5e..6f82218 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/UserFO.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/UserFO.java
@@ -2,4 +2,5 @@ package uy.edu.fing.tse.dto;
 
 
 public final class UserFO extends User {
+    private static final long serialVersionUID = -7399690108581919726L;
 }
diff --git a/central-ejb/pom.xml b/central-ejb/pom.xml
index 9063b50..91f5fc6 100644
--- a/central-ejb/pom.xml
+++ b/central-ejb/pom.xml
@@ -83,6 +83,17 @@
             <type>pom</type>
         </dependency>
 
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.9.9</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.rabbitmq</groupId>
+            <artifactId>amqp-client</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/central-ejb/src/main/java/.keep b/central-ejb/src/main/java/.keep
deleted file mode 100644
index e69de29..0000000
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/Business.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/Business.java
index 8481131..3a650f5 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/Business.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/Business.java
@@ -1,28 +1,13 @@
 package uy.edu.fing.tse.practico.business;
 
-import uy.edu.fing.tse.dto.NoticiaDTO;
-import uy.edu.fing.tse.dto.PublicacionDTO;
 
-import java.util.List;
+import uy.edu.fing.tse.dto.CheckMechanism;
+import uy.edu.fing.tse.dto.Peripherical;
 
-/**
- * La Capa de Negocio deberá proveer funcionalidades para Agregar una Publicación a
- * una Noticia, Obtener Noticias, Obtener Publicaciones y Obtener las Publicaciones de
- * una Noticia.
- */
 public interface Business {
 
-    void add(NoticiaDTO noticia);
+    void altaPeriferico(Peripherical p);
 
-    void add(PublicacionDTO publicacion, NoticiaDTO noticia);
-
-    NoticiaDTO findNoticia(long idNoticia);
-
-    List<NoticiaDTO> getNoticias();
-
-    List<PublicacionDTO> getPublicaciones();
-
-    List<PublicacionDTO> getPublicaciones(final long idNoticia);
-
-    NoticiaDTO addPublicacionANoticia(final PublicacionDTO pub, final long idNoticia);
+    void altaVerificacionMecanismo(CheckMechanism cm);
 }
+
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/BusinessBean.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/BusinessBean.java
index fde79c4..b3d2c3f 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/BusinessBean.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/BusinessBean.java
@@ -1,19 +1,13 @@
 package uy.edu.fing.tse.practico.business;
 
 
-import uy.edu.fing.tse.dto.NoticiaDTO;
-import uy.edu.fing.tse.dto.PublicacionDTO;
+import uy.edu.fing.tse.dto.CheckMechanism;
+import uy.edu.fing.tse.dto.Peripherical;
 import uy.edu.fing.tse.practico.db.DataAccessBean;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.*;
-import java.util.List;
 
-/**
- * Se debe controlar que una noticia no tenga más de diez publicaciones. Esta
- * capa deberá implementarse con Stateless Session Beans que provean interfaces
- * remotas y locales
- */
 @Stateless
 @Local({BusinessLocal.class})
 @Remote({BusinessRemote.class})
@@ -29,45 +23,12 @@ public class BusinessBean implements BusinessLocal, BusinessRemote {
     }
 
     @Override
-    public void add(NoticiaDTO noticia) {
-        dataAccess.alta(noticia);
-    }
-
-    @Override
-    public void add(PublicacionDTO publicacion, NoticiaDTO noticia) {
-        noticia.getPublicaciones().add(publicacion);
-        dataAccess.alta(noticia);
-    }
+    public void altaPeriferico(Peripherical p) {
 
-    @Override
-    public NoticiaDTO findNoticia(final long idNoticia) {
-        return dataAccess.find(idNoticia);
-    }
-
-    @Override
-    public List<NoticiaDTO> getNoticias() {
-        return dataAccess.getNoticias();
     }
 
     @Override
-    public List<PublicacionDTO> getPublicaciones() {
-        return dataAccess.getPublicaciones();
-    }
-
-    @Override
-    public List<PublicacionDTO> getPublicaciones(final long idNoticia) {
-        return dataAccess.find(idNoticia).getPublicaciones();
-    }
-
-    @Override
-    public NoticiaDTO addPublicacionANoticia(final PublicacionDTO pub, final long idNoticia) {
-        NoticiaDTO noticiaDTO = dataAccess.find(idNoticia);
-
-        if (noticiaDTO.getPublicaciones().size() >= 10) {
-            throw new RuntimeException("La noticia tiene demasiadas publicaciones ya.");
-        }
+    public void altaVerificacionMecanismo(CheckMechanism cm) {
 
-        noticiaDTO = dataAccess.addPublicacionToNoticia(pub, idNoticia);
-        return noticiaDTO;
     }
 }
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/common/Propiedades.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/common/Propiedades.java
new file mode 100644
index 0000000..a0b19d5
--- /dev/null
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/common/Propiedades.java
@@ -0,0 +1,79 @@
+package uy.edu.fing.tse.practico.business.common;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Path;
+import java.util.Map;
+import java.util.Properties;
+
+public enum Propiedades {
+
+    URI("uy.edu.fing.tse.business.rabbit.uri", ""),
+    HOST("uy.edu.fing.tse.business.rabbit.host", ""),
+    PORT("uy.edu.fing.tse.business.rabbit.port", "5672"),
+    VHOST("uy.edu.fing.tse.business.rabbit.vhost", ""),
+    USERNAME("uy.edu.fing.tse.business.rabbit.username", ""),
+    PASSWORD("uy.edu.fing.tse.business.rabbit.password", "");
+
+    private final String key;
+    private final String defaultValue;
+
+    Propiedades(String key, String defaultValue) {
+        this.key = key;
+        this.defaultValue = defaultValue;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public String getValue() {
+        return System.getProperty(key);
+    }
+
+    public Integer getIntValue() {
+        return Integer.valueOf(System.getProperty(key));
+    }
+
+    public Boolean getBoolValue() {
+        return Boolean.valueOf(System.getProperty(key));
+    }
+
+    static {
+        //Agrego valores por defecto
+        for (Propiedades value : Propiedades.values()) {
+            System.setProperty(value.key, value.defaultValue);
+        }
+        //Cargo los valores del archivo
+        try {
+            final URL resource = Propiedades.class.getClassLoader().getResource("central.properties");
+            final Path of = Path.of(resource.toURI());
+
+            load(of.toFile());
+        } catch (URISyntaxException e) {
+            throw new RuntimeException("Error leyendo el archivo de propiedades", e);
+        }
+
+    }
+
+    public static void load(final File propFile) {
+        try (FileInputStream is = new FileInputStream(propFile)) {
+            Properties p = new Properties();
+            p.load(is);
+
+            for (Map.Entry<Object, Object> entry : p.entrySet()) {
+                System.setProperty(entry.getKey().toString(), entry.getValue().toString());
+            }
+
+        } catch (IOException ex) {
+            throw new RuntimeException("Error leyendo el archivo de propiedades", ex);
+        }
+    }
+}
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/AltaNoticiaMDB.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/AltaNoticiaMDB.java
deleted file mode 100644
index b16d696..0000000
--- a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/AltaNoticiaMDB.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package uy.edu.fing.tse.practico.business.jms;
-
-import uy.edu.fing.tse.dto.NoticiaDTO;
-import uy.edu.fing.tse.practico.business.BusinessBean;
-
-import javax.ejb.ActivationConfigProperty;
-import javax.ejb.EJB;
-import javax.ejb.MessageDriven;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-
-//FIXME comentarlo para el despliegue en OpenShift
-@MessageDriven(name = "AltaNoticia", activationConfig = {
-        @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/queue/queue_alta_noticia"),
-        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
-        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
-        @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "50")
-})
-public class AltaNoticiaMDB implements MessageListener {
-
-    @EJB
-    private BusinessBean negocio;
-
-    @Override
-    public void onMessage(Message message) {
-        try {
-            final String body = message.getBody(String.class);
-            final String[] split = body.trim().split("\\|");
-
-            final NoticiaDTO noticia = new NoticiaDTO(null, split[0], split[1]);
-            negocio.add(noticia);
-
-        } catch (JMSException e) {
-            e.printStackTrace();
-        }
-    }
-}
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/JMSProducer.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/JMSProducer.java
deleted file mode 100644
index b364f6d..0000000
--- a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/jms/JMSProducer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package uy.edu.fing.tse.practico.business.jms;
-
-import uy.edu.fing.tse.dto.NoticiaDTO;
-
-import javax.annotation.Resource;
-import javax.ejb.Stateless;
-import javax.jms.*;
-
-@Stateless
-public class JMSProducer {
-
-    @Resource(lookup = "java:/ConnectionFactory")
-    private ConnectionFactory connectionFactory;
-
-    @Resource(lookup = "java:/jms/queue/queue_alta_noticia")
-    private Queue sendQueue;
-
-    public void altaNoticia(final NoticiaDTO noticia) {
-        try {
-            sendMsj(noticia.getTitulo() + "|" + noticia.getDescripcion());
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private void sendMsj(final String messageStr) {
-        // Create the JMS connection, session, producer, and consumer
-        try (Connection connection = connectionFactory.createConnection()) {
-            final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-            final MessageProducer producer = session.createProducer(sendQueue);
-
-            connection.start();
-
-            final Message message = session.createTextMessage(messageStr);
-            producer.send(message);
-        } catch (JMSException _e) {
-            //ignore
-        }
-    }
-}
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageConsumer.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageConsumer.java
new file mode 100644
index 0000000..fc6a8fe
--- /dev/null
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageConsumer.java
@@ -0,0 +1,78 @@
+package uy.edu.fing.tse.practico.business.mq;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.rabbitmq.client.AMQP;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.DefaultConsumer;
+import com.rabbitmq.client.Envelope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import uy.edu.fing.tse.dto.CheckMechanism;
+import uy.edu.fing.tse.dto.Peripherical;
+import uy.edu.fing.tse.practico.business.BusinessBean;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+@Singleton
+@Startup
+public class MessageConsumer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MessageConsumer.class);
+
+    private Channel channel;
+
+    @EJB
+    private BusinessBean negocio;
+
+    @PostConstruct
+    public void init() {
+        try {
+            channel = RabbitConfig.channel();
+            subscripcion(Queue.SUBCRIBTION, channel);
+            verificacion(Queue.VERIFICATION, channel);
+        } catch (IOException | TimeoutException e) {
+            LOG.error("Error: ", e);
+            throw new RuntimeException("Error al construir la coneccion con MQ", e);
+        }
+    }
+
+    private void subscripcion(final Queue queue, final Channel channel) throws IOException {
+        LOG.info("Subscribing: " + queue.name);
+        channel.basicConsume(queue.name, false, queue.name + "Tag", new DefaultConsumer(channel) {
+            @Override
+            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
+                String routingKey = envelope.getRoutingKey();
+                String contentType = properties.getContentType();
+                long deliveryTag = envelope.getDeliveryTag();
+
+                final Peripherical peripherical = new ObjectMapper().readValue(body, Peripherical.class);
+                negocio.altaPeriferico(peripherical);
+
+                channel.basicAck(deliveryTag, false);
+            }
+        });
+    }
+
+    private void verificacion(final Queue queue, final Channel channel) throws IOException {
+        LOG.info("Subscribing: " + queue.name);
+        channel.basicConsume(queue.name, false, queue.name + "Tag", new DefaultConsumer(channel) {
+            @Override
+            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
+                String routingKey = envelope.getRoutingKey();
+                String contentType = properties.getContentType();
+                long deliveryTag = envelope.getDeliveryTag();
+
+
+                final CheckMechanism cm = new ObjectMapper().readValue(body, CheckMechanism.class);
+                negocio.altaVerificacionMecanismo(cm);
+
+                channel.basicAck(deliveryTag, false);
+            }
+        });
+    }
+}
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageProducer.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageProducer.java
new file mode 100644
index 0000000..cc264e1
--- /dev/null
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/MessageProducer.java
@@ -0,0 +1,38 @@
+package uy.edu.fing.tse.practico.business.mq;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.rabbitmq.client.Channel;
+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
+public class MessageProducer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MessageProducer.class);
+
+    private Channel channel;
+
+    @PostConstruct
+    public void init() {
+        try {
+            channel = RabbitConfig.channel();
+        } catch (IOException | TimeoutException e) {
+            LOG.error("Error: ", e);
+            throw new RuntimeException("Error al construir la coneccion con MQ", e);
+        }
+    }
+
+    public void send(final Object message, final Queue queue) throws IOException {
+        final String body = new ObjectMapper().writeValueAsString(message);
+        send(body, queue);
+    }
+
+    public void send(final String message, final Queue queue) throws IOException {
+        channel.basicPublish("", queue.name, null, message.getBytes());
+    }
+}
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/Queue.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/Queue.java
new file mode 100644
index 0000000..f5f1dae
--- /dev/null
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/Queue.java
@@ -0,0 +1,21 @@
+package uy.edu.fing.tse.practico.business.mq;
+
+public enum Queue {
+    REQUEST("request"),
+    VERIFICATION("verification"),
+    SUBCRIBTION("subcription"),
+    DEFAULT("default"),
+    COLA("cola");
+
+    String name;
+    boolean durable;
+    boolean exclusive;
+    boolean autoDelete;
+
+    Queue(String name) {
+        this.name = name;
+        durable = false;
+        exclusive = false;
+        autoDelete = false;
+    }
+}
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/RabbitConfig.java b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/RabbitConfig.java
new file mode 100644
index 0000000..f7bc956
--- /dev/null
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/practico/business/mq/RabbitConfig.java
@@ -0,0 +1,42 @@
+package uy.edu.fing.tse.practico.business.mq;
+
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import uy.edu.fing.tse.practico.business.common.Propiedades;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+final class RabbitConfig {
+    //https://barnacle.rmq.cloudamqp.com/#/queues
+    private static Channel channel = null;
+
+    private RabbitConfig() {
+    }
+
+    static Channel channel() throws IOException, TimeoutException {
+        if (channel == null) {
+            channel = connection().createChannel();
+            for (Queue queue : Queue.values()) {
+                channel.queueDeclare(queue.name, queue.durable, queue.exclusive, queue.autoDelete, null);
+            }
+        }
+        return channel;
+    }
+
+    private static Connection connection() throws IOException, TimeoutException {
+        return connectionFactory().newConnection();
+    }
+
+    private static ConnectionFactory connectionFactory() {
+        ConnectionFactory factory = new ConnectionFactory();
+        factory.setHost(Propiedades.HOST.getValue());
+        factory.setPort(Propiedades.PORT.getIntValue());
+        factory.setPassword(Propiedades.PASSWORD.getValue());
+        factory.setUsername(Propiedades.USERNAME.getValue());
+        factory.setVirtualHost(Propiedades.VHOST.getValue());
+        return factory;
+    }
+
+}
diff --git a/central-ejb/src/main/resources/central.properties b/central-ejb/src/main/resources/central.properties
new file mode 100644
index 0000000..33f1c55
--- /dev/null
+++ b/central-ejb/src/main/resources/central.properties
@@ -0,0 +1,6 @@
+uy.edu.fing.tse.business.rabbit.uri=amqp://hjxhckpo:kGFmsQ9HodjSzRVT016ttW-z7d2tn_IF@barnacle.rmq.cloudamqp.com/hjxhckpo
+uy.edu.fing.tse.business.rabbit.host=barnacle.rmq.cloudamqp.com
+uy.edu.fing.tse.business.rabbit.port=5672
+uy.edu.fing.tse.business.rabbit.vhost=hjxhckpo
+uy.edu.fing.tse.business.rabbit.username=hjxhckpo
+uy.edu.fing.tse.business.rabbit.password=kGFmsQ9HodjSzRVT016ttW-z7d2tn_IF
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f605bf0..d907081 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
         <module>central-db</module>
         <module>central-ejb</module>
         <module>central-ear</module>
-        <module>backoffice</module>
+        <!--        <module>backoffice</module>-->
     </modules>
 
     <properties>
@@ -25,12 +25,13 @@
         <version.wildfly>15.0.0.Final</version.wildfly>
 
         <!-- other plugin versions -->
-        <version.compiler.plugin>3.1</version.compiler.plugin>
+        <version.compiler.plugin>3.8.1</version.compiler.plugin>
         <version.ear.plugin>3.0.1</version.ear.plugin>
         <version.ejb.plugin>3.0.1</version.ejb.plugin>
-        <version.surefire.plugin>2.22.1</version.surefire.plugin>
+        <version.surefire.plugin>2.22.2</version.surefire.plugin>
         <version.war.plugin>3.2.2</version.war.plugin>
 
+        <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
     </properties>
 
     <dependencyManagement>
@@ -202,10 +203,16 @@
                 <version>1.2</version>
             </dependency>
 
+            <dependency>
+                <groupId>com.rabbitmq</groupId>
+                <artifactId>amqp-client</artifactId>
+                <version>5.7.0</version>
+            </dependency>
+
             <dependency>
                 <groupId>org.mapstruct</groupId>
                 <artifactId>mapstruct</artifactId>
-                <version>1.3.0.Final</version>
+                <version>${org.mapstruct.version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
@@ -289,7 +296,10 @@
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>${version.surefire.plugin}</version>
+
                     <configuration>
+                        <skip>false</skip>
+                        <skipTests>false</skipTests>
                         <argLine>
                             --illegal-access=permit
                         </argLine>
-- 
GitLab