public function factory()
    {

        // register additional annotation libraries
        foreach ($this->persistenceUnitNode->getAnnotationRegistries() as $annotationRegistry) {
            AnnotationRegistry::registerAutoloadNamespace(
                $annotationRegistry->getNamespace(),
                $annotationRegistry->getDirectoriesAsArray($this->application->getWebappPath())
            );
        }

        // globally ignore configured annotations to ignore
        foreach ($this->persistenceUnitNode->getIgnoredAnnotations() as $ignoredAnnotation) {
            AnnotationReader::addGlobalIgnoredName($ignoredAnnotation->getNodeValue()->__toString());
        }

        // load the metadata configuration
        $metadataConfiguration = $this->persistenceUnitNode->getMetadataConfiguration();

        // prepare the setup properties
        $absolutePaths = $metadataConfiguration->getDirectoriesAsArray($this->application->getWebappPath());
        $proxyDir = $metadataConfiguration->getParam(MetadataConfigurationInterface::PARAM_PROXY_DIR);
        $isDevMode = $metadataConfiguration->getParam(MetadataConfigurationInterface::PARAM_IS_DEV_MODE);
        $useSimpleAnnotationReader = $metadataConfiguration->getParam(MetadataConfigurationInterface::PARAM_USE_SIMPLE_ANNOTATION_READER);

        // load the factory method from the available mappings
        $factoryMethod = EntityManagerFactory::$metadataMapping[$metadataConfiguration->getType()];

        // create the database configuration and initialize the entity manager
        $configuration = Setup::$factoryMethod($absolutePaths, $isDevMode, $proxyDir, null, $useSimpleAnnotationReader);

        // load the datasource node
        $datasourceNode = null;
        foreach ($this->application->getInitialContext()->getSystemConfiguration()->getDatasources() as $datasourceNode) {
            if ($datasourceNode->getName() === $this->persistenceUnitNode->getDatasource()->getName()) {
                break;
            }
        }

        // throw a exception if the configured datasource is NOT available
        if ($datasourceNode == null) {
            throw new \Exception(
                sprintf(
                    'Can\'t find a datasource node for persistence unit %s',
                    $this->persistenceUnitNode->getName()
                )
            );
        }

        // load the database node
        $databaseNode = $datasourceNode->getDatabase();

        // throw an exception if the configured database is NOT available
        if ($databaseNode == null) {
            throw new \Exception(
                sprintf(
                    'Can\'t find database node for persistence unit %s',
                    $this->persistenceUnitNode->getName()
                )
            );
        }

        // load the driver node
        $driverNode = $databaseNode->getDriver();

        // throw an exception if the configured driver is NOT available
        if ($driverNode == null) {
            throw new \Exception(
                sprintf(
                    'Can\'t find driver node for persistence unit %s',
                    $this->persistenceUnitNode->getName()
                )
            );
        }

        // initialize and return a entity manager decorator instance
        return new DoctrineEntityManagerDecorator(
            EntityManager::create(ConnectionUtil::get($this->application)->fromDatabaseNode($databaseNode), $configuration)
        );
    }
public function factory()
    {

        // register additional annotation libraries
        foreach ($this->persistenceUnitNode->getAnnotationRegistries() as $annotationRegistry) {
            AnnotationRegistry::registerAutoloadNamespace(
                $annotationRegistry->getNamespace(),
                $annotationRegistry->getDirectoriesAsArray($this->application->getWebappPath())
            );
        }

        // globally ignore configured annotations to ignore
        foreach ($this->persistenceUnitNode->getIgnoredAnnotations() as $ignoredAnnotation) {
            AnnotationReader::addGlobalIgnoredName($ignoredAnnotation->getNodeValue()->__toString());
        }

        // load the metadata configuration
        $metadataConfiguration = $this->persistenceUnitNode->getMetadataConfiguration();

        // prepare the setup properties
        $absolutePaths = $metadataConfiguration->getDirectoriesAsArray($this->application->getWebappPath());
        $proxyDir = $metadataConfiguration->getParam(MetadataConfigurationInterface::PARAM_PROXY_DIR);
        $isDevMode = $metadataConfiguration->getParam(MetadataConfigurationInterface::PARAM_IS_DEV_MODE);
        $useSimpleAnnotationReader = $metadataConfiguration->getParam(MetadataConfigurationInterface::PARAM_USE_SIMPLE_ANNOTATION_READER);

        // load the factory method from the available mappings
        $factoryMethod = EntityManagerFactory::$metadataMapping[$metadataConfiguration->getType()];

        // create the database configuration and initialize the entity manager
        $configuration = Setup::$factoryMethod($absolutePaths, $isDevMode, $proxyDir, null, $useSimpleAnnotationReader);

        // load the datasource node
        $datasourceNode = null;
        foreach ($this->application->getInitialContext()->getSystemConfiguration()->getDatasources() as $datasourceNode) {
            if ($datasourceNode->getName() === $this->persistenceUnitNode->getDatasource()->getName()) {
                break;
            }
        }

        // throw a exception if the configured datasource is NOT available
        if ($datasourceNode == null) {
            throw new \Exception(
                sprintf(
                    'Can\'t find a datasource node for persistence unit %s',
                    $this->persistenceUnitNode->getName()
                )
            );
        }

        // load the database node
        $databaseNode = $datasourceNode->getDatabase();

        // throw an exception if the configured database is NOT available
        if ($databaseNode == null) {
            throw new \Exception(
                sprintf(
                    'Can\'t find database node for persistence unit %s',
                    $this->persistenceUnitNode->getName()
                )
            );
        }

        // load the driver node
        $driverNode = $databaseNode->getDriver();

        // throw an exception if the configured driver is NOT available
        if ($driverNode == null) {
            throw new \Exception(
                sprintf(
                    'Can\'t find driver node for persistence unit %s',
                    $this->persistenceUnitNode->getName()
                )
            );
        }

        // initialize and return a entity manager decorator instance
        return new DoctrineEntityManagerDecorator(
            EntityManager::create(ConnectionUtil::get($this->application)->fromDatabaseNode($databaseNode), $configuration)
        );
    }
