AppserverIo\Appserver\Provisioning\StandardProvisioner::provision PHP Метод

provision() публичный Метод

Provisions all web applications.
public provision ( AppserverIo\Psr\Application\ApplicationInterface $application ) : void
$application AppserverIo\Psr\Application\ApplicationInterface The application instance
Результат void
    public function provision(ApplicationInterface $application)
    {
        // check if the webapps directory exists
        if (is_dir($webappPath = $application->getWebappPath())) {
            // prepare the glob expression with the application's directories to parse
            $applicationDirectories = AppEnvironmentHelper::getEnvironmentAwareGlobPattern($webappPath, '{WEB-INF,META-INF}/provision', GLOB_BRACE);
            // load the service instance
            /** @var \AppserverIo\Appserver\Core\Api\ProvisioningService $service */
            $service = $this->getService();
            // load the configuration service instance
            /** @var \AppserverIo\Appserver\Core\Api\ConfigurationService $configurationService */
            $configurationService = $this->getInitialContext()->newService('AppserverIo\\Appserver\\Core\\Api\\ConfigurationService');
            // load the container node to initialize the system properties
            /** @var \AppserverIo\Appserver\Core\Api\Node\ContainerNodeInterface $containerNode */
            $containerNode = $application->getContainer()->getContainerNode();
            // iterate through all provisioning files (provision.xml), validate them and attach them to the configuration
            foreach ($service->globDir($applicationDirectories, GLOB_BRACE) as $provisionFile) {
                try {
                    // validate the file, but skip it if the validation fails
                    $configurationService->validateFile($provisionFile, null);
                    // load the system properties
                    $properties = $service->getSystemProperties($containerNode);
                    // append the application specific properties
                    $properties->add(SystemPropertyKeys::WEBAPP, $webappPath);
                    $properties->add(SystemPropertyKeys::WEBAPP_NAME, basename($webappPath));
                    $properties->add(SystemPropertyKeys::WEBAPP_CACHE, $application->getCacheDir());
                    $properties->add(SystemPropertyKeys::WEBAPP_SESSION, $application->getSessionDir());
                    // create a new provision node instance and replace the properties
                    $provisionNode = new ProvisionNode();
                    $provisionNode->initFromFile($provisionFile);
                    $provisionNode->replaceProperties($properties);
                    // query whether we've a datasource configured or not
                    if ($datasource = $provisionNode->getDatasource()) {
                        // try to load the datasource from the system configuration
                        $datasourceNode = $service->findByName($datasource->getName());
                        // try to inject the datasource node if available
                        if ($datasourceNode != null) {
                            $provisionNode->injectDatasource($datasourceNode);
                        }
                    }
                    /* Re-provision the provision.xml (reinitialize).
                     *
                     * ATTENTION: The re-provisioning is extremely important, because
                     * this allows dynamic replacement of placeholders by using the
                     * XML file as a template that will reinterpreted with the PHP
                     * interpreter!
                     */
                    $provisionNode->reprovision($provisionFile);
                    // execute the provisioning workflow
                    $this->executeProvision($application, $provisionNode, new \SplFileInfo($webappPath));
                } catch (ConfigurationException $ce) {
                    // load the logger and log the XML validation errors
                    $systemLogger = $this->getInitialContext()->getSystemLogger();
                    $systemLogger->error($ce->__toString());
                    // additionally log a message that DS will be missing
                    $systemLogger->critical(sprintf('Will skip reading provisioning steps in %s, provisioning might not have been done.', $provisionFile));
                }
            }
        }
    }