/** * Adds a resource reference configuration. * * @param \AppserverIo\Psr\EnterpriseBeans\Description\ResReferenceDescriptorInterface $resReference The resource reference configuration * * @return void */ public function addResReference(ResReferenceDescriptorInterface $resReference) { $this->resReferences[$resReference->getName()] = $resReference; }
/** * Registers the passed resource reference in the applications directory. * * @param \AppserverIo\Psr\EnterpriseBeans\Description\ResReferenceDescriptorInterface $resReference The resource reference to register * * @return void */ public function registerResReference(ResReferenceDescriptorInterface $resReference) { try { // load the application instance and reference name $application = $this->getApplication(); // initialize the resource URI $uri = sprintf('php:global/%s/%s', $application->getName(), $resReference->getName()); // query whether the reference has already been bound to the application if ($application->getNamingDirectory()->search($uri)) { // log a message that the reference has already been bound $application->getInitialContext()->getSystemLogger()->info(sprintf('Resource reference %s has already been bound to naming directory', $uri)); // return immediately return; } // catch the NamingException if the ref name is not bound yet } catch (NamingException $e) { // log a message that we've to register the resource reference now $application->getInitialContext()->getSystemLogger()->debug(sprintf('Resource reference %s has not been bound to naming directory', $uri)); } try { // try to use the lookup to bind the reference to if ($lookup = $resReference->getLookup()) { // create a reference to a resource in the global directory $application->getNamingDirectory()->bindReference($uri, $lookup); // try to bind the reference by the specified type } elseif ($type = $resReference->getType()) { // bind a reference to the resource shortname $application->getNamingDirectory()->bindReference($uri, sprintf('php:global/%s/%s', $application->getName(), $type)); // log a critical message that we can't bind the reference } else { $application->getInitialContext()->getSystemLogger()->critical(sprintf('Can\'t bind resource reference %s to naming directory, because of missing source bean definition', $uri)); } // catch all other exceptions } catch (\Exception $e) { $application->getInitialContext()->getSystemLogger()->critical($e->__toString()); } }
/** * Merges the passed configuration into this one. Configuration values * of the passed configuration will overwrite the this one. * * @param \AppserverIo\Psr\EnterpriseBeans\Description\ResReferenceDescriptorInterface $resReferenceDescriptor The configuration to merge * * @return void */ public function merge(ResReferenceDescriptorInterface $resReferenceDescriptor) { // merge the reference name if ($name = $resReferenceDescriptor->getName()) { $this->setName($name); } // merge the reference type if ($type = $resReferenceDescriptor->getType()) { $this->setType($type); } // merge the lookup name if ($lookup = $resReferenceDescriptor->getLookup()) { $this->setLookup($lookup); } // merge the description if ($description = $resReferenceDescriptor->getDescription()) { $this->setDescription($description); } // merge the injection target if ($injectionTarget = $resReferenceDescriptor->getInjectionTarget()) { $this->setInjectionTarget($injectionTarget); } }