/**
  * Creates the global entity manager.
  *
  * @return \Doctrine\ORM\EntityManager
  */
 private function createEntityManager()
 {
     // find all modules and plugins that should be handled by the entity manager
     $managedModules = Application::getModuleManager()->getModules();
     $managedPlugins = Application::getPluginManager()->getPlugins();
     // initialize Doctrine configuration
     //TODO: Implement caching correctly (APC, memcached, XCache, ...); see \Doctrine\ORM\Tools\Setup::createConfiguration()
     $config = Setup::createAnnotationMetadataConfiguration($this->getEntityDirectories($managedModules, $managedPlugins), false, ABLERON_DOCTRINE_PROXY_DIR, null);
     // register namespace aliases for managed modules
     foreach ($managedModules as $managedModule) {
         $config->addEntityNamespace($managedModule->getNamespace(), sprintf('Ableron\\Modules\\%s\\Model\\Entities', $managedModule->getNamespace()));
     }
     // register namespace aliases for managed plugins
     foreach ($managedPlugins as $managedPlugin) {
         $config->addEntityNamespace($managedPlugin->getNamespace(), sprintf('Ableron\\Plugins\\%s\\Model\\Entities', $managedPlugin->getNamespace()));
     }
     // configure event manager
     $eventManager = new EventManager();
     // handle table prefix
     if (Application::getContext()->getSetting('doctrine.tablePrefix') !== '') {
         $eventManager->addEventListener(Events::loadClassMetadata, new TablePrefixDoctrineExtension(Application::getContext()->getSetting('doctrine.tablePrefix')));
     }
     // set up Doctrine's EntityManager
     return EntityManager::create(Application::getContext()->getSetting('doctrine.dbConnectionParameters'), $config, $eventManager);
 }