1. En el EJB de sesión encargado de administrar los vendedores, ServicioVendedoresMock, agregue el código necesario para inyectar los objetos administrados, a saber: la fábrica de conexiones y el tópico.
@Resource(mappedName="jms/cambioDeCargoTopicFactory") private ConnectionFactory connectionFactory; @Resource(mappedName="jms/cambioDeCargoTopic") private Topic topic; private Vendedor cVendedor;
2. Cree un método privado encargado de crear el mensaje que será publicado para notificar a todos los sistemas subscriptores.
private Message createModificacionVendendorMessage(Session session) throws JMSException { String msg = "Vendedor: " + cVendedor.getNombres()+" "+cVendedor.getApellidos() + "\n"; msg += "Cargo: " + cVendedor.getPerfil() + "\n"; msg += "Salario: " + cVendedor.getSalario() + "\n"; TextMessage tm = session.createTextMessage(); tm.setText(msg); return tm; }
3. Cree un método privado encargado de publicar el mensaje.
private void notificarModificacionVendedor() throws JMSException { Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer((Destination) topic); try { messageProducer.send(createModificacionVendendorMessage(session)); } catch (JMSException ex) { Logger.getLogger(ServicioVendedoresMock.class.getName()).log(Level.SEVERE, null, ex); } finally { if (session != null) { try { session.close(); } catch (JMSException e) { Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Error cerrando la" + " sesión", e); } } if (connection != null) { connection.close(); } } }
4. Modifique el método agregarVendedor para que publique el mensaje utilizando el método anterior.
@Override public void agregarVendedor(Vendedor vendedor) throws OperacionInvalidaException { try { cVendedor=vendedor; persistencia.create(vendedor); } catch (OperacionInvalidaException ex) { throw new OperacionInvalidaException(ex.getMessage()); } try { notificarModificacionVendedor(); } catch (JMSException ex) { Logger.getLogger(ServicioVendedoresMock.class.getName()).log(Level.SEVERE, "Error " + "enviando la notificación de creación de un vendedor", ex); } }