/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.wordpress.salaboy.messaging; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.logging.Level; import java.util.logging.Logger; import org.hornetq.api.core.HornetQException; import org.hornetq.api.core.client.ClientMessage; import org.hornetq.api.core.client.ClientProducer; import org.hornetq.api.core.client.ClientSession; import org.hornetq.api.core.client.ClientSessionFactory; /** * * @author salaboy */ public class MessageProducer { private ClientSession producerSession; private ClientProducer producer; private String addressName; public MessageProducer(String addressName, ClientSessionFactory factory) { this.addressName = addressName; try { producerSession = factory.createSession(true,true); producer = producerSession.createProducer(addressName); producerSession.start(); } catch (HornetQException ex) { Logger.getLogger(MessageProducer.class.getName()).log(Level.SEVERE, null, ex); } } public String getQueueName() { return addressName; } public void sendMessage(Object object) throws HornetQException{ ObjectOutputStream oos = null; try { ClientMessage clientMessage = producerSession.createMessage(true); ByteArrayOutputStream baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); oos.flush(); byte[] data = baos.toByteArray(); clientMessage.getBodyBuffer().writeInt(data.length); clientMessage.getBodyBuffer().writeBytes(data); producer.send(clientMessage); } catch (IOException ex) { Logger.getLogger(MessageProducer.class.getName()).log(Level.SEVERE, null, ex); } finally { try { oos.close(); } catch (IOException ex) { Logger.getLogger(MessageProducer.class.getName()).log(Level.SEVERE, null, ex); } } } public void sendMessageAndDie(Object object) throws HornetQException{ try{ this.sendMessage(object); } finally{ this.stop(); } } public void stop() throws HornetQException{ producer.close(); producerSession.stop(); producerSession.close(); } }