AppserverIo\Appserver\Core\Api\ScannerService::findAll PHP Method

findAll() public method

Initializes the available CRON configurations and returns them.
public findAll ( ) : array
return array The array with the available CRON configurations
    public function findAll()
    {
        try {
            // initialize the array with the CRON instances
            $cronInstances = array();
            // load the service necessary to validate CRON configuration files
            /** @var \AppserverIo\Appserver\Core\Api\ConfigurationService $configurationService */
            $configurationService = $this->newService('AppserverIo\\Appserver\\Core\\Api\\ConfigurationService');
            // load the base CRON configuration file
            $baseCronPath = $this->getConfdDir('cron.xml');
            // we will need to test our CRON configuration files
            $configurationService->validateFile($baseCronPath, null);
            // validate the base CRON file and load it as default if validation succeeds
            $cronInstance = new CronNode();
            $cronInstance->initFromFile($baseCronPath);
            // iterate over all jobs to configure the directory where they has to be executed
            /** @var \AppserverIo\Appserver\Core\Api\Node\JobNodeInterface $jobNode */
            foreach ($cronInstance->getJobs() as $job) {
                // load the execution information
                $execute = $job->getExecute();
                // query whether or not a base directory has been specified
                if ($execute && $execute->getDirectory() == null) {
                    // set the directory where the cron.xml file located as base directory, if not
                    $execute->setDirectory(dirname($baseCronPath));
                }
            }
            // add the default CRON configuration
            $cronInstances[] = $cronInstance;
            // iterate over the configured containers
            /** @var \AppserverIo\Appserver\Core\Api\Node\ContainerNodeInterface $containerNode */
            foreach ($this->getSystemConfiguration()->getContainers() as $containerNode) {
                // iterate over all applications and create the CRON configuration
                foreach (glob($this->getWebappsDir($containerNode) . '/*', GLOB_ONLYDIR) as $webappPath) {
                    // iterate through all CRON configurations (cron.xml), validate and merge them
                    foreach ($this->globDir(AppEnvironmentHelper::getEnvironmentAwareGlobPattern($webappPath, 'META-INF/cron')) as $cronFile) {
                        try {
                            // validate the file, but skip it if validation fails
                            $configurationService->validateFile($cronFile, null);
                            // load the system properties
                            $properties = $this->getSystemProperties($containerNode);
                            // append the application specific properties
                            $properties->add(SystemPropertyKeys::WEBAPP, $webappPath);
                            $properties->add(SystemPropertyKeys::WEBAPP_NAME, basename($webappPath));
                            // create a new CRON node instance and replace the properties
                            $cronInstance = new CronNode();
                            $cronInstance->initFromFile($cronFile);
                            $cronInstance->replaceProperties($properties);
                            // append it to the other CRON configurations
                            $cronInstances[] = $cronInstance;
                        } 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 CRON configuration will be missing
                            $systemLogger->critical(sprintf('Will skip app specific CRON configuration %s, configuration might be faulty.', $cronFile));
                        }
                    }
                }
            }
        } 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('Problems validating base CRON file %s, this might affect app configurations badly.', $baseCronPath));
        }
        // return the array with the CRON instances
        return $cronInstances;
    }