package org.jbpm.task.service.jms;
import java.io.IOException;
import java.io.Serializable;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import org.jbpm.task.service.SessionWriter;
public class JMSSessionWriter implements SessionWriter {
private final Session session;
private final MessageProducer producer;
private final String selector;
public JMSSessionWriter(Session session, MessageProducer producer, String selector) {
this.session = session;
this.producer = producer;
this.selector = selector;
}
public void write(Object message) throws IOException {
try {
ObjectMessage clientMessage = this.session.createObjectMessage();
clientMessage.setObject((Serializable) message);
clientMessage.setStringProperty(TaskServiceConstants.SELECTOR_NAME, this.selector);
this.producer.send(clientMessage);
this.session.commit();
} catch (JMSException e) {
throw new IOException("Unable to create message: " + e.getMessage());
} finally {
try {
this.session.commit();
} catch (JMSException e) {
throw new IOException("Unable to commit message: " + e.getMessage());
}
}
}
}