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->getName());
// query whether the reference has already been bound to the application
if ($application->getNamingDirectory()->search($uri)) {
// log a message that the reference has already been bound
$application->getInitialContext()->getSystemLogger()->info(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()->info(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(sprintf('php:global/%s/%s', $application->getUniqueName(), $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());
}
}