public function factory ( ) { // register additional annotation libraries foreach ( $ this -> persistenceUnitNode -> getAnnotationRegistries ( ) as $ annotationRegistry ) { AnnotationRegistry :: registerAutoloadNamespace ( $ annotationRegistry -> getNamespace ( ) , $ annotationRegistry -> getDirectoriesAsArray ( $ this -> application -> getWebappPath ( ) ) ) ; } // globally ignore configured annotations to ignore foreach ( $ this -> persistenceUnitNode -> getIgnoredAnnotations ( ) as $ ignoredAnnotation ) { AnnotationReader :: addGlobalIgnoredName ( $ ignoredAnnotation -> getNodeValue ( ) -> __toString ( ) ) ; } // load the metadata configuration $ metadataConfiguration = $ this -> persistenceUnitNode -> getMetadataConfiguration ( ) ; // prepare the setup properties $ absolutePaths = $ metadataConfiguration -> getDirectoriesAsArray ( $ this -> application -> getWebappPath ( ) ) ; $ proxyDir = $ metadataConfiguration -> getParam ( MetadataConfigurationInterface :: PARAM_PROXY_DIR ) ; $ isDevMode = $ metadataConfiguration -> getParam ( MetadataConfigurationInterface :: PARAM_IS_DEV_MODE ) ; $ useSimpleAnnotationReader = $ metadataConfiguration -> getParam ( MetadataConfigurationInterface :: PARAM_USE_SIMPLE_ANNOTATION_READER ) ; // load the factory method from the available mappings $ factoryMethod = EntityManagerFactory :: $ metadataMapping [ $ metadataConfiguration -> getType ( ) ] ; // create the database configuration and initialize the entity manager $ configuration = Setup :: $ factoryMethod ( $ absolutePaths , $ isDevMode , $ proxyDir , null , $ useSimpleAnnotationReader ) ; // load the datasource node $ datasourceNode = null ; foreach ( $ this -> application -> getInitialContext ( ) -> getSystemConfiguration ( ) -> getDatasources ( ) as $ datasourceNode ) { if ( $ datasourceNode -> getName ( ) === $ this -> persistenceUnitNode -> getDatasource ( ) -> getName ( ) ) { break ; } } // throw a exception if the configured datasource is NOT available if ( $ datasourceNode == null ) { throw new \ Exception ( sprintf ( 'Can\'t find a datasource node for persistence unit %s' , $ this -> persistenceUnitNode -> getName ( ) ) ) ; } // load the database node $ databaseNode = $ datasourceNode -> getDatabase ( ) ; // throw an exception if the configured database is NOT available if ( $ databaseNode == null ) { throw new \ Exception ( sprintf ( 'Can\'t find database node for persistence unit %s' , $ this -> persistenceUnitNode -> getName ( ) ) ) ; } // load the driver node $ driverNode = $ databaseNode -> getDriver ( ) ; // throw an exception if the configured driver is NOT available if ( $ driverNode == null ) { throw new \ Exception ( sprintf ( 'Can\'t find driver node for persistence unit %s' , $ this -> persistenceUnitNode -> getName ( ) ) ) ; } // initialize and return a entity manager decorator instance return new DoctrineEntityManagerDecorator ( EntityManager :: create ( ConnectionUtil :: get ( $ this -> application ) -> fromDatabaseNode ( $ databaseNode ) , $ configuration ) ) ; }
Creates a new entity manager instance based on the passed configuration.

@return object The entity manager instance
Creates a new entity manager instance based on the passed configuration .