public 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());
}
}