1 18 package org.apache.activemq.transport.stomp; 19 20 import java.io.IOException ; 21 22 import javax.jms.JMSException ; 23 24 import org.apache.activemq.command.Command; 25 import org.apache.activemq.transport.Transport; 26 import org.apache.activemq.transport.TransportFilter; 27 import org.apache.activemq.util.IOExceptionSupport; 28 import org.apache.commons.logging.Log; 29 import org.apache.commons.logging.LogFactory; 30 31 40 public class StompTransportFilter extends TransportFilter { 41 static final private Log log = LogFactory.getLog(StompTransportFilter.class); 42 private final ProtocolConverter protocolConverter; 43 44 private final Object sendToActiveMQMutex = new Object (); 45 private final Object sendToStompMutex = new Object (); 46 47 private final FrameTranslator frameTranslator; 48 49 private boolean trace; 50 51 public StompTransportFilter(Transport next, FrameTranslator translator) { 52 super(next); 53 this.frameTranslator = translator; 54 this.protocolConverter = new ProtocolConverter(this, translator); 55 } 56 57 public void oneway(Object o) throws IOException { 58 try { 59 final Command command = (Command) o; 60 protocolConverter.onActiveMQCommad(command); 61 } catch (JMSException e) { 62 throw IOExceptionSupport.create(e); 63 } 64 } 65 66 public void onCommand(Object command) { 67 try { 68 if( trace ) { 69 log.trace("Received: \n"+command); 70 } 71 protocolConverter.onStompCommad((StompFrame) command); 72 } catch (IOException e) { 73 onException(e); 74 } catch (JMSException e) { 75 onException(IOExceptionSupport.create(e)); 76 } 77 } 78 79 public void sendToActiveMQ(Command command) { 80 synchronized(sendToActiveMQMutex) { 81 transportListener.onCommand(command); 82 } 83 } 84 85 public void sendToStomp(StompFrame command) throws IOException { 86 if( trace ) { 87 log.trace("Sending: \n"+command); 88 } 89 synchronized(sendToStompMutex) { 90 next.oneway(command); 91 } 92 } 93 94 public FrameTranslator getFrameTranslator() 95 { 96 return frameTranslator; 97 } 98 99 public boolean isTrace() { 100 return trace; 101 } 102 103 public void setTrace(boolean trace) { 104 this.trace = trace; 105 } 106 } 107 | Popular Tags |