19 package org.sleuthkit.autopsy.events;
 
   21 import java.net.URISyntaxException;
 
   22 import java.util.logging.Level;
 
   23 import javax.jms.Connection;
 
   24 import javax.jms.DeliveryMode;
 
   25 import javax.jms.JMSException;
 
   26 import javax.jms.Message;
 
   27 import javax.jms.MessageConsumer;
 
   28 import javax.jms.MessageListener;
 
   29 import javax.jms.MessageProducer;
 
   30 import javax.jms.ObjectMessage;
 
   31 import javax.jms.Session;
 
   32 import javax.jms.Topic;
 
   33 import org.apache.activemq.ActiveMQConnectionFactory;
 
   43 final class RemoteEventPublisher {
 
   45     private static final Logger logger = Logger.
getLogger(RemoteEventPublisher.class.getName());
 
   46     private static final String ALL_MESSAGE_SELECTOR = 
"All"; 
 
   47     private final LocalEventPublisher localPublisher;
 
   48     private final Connection connection;
 
   49     private final Session session;
 
   50     private final MessageProducer producer;
 
   51     private final MessageConsumer consumer;
 
   52     private final MessageReceiver receiver;
 
   69     RemoteEventPublisher(String eventChannelName, LocalEventPublisher localPublisher, MessageServiceConnectionInfo info) 
throws URISyntaxException, JMSException {
 
   71             this.localPublisher = localPublisher;
 
   72             ActiveMQConnectionFactory connectionFactory = 
new ActiveMQConnectionFactory(info.getUserName(), info.getPassword(), info.getURI());
 
   73             connection = connectionFactory.createConnection();
 
   75             session = connection.createSession(
false, Session.AUTO_ACKNOWLEDGE);
 
   76             Topic topic = session.createTopic(eventChannelName);
 
   77             producer = session.createProducer(topic);
 
   78             producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
 
   79             consumer = session.createConsumer(topic, 
"events = '" + ALL_MESSAGE_SELECTOR + 
"'", 
true); 
 
   80             receiver = 
new MessageReceiver();
 
   81             consumer.setMessageListener(receiver);
 
   82         } 
catch (URISyntaxException | JMSException ex) {
 
   83             logger.log(Level.SEVERE, 
"Failed to connect to event channel", ex); 
 
   86             } 
catch (JMSException ignored) {
 
  102     synchronized void stop() throws JMSException {
 
  103         if (null != producer) {
 
  106         if (null != consumer) {
 
  109         if (null != session) {
 
  112         if (null != connection) {
 
  122     synchronized void publish(AutopsyEvent event) 
throws JMSException {
 
  123         ObjectMessage message = session.createObjectMessage();
 
  124         message.setStringProperty(
"events", ALL_MESSAGE_SELECTOR); 
 
  125         message.setObject(event);
 
  126         producer.send(message);
 
  144                 if (message instanceof ObjectMessage) {
 
  145                     ObjectMessage objectMessage = (ObjectMessage) message;
 
  146                     Object 
object = objectMessage.getObject();
 
  148                         AutopsyEvent 
event = (AutopsyEvent) 
object;
 
  149                         event.setSourceType(AutopsyEvent.SourceType.REMOTE);
 
  150                         localPublisher.publish(event);
 
  153             } 
catch (Exception ex) {
 
  154                 logger.log(Level.SEVERE, 
"Error receiving message", ex); 
 
void onMessage(Message message)
synchronized static Logger getLogger(String name)