public function registerPersistenceUnitReference(PersistenceUnitReferenceDescriptorInterface $persistenceUnitReference)
    {
        try {
            // load the application instance and reference name
            $application = $this->getApplication();

            // initialize the persistence unit URI
            $uri = sprintf('php:global/%s/%s', $application->getUniqueName(), $persistenceUnitReference->getRefName());

            // query whether the reference has already been bound to the application
            if ($application->getNamingDirectory()->isBound($uri)) {
                // log a message that the reference has already been bound
                $application->getInitialContext()->getSystemLogger()->debug(
                    sprintf('Persistence unit 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('Persistence unit reference %s has not been bound to naming directory', $uri)
            );
        }

        try {
            // try to use the unit name to bind the reference to
            if ($unitName = $persistenceUnitReference->getUnitName()) {
                // load the persistenc manager to bind the callback to
                $persistenceManager = $application->search(PersistenceContextInterface::IDENTIFIER);
                // create a reference to a persistence unit in the global directory
                $application->getNamingDirectory()
                            ->bind(
                                $uri,
                                array(&$persistenceManager, 'lookupProxy'),
                                array($unitName)
                            );

            // log a critical message that we can't bind the reference
            } else {
                $application->getInitialContext()->getSystemLogger()->critical(
                    sprintf('Can\'t bind persistence unit Reference %s to naming directory, because of missing unit name definition', $uri)
                );
            }

        // catch all other exceptions
        } catch (\Exception $e) {
            $application->getInitialContext()->getSystemLogger()->critical($e->__toString());
        }
    }