/**
  * 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);
     }
 }