Crear el código para enviar los mensajes – Publicador

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);
        }
    }