//////////////////////////////////////////////////////////////////////////////// // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// package mx.messaging { import mx.core.mx_internal; import mx.events.PropertyChangeEvent; import mx.logging.Log; import mx.messaging.messages.AbstractMessage; import mx.messaging.messages.AsyncMessage; import mx.messaging.messages.IMessage; use namespace mx_internal; /** * A Producer sends messages to a destination. * Producers dispatch a MessageAckEvent or MessageFaultEvent * for each message they send depending upon whether the outbound message * was sent and processed successfully or not. * @mxml *

* The <mx:Producer> tag inherits all the tag attributes of its superclass, and adds the following tag attributes: *

*
 *   <mx:Producer
 *    Properties
 *    defaultHeaders="No default."
 *  />
 *  
* * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion BlazeDS 4 * @productversion LCDS 3 */ public class Producer extends AbstractProducer { //-------------------------------------------------------------------------- // // Static Constants // //-------------------------------------------------------------------------- /** * The default message priority. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion BlazeDS 4 * @productversion LCDS 3 */ public static const DEFAULT_PRIORITY:int = 4; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @example *
     *   function sendMessage():void
     *   {
     *       var producer:Producer = new Producer();
     *       producer.destination = "NASDAQ";
     *       var msg:AsyncMessage = new AsyncMessage();
     *       msg.headers.operation = "UPDATE";
     *       msg.body = {"SYMBOL":50.00};
     *       producer.send(msg);
     *   }
     *   
* * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion BlazeDS 4 * @productversion LCDS 3 */ public function Producer() { super(); _log = Log.getLogger("mx.messaging.Producer"); _agentType = "producer"; } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- // // Properties // //-------------------------------------------------------------------------- //---------------------------------- // subtopic //---------------------------------- /** * @private */ private var _subtopic:String = ""; [Bindable(event="propertyChange")] /** * Provides access to the subtopic for the remote destination that the MessageAgent uses. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion BlazeDS 4 * @productversion LCDS 3 */ public function get subtopic():String { return _subtopic; } /** * @private */ public function set subtopic(value:String):void { if (_subtopic != value) { var event:PropertyChangeEvent; if (value == null) value = ""; event = PropertyChangeEvent.createUpdateEvent(this, "subtopic", _subtopic, value); _subtopic = value; dispatchEvent(event); } } //-------------------------------------------------------------------------- // // Protected Methods // //-------------------------------------------------------------------------- /** * @private */ override protected function internalSend(message:IMessage, waitForClientId:Boolean = true):void { if (subtopic.length > 0) message.headers[AsyncMessage.SUBTOPIC_HEADER] = subtopic; handlePriority(message); super.internalSend(message, waitForClientId); } //-------------------------------------------------------------------------- // // Private Methods // //-------------------------------------------------------------------------- /** * @private * If the priority header has been set on the message, makes sure that the * priority value is within the valid range (0-9). If no priority header * has been set, tries to use Producer's priority level if one exists. * */ private function handlePriority(message:IMessage):void { // If message priority is already set, make sure it's within range. if (message.headers[AbstractMessage.PRIORITY_HEADER] != null) { var messagePriority:int = message.headers[AbstractMessage.PRIORITY_HEADER]; if (messagePriority < 0) message.headers[AbstractMessage.PRIORITY_HEADER] = 0; else if (messagePriority > 9) message.headers[AbstractMessage.PRIORITY_HEADER] = 9; } // Otherwise, see if there's the default priority property is set. else if (priority > -1) { message.headers[AbstractMessage.PRIORITY_HEADER] = priority; } } } }