/**
  * Register the servlet described by the passed descriptor.
  *
  * @param \AppserverIo\Psr\Servlet\Description\ServletDescriptorInterface $descriptor The servlet descriptor
  *
  * @return void
  */
 protected function registerServlet(ServletDescriptorInterface $descriptor)
 {
     try {
         // create a new reflection class instance
         $reflectionClass = new ReflectionClass($descriptor->getClassName());
         // instantiate the servlet
         $instance = $reflectionClass->newInstance();
         // load servlet name
         $servletName = $descriptor->getName();
         // initialize the servlet configuration
         $servletConfig = new ServletConfiguration();
         $servletConfig->injectServletContext($this);
         $servletConfig->injectServletName($servletName);
         // append the init params to the servlet configuration
         foreach ($descriptor->getInitParams() as $paramName => $paramValue) {
             $servletConfig->addInitParameter($paramName, $paramValue);
         }
         // initialize the servlet
         $instance->init($servletConfig);
         // the servlet is added to the dictionary using the complete request path as the key
         $this->addServlet($servletName, $instance);
         // prepend the url-pattern - servlet mapping to the servlet mappings
         foreach ($descriptor->getUrlPatterns() as $pattern) {
             $this->addServletMapping($pattern, $servletName);
         }
         // register the EPB references
         foreach ($descriptor->getEpbReferences() as $epbReference) {
             $this->registerEpbReference($epbReference);
         }
         // register the resource references
         foreach ($descriptor->getResReferences() as $resReference) {
             $this->registerResReference($resReference);
         }
         // register the persistence unit references
         foreach ($descriptor->getPersistenceUnitReferences() as $persistenceUnitReference) {
             $this->registerPersistenceUnitReference($persistenceUnitReference);
         }
     } catch (\Exception $e) {
         // log the exception
         $this->getApplication()->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\ServletDescriptorInterface $servletDescriptor The descriptor to merge
  *
  * @return void
  * @throws \AppserverIo\Psr\Servlet\ServletException Is thrown if you try to merge a servlet descriptor with a different class name
  */
 public function merge(ServletDescriptorInterface $servletDescriptor)
 {
     // check if the classes are equal
     if ($this->getClassName() !== $servletDescriptor->getClassName()) {
         throw new ServletException(sprintf('You try to merge a servlet descriptor for % with %s', $servletDescriptor->getClassName(), $servletDescriptor->getClassName()));
     }
     // merge the servlet name
     if ($name = $servletDescriptor->getName()) {
         $this->setName($name);
     }
     // merge the servlet description
     if ($description = $servletDescriptor->getDescription()) {
         $this->setDescription($description);
     }
     // merge the servlet display name
     if ($displayName = $servletDescriptor->getDisplayName()) {
         $this->setDisplayName($displayName);
     }
     // merge the URL patterns
     foreach ($servletDescriptor->getUrlPatterns() as $urlPattern) {
         $this->addUrlPattern($urlPattern);
     }
     // merge the initialization parameters
     foreach ($servletDescriptor->getInitParams() as $paramKey => $paramValue) {
         $this->addInitParam($paramKey, $paramValue);
     }
     // merge the EPB references
     foreach ($servletDescriptor->getEpbReferences() as $epbReference) {
         $this->addEpbReference($epbReference);
     }
     // merge the resource references
     foreach ($servletDescriptor->getResReferences() as $resReference) {
         $this->addResReference($resReference);
     }
     // merge the persistence unit references
     foreach ($servletDescriptor->getPersistenceUnitReferences() as $persistenceUnitReference) {
         $this->addPersistenceUnitReference($persistenceUnitReference);
     }
 }