/** * Deploys the message queue described by the passed node. * * @param \AppserverIo\Appserver\Core\Api\Node\MessageQueueNodeInterface $messageQueueNode The node that describes the message queue * * @return void */ protected function registeMessageQueue(MessageQueueNodeInterface $messageQueueNode) { // load destination queue and receiver type $type = $messageQueueNode->getType(); $destination = $messageQueueNode->getDestination()->__toString(); // initialize the message queue $messageQueue = new MessageQueue(); $messageQueue->injectType($type); $messageQueue->injectName($destination); $messageQueue->injectWorkers($this->workers); $messageQueue->injectMessages($this->messages); $messageQueue->injectApplication($this->application); $messageQueue->injectManagerSettings($this->managerSettings); $messageQueue->start(); // initialize the queues storage for the priorities $this->queues[$messageQueue->getName()] = $messageQueue; // prepare the naming directory to bind the callback to $path = explode('/', $destination); for ($i = 0; $i < sizeof($path) - 1; $i++) { try { $this->directories[$i]->search(sprintf('php:global/%s/%s', $this->getApplication()->getUniqueName(), $path[$i])); } catch (NamingException $ne) { $this->directories[$i + 1] = $this->directories[$i]->createSubdirectory(sprintf('php:global/%s/%s', $this->getApplication()->getUniqueName(), $path[$i])); } } // bind the callback for creating a new MQ sender instance to the naming directory => necessary for DI provider $this->getApplication()->getNamingDirectory()->bindCallback(sprintf('php:global/%s/%s', $this->getApplication()->getUniqueName(), $destination), array(&$this, 'createSenderForQueue'), array($destination)); }